6

したがって、私には非常に単純に見える次のコードがあります。

#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 命令です。

4

2 に答える 2