我現在在Visual Studio 2008中,並在項目設置我看到的選項時「激活擴展指令集」,我可以設置爲無,SSE SSE2或C++如何編寫代碼編譯器可以輕鬆優化SIMD?
因此,編譯器將嘗試批量指令一起爲了使用SIMD指令?
在如何優化代碼中可以遵循任何規則,以便編譯器可以使用這些擴展來編譯高效的彙編程序?
例如,目前我正在研究光線跟蹤器。着色器需要一些輸入和來自所述輸入來計算輸出顏色,這樣的:
PixelData data = RayTracer::gatherPixelData(pixel.x, pixel.y);
Color col = shadePixel(data);
將它例如是有益的寫shadercode使得它將一個指令呼叫內遮陽4個不同像素?像這樣:
PixelData data1 = RayTracer::gatherPixelData(pixel1.x, pixel1.y);
...
shadePixels(data1, data2, data3, data4, &col1out, &col2out, &col3out, &col4out);
一次處理多個數據單元。這對編譯器使用SSE指令會有好處嗎?
謝謝!
所以爲了使用矢量指令,有必要編寫程序集? – Mat 2010-10-26 20:13:28
我認爲Suma意味着其中之一:http://software.intel.com/en-us/articles/intel-compilers/ – mkb 2010-10-26 20:29:25
@Mat - 您可以使用編譯器內在函數編寫SIMD代碼。請參閱http://msdn.microsoft.com/en-us/library/y0dh78ez%28VS.71%29.aspx – celion 2010-10-26 22:43:26