2 つのイメージ ( 2000Hx3000W と 6800Hx8500W ) でソーベル カーネル畳み込みを実行するプログラムに対して、いくつかのコンパイラ スイッチを試しています。私が解釈できない観察結果がいくつかあります。データは次のとおりです - コンパイラ フラグと秒単位の所要時間 (最後の列に注目してください。大きな画像の Y 軸での畳み込みを意味します)。
O2-march=barcelona 0.1483326 0.833264 1.6018882 28.6711242
O2-ftree-vectorize 0.1462104 0.847973 1.506708 26.628592
O2 0.1468406 0.8368156 1.5999718 20.61377564
O2-ftree-vectorize-march=barcelona 0.1441898 0.827366 1.4687354 15.2572644
私が実行しているマシンが AMD barcelona であることを考えると、-O2-march=barcelona が適度に優れていると予想しました。-O2 が -O2 -march よりも優れている理由について何か考えはありますか?
-ftree-vectorize については、私のループは依存関係がないので、命令を並列に実行できるはずです。しかし、 -O2-ftree-vectorize-march=barcelona は、個々にタイミングに合理的な違いがある場合に最適です。
この振る舞いを理解できれば素晴らしいことです。
よろしく、
サヤン