Skip to Content

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)

И если этот самый Deferred Shading (см. слайды 19-29) - реально здоровый и за 5 минут его не понять (но из общих соображений понятно, что графика - высокопараллельна и в пределе можно ожидать 8x от AVX и 4x от 4-х ядер), то с Мандельбротом все совсем просто:

  • Простой (последний в списке) вариант - ISPC скармливается абсолютно тот же по смыслу код, что и C++. Отличия чисто технологические: чуть иначе написан цикл, добавлено слово uniform там где ему место.
  • Вариант который ispc+tasks использует еще и многоядерность. Для этого пришлось написать еще целых 25 строк, описывающих раскладку подзадач, ну и использовать прилагаемый в примерах таск-менеджер.

Таск-менеджер в последней собранной версии (1.10, берут отсюда) работает, по идее, под Win32, Linux и MacOS, хотя пробовал я только под Win32.

Продолжаю рекомендовать штуку, это один из немногих на сегодня способов дешево получить и SIMD и multi-core для скалярного кода, не выпиливая вручную на ассемблере SIMD-инструкции. При этом, получаемый код работает с данными in-place, без мучительных clEnqueueBuffer (да, OpenCL - это второй способ сделать упомянутое выше).

Из минусов - отсутствие отладчика (и его, скорее всего, не будет никогда) и всякие приветы от LLVM-3-svn. Приветы эти бывают нечасто, но случаются.

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options



.