したがって、私には非常に単純に見える次のコードがあります。
#define MODS_COUNT 5
int start1 = <calc at runtime>;
int start2 = <calc at runtime>;
for (int j=0; j<MODS_COUNT; j++) // loop 5 times doing simple addition.
logModifiers[start1 + j] += logModsThis[start2 + j];
このループは外側のループの一部です (これが違いを生むかどうかはわかりません)
コンパイラは次のように述べています。
message : loop was not vectorized: vectorization possible but seems inefficient.
このループをベクトル化できないのはなぜですか? 私にはとても簡単に思えます。ベクトル化を強制して自分でパフォーマンスをチェックするにはどうすればよいですか?
Intel C++ Compiler 2013 update 3 を使用しています。
興味のある方は完全なコードをご覧ください: http://pastebin.com/Z6H5ZejW
編集:コンパイラが非効率的であると判断したことを理解しています。私は尋ねている:
なぜ非効率なのですか?
自分自身をベンチマークできるように強制するにはどうすればよいですか?
Edit2: 5 ではなく 4 に変更すると、ベクトル化されます。5 が非効率的である理由は何ですか? 最初の命令は 4 命令で、2 番目の命令は 5 命令ではなく 1 命令です。