擅长:python、mysql、java
<p>我的问题是我在集会上看到了一切。试图用一种语言告诉另一种语言做我想做的事情,以便提取性能似乎比需要的更令人沮丧和困难。例如,西摩克雷总是用这种方式重铸师。<code>C=A/B</code>变成:</p>
<pre><code>R = reciprocalApprox(B);
R = reciprocalImprove(R); //M-Add performed 3x to get an accurate 1/B
C = A * R;
</code></pre>
<p>有一次有人问克雷为什么要使用牛顿-拉斐逊方法,他解释说,通过管道进行的操作比使用硬件划分要多。AMD的3DNow也采用了类似的方法,不过采用了32位浮点运算。对于使用gcc的SSE,尝试<code>-mrecip</code>标记,以及<code>-funsafe-math-optimizations, -finite-math-only</code>和<code>-fno-trapping-math</code>。臭名昭著的<code>-ffast-math</code>选项也实现了这一点。你失去了2个超视距单位,或者在最后一个地方失去了<em>个单位。</em></p>
<p><a href="http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html</a></p>
<p>你甚至可能想试试libdivide.h(在libdivide.com上)。它非常依赖内存,使用一系列“廉价”的移位和乘法运算,最终比整数除法快10倍左右。它还为编译器生成C或C++代码。</p>