1

どの構成が好ましいのか、そしてその理由は?

A:

if(i < 1023)
   ++i;
else
   i = 0;

B:

++i;
if(i == 1024)
  i = 0;

C:

i = (i + 1) & 1023;

または他?

代替Cは小さく、分岐がない(つまり、パイプラインの中断がない)ので気に入っていますが、1024回ごとに1回だけ役立つAND演算を実行します...

4

2 に答える 2

2

私は毎回オプションCを選びます。すぐにはわかりにくいかもしれませんが、このイディオムはコーディングの経験がある人なら誰でも十分に明確であり、条件付きブランチを節約できます。最新の(つまり、過去10年間で簡単に何でも)スーパースカラープロセッサでは、ボトルネックはメモリや分岐予測です。バイナリANDのような算術演算は、近似的には無料です。

于 2013-01-30T07:25:00.370 に答える
0

100kのforループで実行すると、次の結果が得られます
。A:10.439秒
B:9.845秒
C:9.482秒
個人的には、この種の表記に慣れているため、Aを使用します。速度が問題になる場合は、Cがこれら3つの中で最高のようです。

于 2013-01-30T05:20:26.547 に答える