Как скопировать матрицу в большую матрицу в CUDA

Я хочу установить большую матрицу на моем графическом процессоре для решения соответствующей системы уравнений с помощью CULA.

Некоторые цифры для вас, чтобы понять проблему:

big matrix:     400x400
small matrices: 200x200

Теперь я хочу копировать каждый квартал (100x100) малой матрицы для конкретной части второй матрицы.

Я нашел два возможных, но явно медленных примера: cublasSetMatrix а также cublasGetMatrix поддерживать спецификацию ведущего измерения, чтобы я мог размещать детали там, где я хочу, но мне нужно скопировать матрицу обратно на хост. Другой пример будет cudaMemcpy, который не поддерживает ведущие измерения. Здесь я мог бы скопировать каждую строку / столбец (на данный момент я не уверен, что используется этой подпрограммой, данные поступают из Фортрана) вручную. Но, таким образом, я должен получить большие накладные расходы...

Есть ли лучший способ, чем написать собственное ядро, скопировать матрицу?

1 ответ

Решение

Вы можете пересмотреть свою Q. Я думаю, вы находите способ, который может как изменить начальное измерение, так и сделать D2Dcpy.

Есть рутина cudaMemcpy2D() может сделать это, как показано здесь.

Другие вопросы по тегам