переноса рентгеновского излучения методом Монте-Карло. Для опи-
сания объектов используется “воксельное” (объемное) представление,
а физическая модель процессов взаимодействия фотонов с веществом
берется из пакета PENELOPE 2006. Достигнуто 10–25-кратное уско-
рение по сравнению с расчетами на центральном процессоре. Данный
проект находится в начальной стадии разработки и далек от завер-
шения.
В настоящей работе рассмотрены особенности применения техно-
логии nVidia c CUDA для распараллеливания вычислений с исполь-
зованием графических процессоров. Обсуждаются особенности про-
граммной реализации технологии, в частности подходы к использова-
нию потоковых процессоров и памяти видеоадаптера. Эффективность
распараллеливания вычислений показана на примере решения задачи
переноса гамма-излучения в веществе.
Обзор технологии.
С программной точки зрения технология
CUDA представляет собой расширение языка Си, которое можно
представить в виде двух взаимозависимых составляющих. Первая
составляющая — средства программирования для создания кода, вы-
полняемого в рамках обычной программы на центральном процессоре
(далее CPU или хост). Вторая — средства программирования, позво-
ляющие выполнять части (фрагменты) программы (проводить часть
вычислений) на видеоускорителе (GPU).
Первая из указанных составляющих (“управляющая часть”) по-
зволяет проводить с помощью CPU такие операции, как выделение
памяти на GPU и копирование данных между GPU и хостом, т.е. слу-
жит для организации запусков вычислений на GPU. Кроме того, при
необходимости, центральный процессор используется, конечно, и в
качестве вычислителя.
Вторая составляющая рассматриваемого расширения Си (“реали-
зующая часть”) дает возможность проводить вычисления непосред-
ственно на GPU.
Далее понадобятся следующие определения [2, 3].
Потоком
исполнения, или просто потоком (
thread
), называется со-
вокупность логических и арифметических операций (исполняемый
код), которые выполняются в определенной последовательности на
вычислительном устройстве. При наличии множества потоков будем
предполагать, что они выполняются параллельно, т.е. без предписан-
ного порядка во времени.
Ядро
— это совокупность потоков, запускаемая на выполнение с
хоста и выполняемая на GPU. Потоки в ядре группируются в так
называемые
блоки
(
block
); совокупность блоков представляет собой
решетку
(
grid
).
72
ISSN 1812-3368. Вестник МГТУ им. Н.Э. Баумана. Сер. “Естественные науки”. 2011. № 3