Федеральное государственное автономное образовательное учреждение высшего образования «СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» Институт космических и информационных технологий Кафедра вычислительной техники ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ Практическая работа Профилирование программы на GPU Преподаватель _____________ подпись, дата Студент ____________________ номер группы, зачетной книжки Бурцев Б. Е. подпись, дата Студент ____________________ номер группы, зачетной книжки инициалы, фамилия Устинов П. А. подпись, дата Студент ____________________ номер группы, зачетной книжки инициалы, фамилия инициалы, фамилия Зозулин А. Е подпись, дата Красноярск 2020 инициалы, фамилия Цель работы: Освоить программное обеспечение NVIDIA Visual Profiler. Научиться выполнять профилирование приложений, исполняющихся на GPU Nvidia. Провести сравнительный анализ показателей эффективности ядер CUDA приложения. Ход работы: Рисунок 1 – Временная диаграмма выполнения программы 2 Рисунок 2 – Характеристики GPU, на котором исполняется программа На рис. 1 изображены функции выделения памяти cudaMalloc, копирования памяти MemCpy, расчетов Compute функций без использования разделения памяти matrixMulGPU и с использованием разделения памяти matrixMulGPU_shm, использование потоков Streams для переноса информации с видеокарты и на нее. 3 Таблица 1 – Описание функций, работающих с памятью Объем использованной Пропускная Функция памяти способность MemCpy (HtoD) 524,288 kB 10,183 GB/s MemCpy (DtoH) 524,288 kB 12,273 GB/s Таблица 2 – Характеристики функций расчета Значение для Характеристика matrixMulGPU Объем 22 регистров на блок Объем разделяемой памяти 0B на блок Эффективность загрузки 56,2% Эффективность памяти 100% Эффективность n/a разделяемых ресурсов Запрошенный объем 0B разделяемой памяти Рисунок 3 – с разделяемой памятью 4 Время выполнения 51,488 μs 42,72 μs Значение для matrixMulGPU_shm 28 2 KiB 100% 100% 42,3% 16 KiB Рисунок 4 – без разделяемой памяти Рисунок 5 – Слева без разделяемой памятью, а справа с разделяемой памятью Вывод: Функция с разделяемой памятью работает быстрее из-за того, что пропускная способность не сокращается из-за многократных обращений в память, как это продемонстрированно в функции без разделяемой памяти. 5