sto lavorando in Visual Studio 2008 e nelle impostazioni del progetto che vedo l'opzione per "attivare esteso set di istruzioni", che è possibile impostare su Nessuno, SSE o SSE2C++ come scrivere codice che il compilatore può facilmente ottimizzare per SIMD?
Così il compilatore cercherà di istruzioni lotti insieme a per fare uso delle istruzioni SIMD?
Ci sono delle regole che è possibile seguire per ottimizzare il codice in modo che il compilatore possa creare un assemblatore efficiente utilizzando queste estensioni?
Ad esempio, attualmente sto lavorando su un raytracer. Uno shader richiede qualche input e calcola dall'ingresso un colore di uscita, in questo modo:
PixelData data = RayTracer::gatherPixelData(pixel.x, pixel.y);
Color col = shadePixel(data);
sarebbe per esempio essere utile per scrivere lo shadercode tale che sarebbe ombreggiate 4 pixel differenti all'interno chiamata un'istruzione? qualcosa di simile:
PixelData data1 = RayTracer::gatherPixelData(pixel1.x, pixel1.y);
...
shadePixels(data1, data2, data3, data4, &col1out, &col2out, &col3out, &col4out);
per elaborare più dataunits contemporaneamente. Questo potrebbe essere utile per fare in modo che il compilatore usi le istruzioni SSE?
grazie!
quindi per poter utilizzare le istruzioni vettoriali è necessario scrivere assembly? – Mat
Penso che Suma indichi uno di questi: http://software.intel.com/en-us/articles/intel-compilers/ – mkb
@Mat: è possibile utilizzare i componenti intrinseci del compilatore per scrivere il codice SIMD. Vedere http://msdn.microsoft.com/en-us/library/y0dh78ez%28VS.71%29.aspx – celion