
- •Нижегородский государственный университет им. Н.И. Лобачевского
- •Содержание
- •Архитектура GPU NVIDIA
- •Архитектура CPU и GPU
- •Архитектура CPU и GPU
- •Архитектура GPU: общие сведения
- •Архитектура Tesla 8/10
- •Мультипроцессор Tesla 8
- •Мультипроцессор Tesla 10
- •Иерархия памяти Tesla 10
- •Мультипроцессор Fermi
- •Архитектура Fermi
- •Вычислительные возможности
- •Вычислительные возможности
- •Исполнение потоков
- •Основные понятия
- •Взаимодействие потоков
- •Выполнение блоков
- •«Автоматическая масштабируемость»
- •SIMT
- •Пример выполнения варпов
- •Выполнение ветвлений
- •Оптимизация загрузки устройства
- •Иерархия памяти CUDA
- •Типы памяти и скорость доступа
- •Использование локальной памяти
- •Использование константной памяти
- •Использование константной памяти
- •Использование текстурной памяти
- •Использование глобальной памяти
- •Использование глобальной памяти
- •Пример: выделение памяти и копирование вектора
- •Эффективная работа с глобальной памятью
- •Эффективная работа с глобальной памятью
- •Эффективная работа с глобальной памятью
- •Пример доступа к глобальной памяти
- •Пример доступа к глобальной памяти
- •Пример доступа к глобальной памяти
- •Рекомендации по эффективной работе с глобальной памятью
- •Пример
- •Работа с разделяемой памятью
- •Работа с разделяемой памятью
- •Пример
- •Динамически выделяемая разделяемая память
- •Пример
- •Эффективная работа с разделяемой памятью
- •Эффективная работа с разделяемой памятью
- •Доступ к разделяемой памяти без конфликтов банков
- •Доступ к разделяемой памяти с конфликтами банков
- •Пример: параллельная редукция
- •Постановка задачи
- •Иерархическое суммирование
- •Вариант 1
- •Вариант 1
- •Вариант 2
- •Вариант 2
- •Вариант 3
- •Вариант 3
- •Вариант 4
- •Вариант 4
- •Вариант 5
- •Результаты
- •Материалы

Вариант 5
При s <= 32 в блоке работает только один варп.
Можно развернуть цикл, избавившись от синхронизации и проверки условия.
for ( int s = blockDim.x / 2; s > 32; s >>= 1 ) { if ( tid < s )
data [tid] += data [tid + s];
__syncthreads ();
}
if ( tid < 32 ) { // unroll last iterations data [tid] += data [tid + 32];
data [tid] += data [tid + 16]; data [tid] += data [tid + 8]; data [tid] += data [tid + 4]; data [tid] += data [tid + 2]; data [tid] += data [tid + 1];
}
Н. Новгород, 2012 г. |
Исполнение потоков. Иерархия памяти |
61 |

Результаты
Вариант |
Время |
алгоритма |
выполнения |
|
(миллисекунды |
|
) |
1 |
19.09 |
2 |
11.91 |
3 |
10.62 |
4 |
9.10 |
Возможна дальнейшая5 оптимизация: 8полное.67 разворачивание на этапе компиляции при помощи параметров шаблонов. В примере в SDK данный вариант
реализован.
Н. Новгород, 2012 г. |
Исполнение потоков. Иерархия памяти |
62 |

Материалы
Линев А.В., Боголепов Д.К., Бастраков С.И. «Технологии параллельного программирования для процессоров новых архитектур» / Учебник.
Дополнительная подготовка магистров по программе «Суперкомпьютерные технологии»: http://hpcc.unn.ru/?doc=493
NVIDIA CUDA C Programming Guide v. 4.1.
А.В. Боресков, А.А. Харламов «Основы работы с технологией CUDA» и материалы курса по CUDA в МГУ: https://sites.google.com/site/cudacsmsusu/file-cabinet
Д. Сандерс, Э. Кэндрот «Технология CUDA в примерах: введение в программирование графических процессоров» (пер. с англ.).
Н. Новгород, 2012 г. |
Исполнение потоков. Иерархия памяти |
63 |