使用按位运算符的Mandelbrot函数

时间:2013-01-06 22:28:12

标签: c fractals bit-manipulation

我正在渲染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++;
   }

2 个答案:

答案 0 :(得分:2)

z^2+c可以封装在fused multiply-accumulate操作中。这可以在某些处理器上作为单指令使用,并且可以在其他处理器上使用。在无法使用的处理器中,通常会对其进行优化或优化。例如,C99定义了fma系列函数来提供它。所以我要说你想要的东西可能已经发生了,如果不是这样的话,有一种非常易读的方法来保证它的存在。

一般情况下,只要您的潜意识低声说用更难以阅读,更难维护,更难以调试的解决方案X替换可读,可维护的代码,您应该更加怀疑。可读性和可维护性非常重要,不仅可以很好地编写代码,还可以分享代码并讨论它的正确性;计算机很快,编译器也很不错。

答案 1 :(得分:1)

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

你所要求的是没有意义的...好吧,如果你正在编程FPGA,它可能会有所帮助,但我认为你不是......