Параллельные вычисления
книга

Параллельные вычисления

Место издания: Ставрополь

Страниц: 185

Артикул: 20499

Электронная книга
370

Краткая аннотация книги "Параллельные вычисления"

Пособие составлено в соответствии с требованиями Федерального государственного образовательного стандарта высшего образования, учебным планом и программой дисциплины. Содержит курс лекций, охватывающий теоретические аспекты проектирования и разработки приложений для параллельных вычислительных систем. Основное внимание уделяется доступной технологии разработки параллельных приложений CUD А. Основные аппаратные средства, рассматриваемые в пособии, - графические процессоры. Предназначено для студентов, обучающихся по направлению 09.04.02 - Информационные системы и технологии и обладающих теоретическими знаниями в области проектирования высокопроизводительных приложений и практическими навыками программирования (предпочтительно языки С, С++, С#).

Содержание книги "Параллельные вычисления"


Предисловие
КУРС ЛЕКЦИЙ
1. Основы параллельных вычислений
2. Концепция программирования на GPU
3. Разработка приложений CUDA
4. Взаимодействие потоков
5. Текстурная память
6. Интероперабельность компьютерной графики
7. Программирование в системах с несколькими GPU
Заключение
Литература

Все отзывы о книге Параллельные вычисления

Чтобы оставить отзыв, зарегистрируйтесь или войдите

Отрывок из книги Параллельные вычисления

4. Взаимодействие потоков Мы собираемся решить ту же задачу, что и в предыдущей главе, то есть, имея два вектора на входе, получить третий вектор, содержащий их сумму. Но на этот раз вместо блоков мы воспользуемся нитями. Возможно, вам не понятно, какие преимущества дает использова­ние нитей вместо блоков. Пока никаких достойных обсуждения пре­имуществ не видно. Однако параллельные нити внутри блока могут делать такие вещи, которые параллельным блокам не под силу. Начнем с двух заметных изменений. Раньше мы запускали N па­раллельных блоков с одной нитью в каждом: a d d < « N , l > » ( dev _ a, dev _ b, dev _ с ) ; а теперь запустим N нитей в одном блоке: a d d « < l , N » > ( dev _ a, dev _ b, dev _ с ) ; Изменить придется только способ индексации данных. Раньше входные и выходные данные индексировались в ядре с помощью но­мера блока. int tid = blockldx.x; Теперь же, поскольку блок всего один, индексировать нужно с по­мощью номера нити. int tid = threadldx.x; И это все, что нужно сделать для перехода от реализации с па­раллельными блоками к реализации с параллельными нитями. Для полноты приведем исходный текст целиком, выделив измененные строки полужирным шрифтом (рис. 4.1). Мы упомянули об аппаратном ограничении на количество блоков в одной сетке - 65 535 по каждому измерению. Существует также ограничение и на количество нитей в одном блоке. Точнее, оно не должно превышать величины в поле maxThreadsPerBlock в структу­ре, описывающей свойства устройства (см. лекцию 3). Для многих современных графических процессоров количество нитей в блоке не должно превышать 512. И как же воспользоваться подходом на осно­ве нитей для сложения векторов длиннее 512? Для этого понадобится комбинация нитей и блоков. Как и раньше, мы должны будем внести два изменения: способ вычисления индекса внутри ядра и запуск самого ядра. Когда имеют­ся несколько блоков и нитей, индексация напоминает стандартный метод перехода от двумерного индекса к линейному (рис. 4.2). - 9 3 -