2013-11-02 5 views
2

У меня есть приложение, которое выделяет матрицу и вектор на устройстве с помощью cudaMalloc/cudaMemcpy. Матрица определяется столбцом-майором. Я хотел бы использовать функцию из библиотеки cublas (cublasSgemv), чтобы умножить их вместе. По-видимому, мне придется выделять дубликаты матрицы и вектора, используя cudaMalloc, и инициализировать их с хоста cublasSetMatrix/cublasSetVector, чтобы использовать функцию cublas API. Очевидно, что дублирование всей этой памяти будет дорогостоящим.Использование cudaMemCpy вместо cublasSetMatrix и cublasSetVector

Насколько я понимаю, функции cublasSetMatrix/cublasSetVector - это просто светлые обертки cudaMemCpy. Мне было интересно, можно ли передать указатели на массивы, инициализированные cudaMemCpy, в функцию cublas API? Или, иначе можно легко обернуть массивы таким образом, чтобы API распознал, чтобы я мог избежать дублирования памяти?

+0

Слишком дорого обрабатывать матрицы как простые массивы для ваших целей? –

ответ

3

Да, вы можете использовать cudaMemcpy вместо cublasGet/SetMatrix. CUBLAS также будет работать с этим.

+0

Еще раз спасибо –

+1

Функции cublasSetMatrix() и cublasSetVector() - это легкие обертки, которые автоматически используют либо копию 1D (для полной матрицы, либо вектор блока), либо 2D-копию (для подматрицы или не- -дюймовый вектор). – njuffa