私は Visual Studio 2008 で作業しており、プロジェクト設定に、None、SSE、または SSE2 に設定できる「拡張命令セットをアクティブにする」オプションが表示されます。
では、コンパイラは SIMD 命令を利用するために命令をまとめてバッチ処理しようとしますか?
コンパイラがこれらの拡張機能を使用して効率的なアセンブラを作成できるように、コードを最適化する方法について従うことができる規則はありますか?
たとえば、現在私はレイトレーサーに取り組んでいます。シェーダーは入力を受け取り、次のように入力から出力カラーを計算します。
PixelData data = RayTracer::gatherPixelData(pixel.x, pixel.y);
Color col = shadePixel(data);
たとえば、1 回の命令呼び出しで 4 つの異なるピクセルをシェーディングするようにシェーダーコードを記述すると有益でしょうか? このようなもの:
PixelData data1 = RayTracer::gatherPixelData(pixel1.x, pixel1.y);
...
shadePixels(data1, data2, data3, data4, &col1out, &col2out, &col3out, &col4out);
一度に複数のデータユニットを処理します。これは、コンパイラに SSE 命令を使用させるのに役立ちますか?
ありがとう!