Я ищу некоторые специальные функции (CUDA), которые посвящают типичным плотным матричным умножениям, например. A * B, где размер A равен 6 * n, размер B равен n * 6, а n очень велико (n = 2^24). Я использовал CUBLAS и некоторые другие библиотеки для тестирования этого примера. В CUBLAS для этого примера мы используем 6 * 6 = 36 потоков, что далеко от полного параллелизма графического процессора, поэтому я разбил A и B на подматрицы (векторы) а затем реализовать функцию точечного продукта для каждого из них, а производительность была значительно улучшена. Проблема в том, что в этом случае нам нужно запустить 36 ядер CUDA, и между ними есть много одинаковых следов данных (одни и те же данные были получены в несколько раз из глобальной памяти GPU). Поэтому я спрашиваю, существует ли какое-либо решение этой проблемы.Специальный случай умножения матрицы Используя CUDA
ответ
Я недавно написал такую процедуру умножения матрицы для моего клиента. Трюк состоит в том, чтобы извлечь больше параллелизма, разделив длинное внутреннее суммирование на несколько меньших. Затем используйте отдельный запуск ядра для вычисления полной суммы из частичных.
Как вы заметили, только 36 потоков не заполняют графический процессор. Если вы разделите суммирование в матричном умножении на m частичных сумм и выполните каждую из них в отдельном потоке, вы получите в общей сложности m * 36 потоков. Выбирая m достаточно большим, вы можете полностью загрузить GPU. – tera
Как вы кешируете 2^24 значения в общей памяти? – tera
Недостаточно общей памяти для всего GPU для кэширования значений 2^24 независимо от того, сколько блоков вы создаете. Вы знакомы с [моделью программирования CUDA] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#scalable-programming-model) и как она сопоставляется с оборудованием? – tera
- 1. специальный случай умножения матрицы
- 2. Ядро самоопределения для умножения матрицы в CUDA
- 3. Использование Cuda для умножения не квадратной матрицы
- 4. Результаты умножения матрицы Cuda отличаются от MATLAB
- 5. r: как сделать умножение матрицы быстрее (специальный случай)
- 6. умножение матрицы в cuda
- 7. Особого случай разреженных матриц умножения
- 8. PyCUDA точность кода умножения матрицы
- 9. MySQL специальный случай pivot
- 10. Специальный случай краха OpenMP
- 11. Специальный случай группировки координат
- 12. Умножение матрицы Cuda
- 13. cellarray векторизации умножения матрицы
- 14. Результат умножения матрицы - 'nan'
- 15. Неверные значения умножения матрицы
- 16. Шаги умножения матрицы печати
- 17. Настройка умножения матрицы MPI_Bcast
- 18. Функция умножения матрицы
- 19. Логический алгоритм умножения матрицы
- 20. формы умножения матрицы numpy
- 21. Операция умножения матричной матрицы
- 22. Функция умножения матрицы C++
- 23. Вариации умножения матрицы Python
- 24. Ошибка умножения матрицы
- 25. Умножение 3D-матрицы в CUDA
- 26. Сумма матрицы матрицы в cuda
- 27. Умножение неквадратичной матрицы в CUDA
- 28. Обращение с автозагрузкой специальный случай
- 29. Двоичный дерево поиска специальный случай
- 30. Специальный случай с линеарным программированием
Я думаю, что, поскольку OP удалил весь текст вопроса, вопрос теперь бесполезен и вряд ли поможет любым будущим посетителям. Проголосуйте, чтобы закрыть «слишком локализован» из-за этого удаления. Я мог бы добавить, что @tera дал хороший ответ, и я считаю, что это должно было быть принято. –