-2

私はブッダブロフラクタルをレンダリングしていて、いくつかの最適化/高速化を探しています。ビット演算子を使用して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 に答える