|
|
1
4
您是在64位还是32位处理器上运行此功能?我的经验是,在某些边缘情况下,如果对象的大小与寄存器的大小相匹配,CPU可以通过这样的低级别功能进行优化(即使您可能假设两个浮点数可以整齐地装入64位寄存器,您仍可能失去优化的好处)。如果在32位系统上运行,您可能会发现情况正好相反。。。 一个快速的搜索和我能做的最好的引用是在C++游戏开发论坛上的几篇文章(我在游戏DVI的一年里我自己注意到了,但是那是我唯一的时间来分析这个级别)。 This post 从C++方法中得到一些有趣的拆卸结果,这些方法可能适用于非常低的水平。 另一个想法是: This article 从MSDN开始,我们讨论了在.NET中使用浮点的许多内部细节,主要是为了解决浮点比较的问题。其中有一个有趣的段落总结了处理浮点值的CLR规范:
|
|
2
3
可能在某个地方发生了一系列双浮转换,占用了CPU时间。你能用IL反汇编程序查看输出,看看它实际在做什么吗? |
|
|
3
2
您的计算可能会导致浮点值进入“非规范”状态,这在大多数x86处理器上是非常低效的。非规范值非常小,以至于它们位于最小可能浮点值的边缘。相比之下,这样的值可以很好地适应双重范围,因此在这种情况下,计算是有效的。
|
|
|
4
1
如果执行此操作,您可能希望先启动程序,然后再附加调试器,以便不会禁用JIT优化。毕竟,您希望确保查看的是实际要运行的代码。 |
|
|
5
1
考虑到您的大部分代码是 处理在double和float之间切换的3个变量,以及性能上的较大变化,我认为类型和测试中的微小变化足以改变缓存占用空间和/或寄存器使用。 我在我的32位机器上做了一些快速测试:
结果是:
不幸的是,您提供的代码中缺少了足够多的部分,因此我无法很好地编译和读取程序集,以查看到底发生了什么,但从我的(快速)测试来看,这是我的答案。
|
|
|
6
0
尝试使readOffset也浮动。 |
|
7
0
如果在函数内部使用浮动,而在外部使用一些双倍,则需要一些时间进行转换,这意味着内部函数本身的百分比时间会下降,因为函数本身的处理时间是恒定的,整个过程需要更多的时间。
|
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |