-2

我正在渲染 buddhabrot 分形,我正在寻找一些优化/加速,我想知道尝试使用按位运算符执行 z = z^2 + c 是否值得。我已经把它简化了一点。

   double zi2 = z.i*z.i;
   double zr2 = z.r*z.r;
   double zir = z.i*z.r;
   while (iterations < MAX_BUDDHA_ITERATIONS && zi2 + zr2 < 4) {

         z.i = c.i;
         z.i += zir;
         z.i += zir;
         z.r = zr2 - zi2 + c.r;
         zi2 = z.i*z.i;
         zr2 = z.r*z.r;
         zir = z.i*z.r;
         iterations++;
   }
4

2 回答 2

2

z^2+c可以封装在融合乘加运算中。这在某些处理器上可作为单指令使用,并且在其他处理器上也可用。在它不可用的处理器中,它通常是优化的或可优化的。例如,C99 定义了fma系列函数来提供它。所以我想说你想要的可能已经发生了,如果没有,有一种非常易读的方法来保证它是。

一般来说,任何时候你的潜意识都应该高度怀疑,用你刚刚构想的不那么可读、不那么可维护、更难调试的解决方案 X 来替换可读、可维护的代码会更快。可读性和可维护性不仅对于编写好代码非常重要,对于共享代码和讨论其正确性也非常重要;计算机速度很快,编译器相当不错。

于 2013-01-06T23:43:12.860 回答
1

编译器不在按位运算中执行此操作......它是 CPU 及其 ALU,它们使用按位运算,当然,对于一个单词的所有位,甚至在现代处理器中一次同时发生多个机器代码指令(如 multipy) .

你所问的毫无意义......好吧,如果你正在编程一个 FPGA,它可能是有道理的,但我假设你不是......

于 2013-01-06T22:44:30.173 回答