Программирование графических процессоров Лабораторная 2

Состав работы

material.view.file_icon
material.view.file_icon
material.view.file_icon
material.view.file_icon
material.view.file_icon
material.view.file_icon .suo
material.view.file_icon Browse.VC.db
material.view.file_icon
material.view.file_icon
material.view.file_icon
material.view.file_icon KERNEL.ipch
material.view.file_icon
material.view.file_icon .suo
material.view.file_icon Browse.VC.db
material.view.file_icon kernel.cu
material.view.file_icon
material.view.file_icon kernel.cu
material.view.file_icon lab2.vcxproj
material.view.file_icon lab2.vcxproj.user
material.view.file_icon
material.view.file_icon
material.view.file_icon kernel.cu-830140883.deps
material.view.file_icon kernel.cu.cache
material.view.file_icon kernel.cu.obj
material.view.file_icon lab2.exe.recipe
material.view.file_icon lab2.ilk
material.view.file_icon lab2.log
material.view.file_icon
material.view.file_icon CudaCompile.read.1u.tlog
material.view.file_icon CudaCompile.write.1u.tlog
material.view.file_icon lab2.lastbuildstate
material.view.file_icon lab2.write.1u.tlog
material.view.file_icon link.command.1.tlog
material.view.file_icon link.read.1.tlog
material.view.file_icon link.write.1.tlog
material.view.file_icon vc142.pdb
material.view.file_icon lab2.exe
material.view.file_icon lab2.sln
material.view.file_icon
material.view.file_icon
material.view.file_icon lab2.exe
material.view.file_icon lab2.exp
material.view.file_icon lab2.lib
material.view.file_icon lab2.pdb
material.view.file_icon Документ Microsoft Word.docx
Работа представляет собой rar архив с файлами (распаковать онлайн), которые открываются в программах:
  • Microsoft Word

Описание

Задание
1. Прочитайте главу из теоретического материала "Разделяемая память" и ответьте на контрольные вопросы (ответы на контрольные вопросы не нужно включать в отчёт по лабораторной работе).
2. Оптимизируйте алгоритмы, реализованные в лабораторной работе №1 при помощи разделяемой памяти.
3. Постройте графики зависимости времени выполнения алгоритма от размера матрицы и вектора (Размеры матрицы 1000x500, 1000x1000, 1500x1000, 2000x1000, 2000x1500, 2500x1500, 2500x2000).
4. Проанализируйте, реализованные алгоритмы при помощи утилиты nvprof на эффективность доступа к глобальной памяти.
Методические указания по выполнению лабораторной работы
Разделяемая память – это своего рода кэш. Ускорения от использования разделяемой памяти можно достичь только если к каким-то данным происходит многократное обращение. Тогда переместив их в разделяемую память из глобальной можно сократить время затраченное на обращение в память за счёт высокой скорости разделяемой памяти.
Рассмотрим схему параллельного умножения матрицы на вектор.

Рис. 1 – схема умножения матрицы на вектор
Каждая нить берёт по одной строке матрицы и умножает попарно элементы строки на элементы вектора. Все нити используют один и тот же вектор. Скопировав вектор в разделяемую память можно получить ускорения выполнения алгоритма. Но проблема разделяемой памяти в том, что её объём очень мал по сравнению с объёмом глобальной памяти. Поэтому нужно предусмотреть ситуацию когда вектор полностью в память не помещается.
Учитывая, что разделяемой памяти может не хватить нужно модифицировать алгоритм таким образом чтобы часть вектора копировалась в разделяемую память. Нити умножали часть строки на часть вектора, расположенного в разделяемой памяти. Затем копировали следующую часть вектора в разделяемую память и умножали элементы следующей части строки и т.д. как показано на рисунке 2.

Рис. 2 – умножение нитью строки на вектор с копированием частей вектора в разделяемую память
Копирование частей вектора можно производить параллельно, каждая нить может копировать в разделяемую память один или несколько элементов. Таким образом псевдокод алгоритма будет выглядеть следующим образом:
//Выделяем разделяемую память
//Количество элементов будет равно количеству нитей в блоке.
__shared__ shared_vector[THREAD_PER_BLOCK];

//k - номер части вектора. +1 потому что M не обязательно делится нацело
for(k = 0; k < (M / THREAD_PER_BLOCK) + 1; ++k) {
//p - реальный номер элемента вектора
//который будет скопирован нитью в разделяемую память
p = threadIdx.x + THREAD_PER_BLOCK * k;
//Проверка на выход за пределы вектора
if(p < M) {
//Копирование из глобальной памяти в разделяемую
//Т.к. размер разделяемой памяти равен размеру блока
//Каждая нить может скопировать по одному элементу
 shared_vector[threadIdx.x] = V[threadIdx.x + THREAD_PER_BLOCK * k];
}
//Синхронизация. Нужно дождаться пока все нити скопируют свои элементы
//Потому что каждая нить использует скопированную часть вектора полностью
__syncthread();
//i - глобальный номер нити, N - количество строк в матрице
//Проверка не выходим ли за границы матрицы
if (i < N) {
//Умножение части вектора на часть строки
//j - порядковый номер элемента в части вектора или строки матрицы
//чтобы получить реальный номер элемента матрицы
//нужно прибавить j количеству полностью обработанных элементов
 for(j = 0; j < THREAD_PER_BLOCK; ++j) {
 C[i] += A[i][j + k * THREAD_PER_BLOCK] * shared_vector[j];
}
}
//Синхронизация нужна для того чтобы убедиться
//что все нити закончили работу с частью вектора
//потому что следующая операция - перезапись разделяемой памяти
__syncthread();
}
В данном коде можно сделать ещё одну оптимизацию – перенести операции над вектором C в разделяемую память. И скопировать результат в глобальную только после того как результат будет посчитан. С учётом этого алгоритм будет выглядеть следующим образом:
//Выделяем разделяемую память
//Количество элементов будет равно количеству нитей в блоке.
__shared__ shared_vector[THREAD_PER_BLOCK];
__shared__ shared_c[THREAD_PER_BLOCK];

shared_c[threadId.x] = 0;
__syncthread();

//k - номер части вектора. +1 потому что M не обязательно делится нацело
for(k = 0; k < (M / THREAD_PER_BLOCK) + 1; ++k) {
//p - реальный номер элемента вектора
//который будет скопирован нитью в разделяемую память
p = threadIdx.x + THREAD_PER_BLOCK * k;
//Проверка на выход за пределы вектора
if(p < M) {
//Копирование из глобальной памяти в разделяемую
//Т.к. размер разделяемой памяти равен размеру блока
//Каждая нить может скопировать по одному элементу
 shared_vector[threadIdx.x] = V[threadIdx.x + THREAD_PER_BLOCK * k];
}
//Синхронизация. Нужно дождаться пока все нити скопируют свои элементы
//Потому что каждая нить использует скопированную часть вектора полностью
__syncthread();
//i - глобальный номер нити, N - количество строк в матрице
//Проверка не выходим ли за границы матрицы
if (i < N) {
//Умножение части вектора на часть строки
//j - порядковый номер элемента в части вектора или строки матрицы
//чтобы получить реальный номер элемента матрицы
//нужно прибавить j количеству полностью обработанных элементов
 for(j = 0; j < THREAD_PER_BLOCK; ++j) {
 shared_c[threadIdx.x] += A[i][j + k * THREAD_PER_BLOCK] * shared_vector[j];
}
}
//Синхронизация нужна для того чтобы убедиться
//что все нити закончили работу с частью вектора
//потому что следующая операция - перезапись разделяемой памяти
__syncthread();
}
if ( i < N ) {
 С[i] = shared_c[threadId.x];
}
__syncthread();
Модификация кода хоста в этой лабораторной работе не требуется
Для анализа эффективности доступа к разделяемой памяти используйте утилиту nvprof. События для профилирования: shared_ld_bank_conflict – количество конфликтов банков памяти при считывании данных, shared_st_bank_conflict– количество конфликтов банков памяти при записи данных. И метрики: shared_efficiency – эффективность использования пропускной способности шины данных разделяемой памяти, shared_load_transactions_per_request – количество транзакций при каждом запросе к разделяемой памяти.
По аналогии оптимизируйте алгоритм

Дополнительная информация

зачет
Программирование графических процессоров. Лабораторная работа №2
Тема: Работа с разделяемой памятью Задание 1. Прочитайте главу из теоретического материала "Разделяемая память" и ответьте на контрольные вопросы (ответы на контрольные вопросы не нужно включать в отчёт по лабораторной работе). 2. Оптимизируйте алгоритмы, реализованные в лабораторной работе №1 при помощи разделяемой памяти. 3. Постройте графики зависимости времени выполнения алгоритма от размера матрицы и вектора (Размеры матрицы 1000x500, 1000x1000, 1500x1000, 2000x1000, 2000x1500, 2500x1500, 2
User pleze : 20 марта 2022
300 руб.
Лабораторная работа 2 Программирование графических процессоров Все варианты 2023 год
2023 год СибГУТИ Сибирский государственный университет телекоммуникаций и информатики Милешко Антон Владимирович Тема: Лабораторная работа 1 2 3 Программирование графических процессоров Все варианты 2023 год Задания Лабораторная работа №2 по курсу «Программирование графических процессоров» на тему «Работа с разделяемой памятью» Выполнение лабораторной работы поможет получить навыки требующиеся для выполнения второго и третьего заданий контрольной работы. Задание 1. Прочитайте главу из теоретич
User SibSUTTI : 1 сентября 2023
198 руб.
promo
Лабораторная работа 1 2 3 Программирование графических процессоров Все варианты 2023 год
Выполнение лабораторной работы поможет получить навыки, требующиеся для выполнения первого и третьего заданий контрольной работы. Задание 1. Прочитайте главы теоретического материала под названиями "Отличия GPU от CPU", "Первая программа на CUDA C", "Алгоритм сложения двух векторов на GPU", "События, обработка ошибок и получение информации об устройстве", "Глобальная, локальная и константная память". Ответьте на контрольные вопросы и выполните контрольные задания, предложенные в конце этих глав
User Alexey312451 : 16 марта 2024
400 руб.
Лабораторная работа 1 2 3 Программирование графических процессоров Все варианты 2023 год
2023 год СибГУТИ Сибирский государственный университет телекоммуникаций и информатики Милешко Антон Владимирович Тема: Лабораторная работа 1 2 3 Программирование графических процессоров Все варианты 2023 год Задания Лабораторная работа №1 по курсу «Программирование графических процессоров» на тему «Работа с глобальной памятью» Выполнение лабораторной работы поможет получить навыки, требующиеся для выполнения первого и третьего заданий контрольной работы. Задание 1. Прочитайте главы теоретическ
User SibSUTTI : 1 сентября 2023
498 руб.
promo
Лабораторная работа №2 "Работа с разделяемой памятью" по дисциплине "Программирование графических процессоров". Вариант общий
Выполнение лабораторной работы поможет получить навыки требующиеся для выполнения второго и третьего заданий контрольной работы. Задание 1. Прочитайте главу из теоретического материала "Разделяемая память" и ответьте на контрольные вопросы (ответы на контрольные вопросы не нужно включать в отчёт по лабораторной работе). 2. Оптимизируйте алгоритмы, реализованные в лабораторной работе №1 при помощи разделяемой памяти. 3. Постройте графики зависимости времени выполнения алгоритма от размера матрицы
User vpozyaikin : 1 марта 2021
500 руб.
Лабораторная работа 2 (Вариант 3) По дисциплине: Программирование графических процессоров. Тема: «Работа с разделяемой памятью».
Задание 1. Прочитайте главу из теоретического материала "Разделяемая память" и ответьте на контрольные вопросы (ответы на контрольные вопросы не нужно включать в отчёт по лабораторной работе). 2. Оптимизируйте алгоритмы, реализованные в лабораторной работе №1 при помощи разделяемой памяти. 3. Постройте графики зависимости времени выполнения алгоритма от размера матрицы и вектора (Размеры матрицы 1000x500, 1000x1000, 1500x1000, 2000x1000, 2000x1500, 2500x1500, 2500x2000). 4. Проанализируйте, реал
User alexadubinina : 21 ноября 2024
300 руб.
ММА/ИДО Иностранный язык в профессиональной сфере (ЛТМ) Тест 20 из 20 баллов 2024 год
ММА/ИДО Иностранный язык в профессиональной сфере (ЛТМ) Тест 20 из 20 баллов 2024 год Московская международная академия Институт дистанционного образования Тест оценка ОТЛИЧНО 2024 год Ответы на 20 вопросов Результат – 100 баллов С вопросами вы можете ознакомиться до покупки ВОПРОСЫ: 1. We have … to an agreement 2. Our senses are … a great role in non-verbal communication 3. Saving time at business communication leads to … results in work 4. Conducting negotiations with foreigners we shoul
User mosintacd : 28 июня 2024
150 руб.
promo
Задание №2. Методы управления образовательными учреждениями
Практическое задание 2 Задание 1. Опишите по одному примеру использования каждого из методов управления в Вашей профессиональной деятельности. Задание 2. Приняв на работу нового сотрудника, Вы надеялись на более эффективную работу, но в результате разочарованы, так как он не соответствует одному из важнейших качеств менеджера - самодисциплине. Он не обязателен, не собран, не умеет отказывать и т.д.. Но, тем не менее, он отличный профессионал в своей деятельности. Какими методами управления Вы во
User studypro : 13 октября 2016
200 руб.
Особенности бюджетного финансирования
Содержание: Введение Теоретические основы бюджетного финансирования Понятие и сущность бюджетного финансирования Характеристика основных форм бюджетного финансирования Анализ бюджетного финансирования образования Понятие и источники бюджетного финансирования образования Проблемы бюджетного финансирования образования Основные направления совершенствования бюджетного финансирования образования Заключение Список использованный литературы Цель курсовой работы – исследовать особенности бюджетного фин
User Aronitue9 : 24 августа 2012
20 руб.
Программирование (часть 1-я). Зачёт. Билет №2
ЗАЧЕТ по дисциплине “Программирование (часть 1)” Билет 2 Определить значение переменной y после работы следующего фрагмента программы: a = 3; b = 2 * a – 10; x = 0; y = 2 * b + a; if ( b > y ) or ( 2 * b < y + a ) ) then begin x = b – y; y = x + 4 end; if ( a + b < 0 ) and ( y + x > 2 ) ) then begin x = x + y; y = x – 2 end;
User sibsutisru : 3 сентября 2021
200 руб.
Программирование (часть 1-я). Зачёт. Билет №2
up Наверх