Трассировка лучей на современных графических процессорах

Вид материалаДокументы
Подобный материал:
Трассировка лучей на современных графических процессорах

Адинец Андрей Викторович, Березин Сергей Борисович

студент, ассистент

Московский Государственный Университет им. М. В. Ломоносова, Москва, Россия

E-mail: adinetz@cs.msu.su, s_berezin@cs.msu.su

Современные графические процессоры являются мощными и относительно недорогими параллельными вычислительными устройствами, обладающими достаточно широкоми возможностями. При этом мощность современных графических процессоров намного превосходит мощность центральных процессоров. Так, например, пиковая производительность графического процессора ATI X1900 составляет около 250 Гфлопс, при этом он поддерживает одновременную обработку 48 потоков данных. Для сравнения, пиковая производительность процессора Pentium 4 составляет всего лишь около 10 Гфлопс.

Высокая производительность и относительно невысокая цена, а также программируемость делают графические процессоры доступной платформой для высокопроизводительных вычислений. Соответственно, становятся актуальными задачи программирования классических параллельных алгоритмов на графических процессорах. Трассировка лучей является примером такого алгоритма, что делает логичной её реализацию на графическом процессоре.

Однако в отличие от, к примеру, умножения матриц, которое представляет собой относительно простой набор независимых последовательностей операций умножения и сложения, трассировка лучей активно использует операции ветвления и циклы. Как следствие, реализации трассировки лучей на графических процессорах старого поколения, не поддерживавших ветвления и циклы, были неэффективными. Сам процесс приходилось разбивать на множество отдельных операций, каждая из которых реализовывалась как отдельная программа (шейдер) для графического процессора, а данные промежуточных вычислений хранить в текстурах в графической памяти. Это приводило, во-первых, к простоям графического процессора, поскольку решения о ветвлении принимались на центральном процессоре, и во-вторых, к огромному объёму передаваемой информации по шине графической памяти. Это эффекты сводили на нет огромную производительность графического процессора.

Графические процессоры последнего поколения обеспечивают поддержку ветвлений и циклов, и позволяют писать достаточно сложные шейдеры. Это позволило нам разбить саму трассировку лучей на меньшее количество операций. В частности, само вычисление первого пересечения луча с геометрией выполняется в одном шейдере. Кроме этого, были применены другие оптимизации, касающиеся использования ресурсов графического процессора. Как следствие, количество обменов с памятью резко уменьшилось, а сам алгоритм стал работать намного более быстро, превысив по производительности трассировщики, написанные для обычных центральных процессоров. Также впервые для трассировщика лучей на графическом процессоре обеспечена поддержка движущихся объектов.