Как скопировать матрицу в большую матрицу в CUDA
Я хочу установить большую матрицу на моем графическом процессоре для решения соответствующей системы уравнений с помощью CULA.
Некоторые цифры для вас, чтобы понять проблему:
big matrix: 400x400
small matrices: 200x200
Теперь я хочу копировать каждый квартал (100x100)
малой матрицы для конкретной части второй матрицы.
Я нашел два возможных, но явно медленных примера: cublasSetMatrix
а также cublasGetMatrix
поддерживать спецификацию ведущего измерения, чтобы я мог размещать детали там, где я хочу, но мне нужно скопировать матрицу обратно на хост. Другой пример будет cudaMemcpy
, который не поддерживает ведущие измерения. Здесь я мог бы скопировать каждую строку / столбец (на данный момент я не уверен, что используется этой подпрограммой, данные поступают из Фортрана) вручную. Но, таким образом, я должен получить большие накладные расходы...
Есть ли лучший способ, чем написать собственное ядро, скопировать матрицу?
1 ответ
Вы можете пересмотреть свою Q. Я думаю, вы находите способ, который может как изменить начальное измерение, так и сделать D2Dcpy.
Есть рутина cudaMemcpy2D()
может сделать это, как показано здесь.