私はハックCPUエミュレータを作っていますが、出力を計算する最良の方法は何か不思議でした。一度に1ステップずつ結果を計算するよりも、出力計算を読めない1行に集約する方が効率的ですか?コンパイラは両方のオプションがうまくいくように最適化しますか?基本的には、これらのどれがより効率的である -論理式の計算に最適なオプションは?
この:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no) { x = zx ? 0 : x; y = zy ? 0 : y; x = nx ? ~x : x; y = ny ? ~y : y; word result = f ? x + y : x & y; return no ? ~result : result; }
またはこの:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no) { return no ? ~(f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y)))) : (f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y)))); }
によって決定的に速くなり、その場合、分岐予測(例えばPS3のSPU)を、持っていないものは表示されません。同じコードにする。たとえば、nxは上の例ではまったく使用されていませんが、下位のコードブロックの結果に影響するようです。 –
私はタイプミスをしました。今修正されているので、同じ結果が得られるはずです。 – Avi