Я работаю в Visual Studio 2008, и в настройках проекта я вижу параметр «активировать расширенный набор инструкций», который я могу установить на None, SSE или SSE2
Значит, компилятор попытается объединить инструкции вместе, чтобы использовать инструкции SIMD?
Есть ли какие-то правила, которым можно следовать, чтобы оптимизировать код, чтобы компилятор мог создавать эффективный ассемблер, используя эти расширения?
Например, сейчас я работаю над трассировщиком лучей. Шейдер принимает некоторые входные данные и вычисляет выходной цвет, например:
PixelData data = RayTracer::gatherPixelData(pixel.x, pixel.y);
Color col = shadePixel(data);
Было бы, например, полезно написать шейдерный код таким образом, чтобы он затенял 4 разных пикселя в одном вызове инструкции? что-то вроде этого:
PixelData data1 = RayTracer::gatherPixelData(pixel1.x, pixel1.y);
...
shadePixels(data1, data2, data3, data4, &col1out, &col2out, &col3out, &col4out);
для одновременной обработки нескольких единиц данных. Было бы полезно заставить компилятор использовать инструкции SSE?
Благодарность!