Иерархия памяти CUDA. Глобальная память. Параллельные решения задач умножения матриц и решения СЛАУ. Лекторы: Боресков А.В. (ВМиК
Содержание
- 2. Типы памяти в CUDA
- 3. Типы памяти в CUDA Самая быстрая – shared (on-chip) Самая медленная – глобальная (DRAM) Для ряда
- 4. Работа с памятью в CUDA Основа оптимизации – оптимизация работы с памятью Максимальное использование shared-памяти Использование
- 5. Умножение матриц Произведение двух квадратных матриц A и B размера N*N, N кратно 16 Матрицы расположены
- 6. Умножение матриц. Простейшая реализация. #define BLOCK_SIZE 16 __global__ void matMult ( float * a, float *
- 7. Умножение матриц. Простейшая реализация. int numBytes = N * N * sizeof ( float ); float
- 8. Простейшая реализация. На каждый элемент 2*N арифметических операций 2*N обращений к глобальной памяти Memory bound (тормозит
- 9. Оптимизация работы с глобальной памятью. Обращения идут через 32/64/128-битовые слова При обращении к t[i] sizeof( t
- 10. Использование выравнивания. struct vec3 { float x, y, z; }; struct __align__(16) vec3 { float x,
- 11. Device Compute Capability Compute Caps. – доступная версия CUDA Разные возможности HW Пример: В 1.1 добавлены
- 12. Device Compute Capability RTM Appendix A.1 CUDA Programming Guide
- 13. Объединение запросов к глобальной памяти. GPU умеет объединять рад запросов к глобальной памяти в один блок
- 14. Объединение (coalescing) для GPU с CC 1.0/1.1 Нити обращаются к 32-битовым словам, давая 64-байтовый блок 64-битовым
- 15. Объединение (coalescing) для GPU с CC 1.0/1.1 Coalescing
- 16. Объединение (coalescing) для GPU с CC 1.0/1.1 Not Coalescing
- 17. Объединение (coalescing) для GPU с CC 1.2/1.3 Нити обращаются к 8-битовым словам, дающим один 32-байтовы сегмент
- 18. Объединение (coalescing) Если хотя бы одно условие не выполнено 1.0/1.1 – 16 отдельных транзаций 1.2/1.3 –
- 19. Объединение (coalescing) Можно добиться заметного увеличения скорости работы с памятью Лучше использовать не массив структур, а
- 20. Использование отдельных массивов struct vec3 { float x, y, z; }; vec3 * a; float x
- 21. Решение системы линейных алгебраических уравнений Традиционные методы ориентированы на последовательное вычисление элементов и нам не подходят
- 22. Итеративные методы Эффективны когда Матрица А сильна разрежена Параллельные вычисления В обоих случаях цена (по времени)
- 23. Сходимость Если есть сходимость, то только к решению системы Записав уравнения для погрешности получаем достаточное условие
- 24. Код на CUDA // // one iteration // __global__ void kernel ( float * a, float
- 25. Ресуры нашего курса CUDA.CS.MSU.SU Место для вопросов и дискуссий Место для материалов нашего курса Место для
- 27. Скачать презентацию