CUBLAS no se ajusta a BLAS. CUBLAS también accede a las matrices en una ordenación de columna principal, como algunos códigos Fortran y BLAS.
Estoy más acostumbrado a escribir código en C, incluso para CUDA. Un código escrito con CBLAS (que es una envoltura C de BLAS) se puede cambiar fácilmente en un código CUDA. Tenga en cuenta que los códigos Fortran que usan BLAS son bastante diferentes de los códigos C/C++ que usan CBLAS. Fortran y BLAS normalmente almacenan matrices o arreglos dobles en ordenamiento de columna principal, pero C/C++ normalmente maneja el orden de Fila mayor. normalmente manejar este problema escribiendo ahorro de las matrices en un arrays 1D, y el uso de #define para escribir un acceso toa macro el elemento i, j de una matriz como:
/* 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
biblioteca CBLAS tiene una bien organizar parámetros y convenciones (variables de contexto) para dar a cada función el orden de la matriz. Tenga en cuenta que también el almacenamiento de matrices varía, una matriz con bandas filantes no se almacena igual que una matriz de bandas en columnas.
No creo que haya mecanismos que permitan al usuario elegir entre usar BLAS o CUBLAS, sin escribir el código dos veces. CUBLAS también tiene en la mayoría de las llamadas de función una variable "manejar" que no aparece en BLAS. Pensé en #define para cambiar el nombre en cada llamada de función, pero podría no funcionar.