Цель курса – обучение студентов научным и прикладным основам современных концепций программирования графических процессоров. Изучение программно-аппаратной архитектуры параллельных вычислений (CUDA) и соответствующих современных алгоритмов и методов программирования.
1. ГРАФИЧЕСКИЕ ПРОЦЕССОРЫ. АРХИТЕКТУРА. ТЕХНОЛОГИЯ CUDA
1.1. Развитие графических процессоров. Поколения GPU.
1.2. Основные положения CUDA. Отличие GPU от CPU.
1.3. Программная модель CUDA.
1.4. Встроенные типы данных и функции.
1.5. Атомарные операции.
2. ВИДЫ ПАМЯТИ GPU
2.1. Глобальная память.
2.1. Локальная память.
2.3. Константная память.
2.4. Регистровая память.
2.5. Разделяемая память.
2.6. Текстурная память.
3. МОДЕЛИ ЭФФЕКТИВНОГО ВЗАИМОДЕЙСТВИЯ С ПАМЯТЬЮ
3.1. Разделяемая память. Банки памяти. Конфликты банков памяти.
3.2. Глобальная память. Выравнивание запросов. Объединение запросов.
3.3. Текстурная память. Кэш-память.
4. ФУНДАМЕНТАЛЬНЫЕ АЛГОРИТМЫ
4.1. Сумма массива. Алгоритм reduction.
4.2. Префиксная сумма массива. Алгоритм scan.
4.3. Построение частного массива. Алгоритм гистограммы.
4.4. Уплотнение и группировка данных. Алгоритм compact.
5. ПАРАЛЛЕЛЬНЫЕ СОРТИРОВКИ
5.1. Битоническая сортировка.
5.2. Сортировка подсчетом.
5.3. Сортировка чет-нечет.
5.4. Карманная сортировка.
5.5. Поразрядная сортировка.
6. ПАРАЛЛЕЛЬНЫЕ МЕТОДЫ ЛИНЕЙНОЙ АЛГЕБРЫ
6.1. Параллельный метод Гаусса.
6.2. Параллельный метод прогонки. Редукция.
7. ПРОСТРАНСТВЕННЫЕ ИНДЕКСЫ
7.1. Регулярное разбиение пространства.
7.2. BSP дерево.
7.3. Octree.
7.4. QuadTree.
7.5. kd-tree.
7.6. Rtree.
8. ПРИЕМЫ И МЕТОДЫ ОПТИМИЗАЦИИ ПРОГРАММ
8.1. Приемы, основанные на анализе кода программ через модификацию.
8.2. Стандартные счетчики и метрики.
8.3. Механизм событий.
8.4. Профилировщики nvprof и nvpp.
9. ГОТОВЫЕ БИБЛИОТЕКИ АЛГОРИТМОВ
9.1. Библиотека стандартных алгоритмов Thrust.
9.2. Библиотека линейной алгебры: cuBLAS.
9.3. Преобразование Фурье: cuFFT.
9.4. Генерация случайных чисел: cuRAND.
9.5. Обучение глубоких нейронных сетей cuDNN.
9.6. Машинное обучение: TensorFlow.