Параллельные вычисления
Пособие составлено в соответствии с требованиями Федерального государственного образовательного стандарта высшего образования, учебным планом и программой дисциплины.Содержит курс лекций, охватывающий теоретические аспекты проектирования и разработки приложений для параллельных вычислительных систем. Основное внимание уделяется доступной технологии разработки параллельных приложений CUD А. Основные аппаратные средства, рассматриваемые в пособии, - графические процессоры.Предназначено для студентов, обучающихся по направлению 09.04.02 - Информационные системы и технологии и обладающих теоретическими знаниями в области проектирования высокопроизводительных приложений и практическими навыками программирования (предпочтительно языки С, С++, С#).
Содержание
Содержание книги "Параллельные вычисления "
Отрывок из книги
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 -
Внимание!
При обнаружении неточностей или ошибок в описании книги "Параллельные вычисления (автор Евгений Николаев)", просим Вас отправить сообщение на почту help@directmedia.ru. Благодарим!
и мы свяжемся с вами в течение 15 минут
за оставленную заявку