PPt4Web Хостинг презентаций

Главная / Информатика / Вопросы программирования и оптимизации приложений на CUDA
X Код для использования на сайте:

Скопируйте этот код и вставьте его на свой сайт

X

Чтобы скачать данную презентацию, порекомендуйте, пожалуйста, её своим друзьям в любой соц. сети.

После чего скачивание начнётся автоматически!

Кнопки:

Презентация на тему: Вопросы программирования и оптимизации приложений на CUDA


Скачать эту презентацию

Презентация на тему: Вопросы программирования и оптимизации приложений на CUDA


Скачать эту презентацию

№ слайда 1 Лекторы: Лекторы: Обухов А.Н. (Nvidia) Боресков А.В. (ВМиК МГУ) Харламов А.А. (N
Описание слайда:

Лекторы: Лекторы: Обухов А.Н. (Nvidia) Боресков А.В. (ВМиК МГУ) Харламов А.А. (Nvidia)

№ слайда 2 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 3 Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование ч
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование части приложения Общие рекомендации по оптимизации Инструментарий Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 4 Определение класса портируемой задачи Определение класса портируемой задачи Уров
Описание слайда:

Определение класса портируемой задачи Определение класса портируемой задачи Уровень параллелизма. SIMD Классы задач, которые в общем случае невозможно распараллелить

№ слайда 5
Описание слайда:

№ слайда 6 Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование ч
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование части приложения Общие рекомендации по оптимизации Инструментарий Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 7 Переосмысление задачи в терминах параллельной обработки данных Переосмысление за
Описание слайда:

Переосмысление задачи в терминах параллельной обработки данных Переосмысление задачи в терминах параллельной обработки данных Выявляйте параллелизм Максимизируйте интенсивность вычислений Иногда выгоднее пересчитать чем сохранить Избегайте лишних транзакций по памяти Особое внимание особенностям работы с различными видами памяти (об этом дальше) Эффективное использование вычислительной мощи Разбивайте вычисления с целью поддержания сбалансированной загрузки SM’ов Параллелизм потоков vs. параллелизм по данным

№ слайда 8 Occupancy Occupancy Покрытие латентностей: инструкции потока выполняются последо
Описание слайда:

Occupancy Occupancy Покрытие латентностей: инструкции потока выполняются последовательно Исполнение других потоков необходимо для покрытия латентностей Занятость: отношение активных варпов к максимально возможному В архитектуре Tesla 32 варпа на SM

№ слайда 9 Occupancy Occupancy Увеличение занятости приводит к лучшему покрытию латентносте
Описание слайда:

Occupancy Occupancy Увеличение занятости приводит к лучшему покрытию латентностей После определенной точки (~50%), происходит насыщение Занятость ограничена достыпными ресурсами: Регистры Разделяемая память

№ слайда 10 Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование ч
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Портирование части приложения Общие рекомендации по оптимизации Инструментарий Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 11
Описание слайда:

№ слайда 12 Статическая компиляция: IDE(MS Visual Studio + cuda.rules), Makefile, CL Статиче
Описание слайда:

Статическая компиляция: IDE(MS Visual Studio + cuda.rules), Makefile, CL Статическая компиляция: IDE(MS Visual Studio + cuda.rules), Makefile, CL PTX JIT-компиляция

№ слайда 13
Описание слайда:

№ слайда 14 GPU debugger GPU debugger Wednesday, April 08: Today NVIDIA announces an industr
Описание слайда:

GPU debugger GPU debugger Wednesday, April 08: Today NVIDIA announces an industry milestone for GPU Computing. With CUDA 2.2 beta we are including the industries 1st GPU HW Debugger to our developer community. GPU emulation -deviceemu D_DEVICEEMU Запускает по одному host-процессу на каждый CUDA-поток Работоспособность в режиме эмуляции не всегда кореллирует с работоспособностю на GPU Два инструмента не конкурируют, а дополняют друг друга Один из интересных сценариев: Boundchecker + Emulation

№ слайда 15 Достоинства эмуляции Достоинства эмуляции Исполняемый файл, скомпилированный в р
Описание слайда:

Достоинства эмуляции Достоинства эмуляции Исполняемый файл, скомпилированный в режиме эмуляции работает целиком на CPU Не требуется драйвер CUDA и GPU Каждый поток GPU эмулируется потоком CPU При работе в режиме эмуляции можно: Использовать средства отладки CPU (точки останова и т.д.) Обращаться к любым данным GPU с CPU и наоборот Делать любые CPU-вызовы из код GPU и наоборот (например printf()) Выявлять ситуации зависания, возникающие из-за неправильного применения __syncthreads()

№ слайда 16 Недостатки эмуляции Недостатки эмуляции Часто работает очень медленно Неумышленн
Описание слайда:

Недостатки эмуляции Недостатки эмуляции Часто работает очень медленно Неумышленное разыменование указателей GPU на стороне CPU или наоборот Результаты операций с плавающей точкой CPU и «настоящего» GPU почти всегда различаются из-за: Разного порядка выполняемых операций Разных допустимых ошибок результатов Использования большей точности при расчёте промежуточных результатов на CPU

№ слайда 17
Описание слайда:

№ слайда 18
Описание слайда:

№ слайда 19 CUDA Profiler, позволяет отслеживать: CUDA Profiler, позволяет отслеживать: Врем
Описание слайда:

CUDA Profiler, позволяет отслеживать: CUDA Profiler, позволяет отслеживать: Время исполнения на CPU и GPU в микросекундах Конфигурацию grid и thread block Количество статической разделяемой памяти на блок Количество регистров на блок Коэффициент занятости GPU (Occupancy) Количество объединенных и индивидуальных запросов к глобальной памяти (coalescing) Количество дивергентных путей исполнения (branching) Количество выполненных инструкций Количество запущенных блоков Вся эта информация собирается с первого SM или TPC. Профилирование Uber-kernel’ов с осторожностью

№ слайда 20
Описание слайда:

№ слайда 21 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Константная Текстурная Глобальная Разделяемая Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 22 Быстрая, кешируемая, только для чтения Быстрая, кешируемая, только для чтения Да
Описание слайда:

Быстрая, кешируемая, только для чтения Быстрая, кешируемая, только для чтения Данные должны быть записаны до вызова кернела (например при помощи cudaMemcpyToSymbol) Всего 64Kb (Tesla) Объявление при помощи слова __constant__ Доступ из device кода простой адресацией Срабатывает за 4 такта на один адрес внутри варпа 4 такта на всю транзакцию в случае если все потоки внутри варпа читают один адрес В худшем случае 64 такта

№ слайда 23 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Константная Текстурная Глобальная Разделяемая Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 24 Быстрая, кешируемая в 2-х измерениях, только для чтения Быстрая, кешируемая в 2-
Описание слайда:

Быстрая, кешируемая в 2-х измерениях, только для чтения Быстрая, кешируемая в 2-х измерениях, только для чтения Данные должны быть записаны при помощи cudaMemcpyToArray, либо возможно прикрепление к глобальной памяти через cudaBindTexture2D Объявление при помощи текстурных ссылок Доступ из device кода при помощи tex1D, tex2D, tex1Dfetch Лучшая производительность при условии что потоки одного варпа обращаются к локализованной окрестности в 2D

№ слайда 25 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Константная Текстурная Глобальная Разделяемая Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 26 Медленная, некешируемая (G80), чтение/запись Медленная, некешируемая (G80), чтен
Описание слайда:

Медленная, некешируемая (G80), чтение/запись Медленная, некешируемая (G80), чтение/запись Запись данных с/на хост через cudaMemcpy* Транзакции по PCI-e медленные: макс. 4GB/s vs. 80 GB/s при копировании device-device Возможность асинхронных транзакций Ускорение транзакций путем выделения host page-locked памяти (cudaMallocHost) Объявление при помощи слова __global__ Доступ простой индексацией Время доступа от 400 до 600 тактов на транзакцию – высокая латентность

№ слайда 27 16 потоков. Типы транзакций: 16 потоков. Типы транзакций: 4-байтовые слова, одна
Описание слайда:

16 потоков. Типы транзакций: 16 потоков. Типы транзакций: 4-байтовые слова, одна 64-байтовая транзакция 8-байтовые слова, одна 128-байтовая транзакция 16-байтовые слова, две 128-байтовых транзакции Все 16 элементов должны лежать в едином сегменте, размер и выравнивание которого совпадает с размером транзакции Строгий порядок доступа: k-й поток обращается к k-му элементу в сегменте При нарушении порядка вместо одной транзакции получается 16 Некоторые из потоков могут не участвовать

№ слайда 28
Описание слайда:

№ слайда 29 Объединенная транзакция получается, если все элементы лежат в сегментах: Объедин
Описание слайда:

Объединенная транзакция получается, если все элементы лежат в сегментах: Объединенная транзакция получается, если все элементы лежат в сегментах: размера 32 байта, потоки обращаются к 1-байтовым элементам размера 64 байта, потоки обращаются к 2-байтовым элементам размера 128 байт, потоки обращаются к 4- и 8-байтовым элементам Нестрогий порядок доступа. Возможно обращение несколькими потоками к одному адресу При выходе за границы сегмента число транзакций увеличивается минимально

№ слайда 30
Описание слайда:

№ слайда 31 Используйте cudaMallocPitch для работы с 2D-массивами Используйте cudaMallocPitc
Описание слайда:

Используйте cudaMallocPitch для работы с 2D-массивами Используйте cudaMallocPitch для работы с 2D-массивами Конфигурируйте блоки с большей протяженностью по x Параметризуйте конфигурацию, экспериментируйте В сложных случаях используйте привязку сегмента глобальной памяти к текстуре в случае если Compute Capability < 1.2 cudaBindTexture, tex1Dfetch cudaBindTexture2D, tex2D

№ слайда 32
Описание слайда:

№ слайда 33 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Константная Текстурная Глобальная Разделяемая Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 34 Быстрая, некешируемая, чтение/запись Быстрая, некешируемая, чтение/запись Объявл
Описание слайда:

Быстрая, некешируемая, чтение/запись Быстрая, некешируемая, чтение/запись Объявление при помощи слова __shared__ Доступ из device кода при помощи индексирования Самый быстрый тип памяти после регистров, низкая латентность доступа Можно рассматривать как полностью открытый L1-кеш При работе с разделяемой памятью следует помнить о ее разбиении на банками памяти

№ слайда 35 Память разделена на 16 банков памяти, по числу потоков в варпе Память разделена
Описание слайда:

Память разделена на 16 банков памяти, по числу потоков в варпе Память разделена на 16 банков памяти, по числу потоков в варпе Каждый банк может обратиться к одному адресу за 1 такт Максимальное число адресов, к которым может обратиться память одновременно совпадает с числом банков Одновременное обращение нескольких потоков из одного полуварпа к одному банку приводит к конфликту банков и сериализации запросов (кроме broadcast)

№ слайда 36 Доступ без конфликтов банков Доступ без конфликтов банков
Описание слайда:

Доступ без конфликтов банков Доступ без конфликтов банков

№ слайда 37 Доступ с конфликтами банков Доступ с конфликтами банков
Описание слайда:

Доступ с конфликтами банков Доступ с конфликтами банков

№ слайда 38
Описание слайда:

№ слайда 39 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Приоритеты оптимизации Сценарий работы с shared памятью Копирование global <-> shared Обработка в shared памяти Стратегии распределения работы Разное

№ слайда 40 Объединение запросов к глобальной памяти Объединение запросов к глобальной памят
Описание слайда:

Объединение запросов к глобальной памяти Объединение запросов к глобальной памяти Ускорение до 20 раз Стремление к локальности Использование разделяемой памяти Высокая скорость работы Удобство взаимодействия потоков Эффективное использование параллелизма GPU не должен простаивать Преобладание вычислений над операциями с памятью Много блоков и потоков в блоке Банк-конфликты Если избавление от 4-кратных конфликтов банков влечет увеличение числа инструкций, то данный вид оптимизации можно не делать

№ слайда 41 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Приоритеты оптимизации Сценарий работы с shared памятью Копирование global <-> shared Обработка в shared памяти Стратегии распределения работы Разное

№ слайда 42 Загрузка данных из глобальной памяти в разделяемой Загрузка данных из глобальной
Описание слайда:

Загрузка данных из глобальной памяти в разделяемой Загрузка данных из глобальной памяти в разделяемой __syncthreads(); Обработка данных в разделяемой памяти __syncthreads(); //если требуется Сохранение результатов в глобальной памяти Шаги 2–4 могут быть обрамлены в условия и циклы Шаг 4 может быть ненужен в случае если выходные данные независимы между собой

№ слайда 43 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Приоритеты оптимизации Сценарий работы с shared памятью Копирование global <-> shared Обработка в shared памяти Стратегии распределения работы Разное

№ слайда 44 dim3 block(64); dim3 block(64); __shared__ float dst[64]; __global__ void kernel
Описание слайда:

dim3 block(64); dim3 block(64); __shared__ float dst[64]; __global__ void kernel(float *data) {//coalescing, no bank conflicts dst[threadIdx.x] = data[threadIdx.x]; }

№ слайда 45 dim3 block(64); dim3 block(64); __shared__ byte dst[64]; __global__ void kernel_
Описание слайда:

dim3 block(64); dim3 block(64); __shared__ byte dst[64]; __global__ void kernel_bad(byte *data) {//no coalescing, 4-way bank conflicts present dst[threadIdx.x] = data[threadIdx.x]; } __global__ void kernel_good(byte *data) {//coalescing, no bank conflicts, no branching if (threadIdx.x < 16) { int tx = threadIdx.x * 4; *((int *)(dst + tx)) = *((int *)(data + tx)); } }

№ слайда 46 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Приоритеты оптимизации Сценарий работы с shared памятью Копирование global <-> shared Обработка в shared памяти Стратегии распределения работы Разное

№ слайда 47
Описание слайда:

№ слайда 48 __device__ int permute64by4(int t) __device__ int permute64by4(int t) { return (
Описание слайда:

__device__ int permute64by4(int t) __device__ int permute64by4(int t) { return (t >> 4) + ((t & 0xF) << 2); }

№ слайда 49
Описание слайда:

№ слайда 50
Описание слайда:

№ слайда 51 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Command & Conquer Uber-kernel Persistent threads Разное

№ слайда 52 Задачи с нерегулярным параллелизмом Задачи с нерегулярным параллелизмом Переменн
Описание слайда:

Задачи с нерегулярным параллелизмом Задачи с нерегулярным параллелизмом Переменное кол-во итераций Большое кол-во ветвлений

№ слайда 53 Разделить ядра на более простые Разделить ядра на более простые Позволяет выявит
Описание слайда:

Разделить ядра на более простые Разделить ядра на более простые Позволяет выявить bottleneck Увеличивает Occupancy Возможность перераспределять работу между ядрами

№ слайда 54 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Command & Conquer Uber-kernel Persistent threads Разное

№ слайда 55 Uber-kernel Uber-kernel
Описание слайда:

Uber-kernel Uber-kernel

№ слайда 56
Описание слайда:

№ слайда 57
Описание слайда:

№ слайда 58
Описание слайда:

№ слайда 59 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Command & Conquer Uber-kernel Persistent threads Разное

№ слайда 60
Описание слайда:

№ слайда 61
Описание слайда:

№ слайда 62
Описание слайда:

№ слайда 63
Описание слайда:

№ слайда 64
Описание слайда:

№ слайда 65 Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с разли
Описание слайда:

Процесс разработки программ CUDA Процесс разработки программ CUDA Работа с различными типами памяти Паттерны программирования на CUDA Стратегии распределения работы Разное

№ слайда 66 Если происходит ветвление внутри варпа, то разные ветви исполнения сериализуются
Описание слайда:

Если происходит ветвление внутри варпа, то разные ветви исполнения сериализуются Если происходит ветвление внутри варпа, то разные ветви исполнения сериализуются Увеличивается общее количество инструкций Если ветвление происходит между варпами, то штраф минимальный

№ слайда 67
Описание слайда:

№ слайда 68
Описание слайда:

№ слайда 69
Описание слайда:

№ слайда 70 Промежуточный ассемблер может показать много интересного Промежуточный ассемблер
Описание слайда:

Промежуточный ассемблер может показать много интересного Промежуточный ассемблер может показать много интересного --ptxas-options=-v

№ слайда 71 Промежуточный ассемблер может показать много интересного Промежуточный ассемблер
Описание слайда:

Промежуточный ассемблер может показать много интересного Промежуточный ассемблер может показать много интересного --ptxas-options=-v

№ слайда 72 Промежуточный ассемблер может показать много интересного Промежуточный ассемблер
Описание слайда:

Промежуточный ассемблер может показать много интересного Промежуточный ассемблер может показать много интересного --keep

№ слайда 73 Промежуточный ассемблер может показать много интересного Промежуточный ассемблер
Описание слайда:

Промежуточный ассемблер может показать много интересного Промежуточный ассемблер может показать много интересного --keep

№ слайда 74 Следить за ветвлением Следить за ветвлением Заменить часть вычислений на look-up
Описание слайда:

Следить за ветвлением Следить за ветвлением Заменить часть вычислений на look-up таблицу Интринсики __sinf(); __cosf(); expf() __[u]mul24() __fdividef() __[u]sad()

№ слайда 75 __mul24 и __umul24 работают быстрее, чем * __mul24 и __umul24 работают быстрее,
Описание слайда:

__mul24 и __umul24 работают быстрее, чем * __mul24 и __umul24 работают быстрее, чем * Возможно увеличение числа регистров после применения На будущих архитектурах ситуация может развернуться наоборот и __mul24 станет медленнее Использование флагов В остальном целочисленная арифметика работает примерно с такой же скоростью, как и с плавающей точкой (за исключением целочисленного деления)

№ слайда 76 Конфигурация gridDim и blockDim возможно во время исполнения: Конфигурация gridD
Описание слайда:

Конфигурация gridDim и blockDim возможно во время исполнения: Конфигурация gridDim и blockDim возможно во время исполнения:

№ слайда 77 Исользование template Исользование template
Описание слайда:

Исользование template Исользование template

№ слайда 78 Математика FPU (на GPU в частности) не ассоциативна Математика FPU (на GPU в час
Описание слайда:

Математика FPU (на GPU в частности) не ассоциативна Математика FPU (на GPU в частности) не ассоциативна (x+y)+z не всегда равно x+(y+z) Например при x = 10^30, y = -10^30, z = 1

№ слайда 79 CUDA.CS.MSU.SU CUDA.CS.MSU.SU Место для вопросов и дискуссий Место для материало
Описание слайда:

CUDA.CS.MSU.SU CUDA.CS.MSU.SU Место для вопросов и дискуссий Место для материалов нашего курса Место для ваших статей! Если вы нашли какой-то интересный подход! Или исследовали производительность разных подходов и знаете, какой из них самый быстрый! Или знаете способы сделать работу с CUDA проще! www.steps3d.narod.ru www.nvidia.ru

№ слайда 80
Описание слайда:

№ слайда 81 Александр Гужва Александр Гужва Антон Обухов Владимир Фролов Дмитрий Ватолин Дми
Описание слайда:

Александр Гужва Александр Гужва Антон Обухов Владимир Фролов Дмитрий Ватолин Дмитрий Микушин Евгений Перепелкин Михаил Смирнов Николай Сахарных

Скачать эту презентацию

Презентации по предмету
Презентации из категории
Лучшее на fresher.ru