CUBLAS не обматывает BLAS. CUBLAS также получает доступ к матрицам в порядке упорядочения столбцов, например, некоторые коды Fortran и BLAS.
Я больше привык писать код в C, даже для CUDA. Код, написанный с помощью CBLAS (который является оберткой C BLAS), может быть легко изменен на код CUDA. Имейте в виду, что коды Fortran, использующие BLAS, сильно отличаются от кодов C/C++, которые используют CBLAS. Фортран и BLAS обычно хранят матрицы или двойные массивы в порядке сортировки по столбцам, , но C/C++ обычно обрабатывают порядок строк. я нормально справиться с этой проблемой написания сохранения матриц в 1D массивов, и использовать #define, чтобы написать макрос доступа Тоа элемент I, J матрицы как:
/* define macro to access Aij in the row-wise array A[M*N] */
#define indrow(ii,jj,N) (ii-1)*N+jj-1 /* does not depend on rows M */
/* define macro to access Aij in the col-wise array A[M*N] */
#define indcol(ii,jj,M) (jj-1)*M+ii-1
CBLAS библиотека имеет также организовать параметры и условные обозначения (константные переменные перечисления) , чтобы дать каждой функции упорядочение матрицы. Остерегайтесь того, что хранение матриц меняется, матрица с квадратной полосой не сохраняется так же, как и матрица столбцов.
Я не думаю, что есть механика, позволяющая пользователю выбирать между использованием BLAS или CUBLAS, , без написания кода дважды. CUBLAS также имеет на большинстве вызовов функций переменную «handle», которая не отображается в BLAS. Я, однако, #define, чтобы изменить имя при каждом вызове функции, но это может не сработать.