ISPC

ISPC 1.10

ISPCшные примеры, понятно что подобранные со вкусом, дают повод задуматься:

 C:\> deferred_shading.exe pp1920x1200.bin [ispc static + tasks]: [151.426] million cycles to render 1920 x 1200 image [C++ serial dynamic, 1 core]: [2883.776] million cycles to render image (19.04x speedup from ISPC) C:\>mandelbrot_tasks.exe [mandelbrot ispc+tasks]: [190.607] million cycles [mandelbrot serial]: [2133.784] millon cycles (11.19x speedup from ISPC) C:\> mandelbrot.exe [mandelbrot ispc]: [102.830] million cycles [mandelbrot serial]: [276.757] millon cycles (2.69x speedup from ISPC) 

И если...

Про AVX и ISPC

Разработчики Intel SPMD Program Compiler, который в этом блоге уже несколько раз поминался, выпустили версию 1.0.9 в которой

=== v1.0.9 === (26 September 2011)

The binary release of v1.0.9 is the first that supports AVX code generation. Two targets are provided: "avx", which runs with a programCount of 8, and "avx-x2" which runs 16 program instances simultaneously.

Честь им за это и хвала, мои попытки (не слишком настойчивые) самостоятельно собрать ISPC с LLVM3 так...

Об автоматической векторизации

Провел на поминавшемся вчера ISPC еще один тест, на применимость ровно в том месте, куда он лучше всего приспособлен.

Есть такое ужасное место в обработке изображений (уже поминавшееся в этом блоге): преобразование из линейной гаммы в sRGB-гамму или в Lab. Там в формуле сначала линейный участок, а потом степенной. Вот как это выглядит, если делать в лоб для плавающей точки:

void linear2srgb(float *in,
...

Об Intel ISPC

Интел выкатил в опенсорс такую вот игрушку: Intel SPMD Program Compiler.

Это очередная попытка придумать параллельный язык C: пишете некую функцию, к примеру, обрабатывающую элемент данных, варез сам строит SIMD-представление (SSE, AVX), которое обрабатывает 4(8) элементов за раз. Ну как-то так:

void vector_sum(uniform float in[], uniform int count, reference uniform float out[])
...
Subscribe to ISPC