Previous Entry Share Next Entry
direct x 11 / windows 7
mantra
tikov wrote in quadrofx
http://ru.wikipedia.org/wiki/DirectX_11


Вычислительные шейдеры и неупорядоченная память

Подходы GPGPU (Вычисления на графическом процессоре общего назначения) такие как, например, технология CUDA от NVIDIA, последние несколько лет становятся все более популярными. Однако, существующие решения являются специфичными для каждого производителя и часто требуют дополнительного программирования для решения проблем, возникающих на различных графических процессорах. Например, на графических процессорах серии GeForce 8 при использовании CUDA переключение режимов между CUDA и традиционной визуализацией вызывает большие задержки.

Direct3D 11 вводит новый тип шейдера - вычислительный шейдер (Compute Shader). Вычислительный шейдер вызывается как регулярный массив потоков. Потоки делятся на группы. Каждая группа имеет 32 Кб памяти, разделяемой между потоками группы. Таким образом потоки в группе могут обмениваться результатами, улучшая свою производительность. Также потоки могут производить чтения и записи с произвольным доступом к графическим ресурсам: текстурам, массивам вершин, рендер таргетам. Эти доступы к памяти неупорядочены, хотя синхронизация различных инструкций осуществляется, когда это действительно необходимо.

Пиксельные (фрагментные) шейдеры могут также читать по произвольному адресу, что позволяет записывать структуры данных, которые могут быть затем использованы в вычислительном шейдере, или наоборот. Стоит отметить, что пиксельные шейдеры всегда имели возможность произвольного доступа на чтение через текстурные лукапы.

Несколько примеров вычислительных шейдеров были представлены на Gamefest: использование в пост-процессе алгоритма нахождения средней яркости изображения рендер таргета, расчёт гистограммы яркости (оба варианта используются в методе tone mapping). Их применение позволило получить двукратное увеличение производительности по сравнению с пиковой при использовании пиксельных шейдеров.

Вычислительные шейдеры могут также прозводить операции такие, как summed-area tables, быстрое Фурье-преобразование значительно быстрее, чем ранее применяемые методы на графическом процессоре. На данный момент Microsoft исследует библиотеки, обеспечивающие подобные расчёты. Microsoft считает, что алгоритмы такие как: A-буфер визуализация и трассировка лучей могут также быть осуществлены эффективно, но на данный момент нет реальных показателей, свидетельствующих об их эффективности.

Вызов вычислительного шейдера заменяет все стадии конвейера визуализации. Тем не менее, можно смешивать вычислительные шейдеры и традиционный рендер путём использования их результатов. Например, обработка изображения после визуализации вычислительным шейдером (можно загружать дополнительные структуры данных).

Полезные ссылки:

  • 1
  • 1
?

Log in