-1

Я ищу некоторые специальные функции (CUDA), которые посвящают типичным плотным матричным умножениям, например. A * B, где размер A равен 6 * n, размер B равен n * 6, а n очень велико (n = 2^24). Я использовал CUBLAS и некоторые другие библиотеки для тестирования этого примера. В CUBLAS для этого примера мы используем 6 * 6 = 36 потоков, что далеко от полного параллелизма графического процессора, поэтому я разбил A и B на подматрицы (векторы) а затем реализовать функцию точечного продукта для каждого из них, а производительность была значительно улучшена. Проблема в том, что в этом случае нам нужно запустить 36 ядер CUDA, и между ними есть много одинаковых следов данных (одни и те же данные были получены в несколько раз из глобальной памяти GPU). Поэтому я спрашиваю, существует ли какое-либо решение этой проблемы.Специальный случай умножения матрицы Используя CUDA

+0

Я думаю, что, поскольку OP удалил весь текст вопроса, вопрос теперь бесполезен и вряд ли поможет любым будущим посетителям. Проголосуйте, чтобы закрыть «слишком локализован» из-за этого удаления. Я мог бы добавить, что @tera дал хороший ответ, и я считаю, что это должно было быть принято. –

ответ

1

Я недавно написал такую ​​процедуру умножения матрицы для моего клиента. Трюк состоит в том, чтобы извлечь больше параллелизма, разделив длинное внутреннее суммирование на несколько меньших. Затем используйте отдельный запуск ядра для вычисления полной суммы из частичных.

+0

Как вы заметили, только 36 потоков не заполняют графический процессор. Если вы разделите суммирование в матричном умножении на m частичных сумм и выполните каждую из них в отдельном потоке, вы получите в общей сложности m * 36 потоков. Выбирая m достаточно большим, вы можете полностью загрузить GPU. – tera

+0

Как вы кешируете 2^24 значения в общей памяти? – tera

+0

Недостаточно общей памяти для всего GPU для кэширования значений 2^24 независимо от того, сколько блоков вы создаете. Вы знакомы с [моделью программирования CUDA] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#scalable-programming-model) и как она сопоставляется с оборудованием? – tera

Смежные вопросы