CUBLAS không quấn quanh BLAS. CUBLAS cũng truy cập ma trận theo thứ tự cột lớn, chẳng hạn như một số mã Fortran và BLAS.
Tôi quen với việc viết mã bằng C, ngay cả đối với CUDA. Một mã được viết bằng CBLAS (một gói C của BLAS) có thể dễ dàng được thay đổi thành mã CUDA. Lưu ý rằng các mã Fortran sử dụng BLAS khá khác với các mã C/C++ sử dụng CBLAS. Fortran và BLAS thường lưu trữ ma trận hoặc mảng kép trong thứ tự cột lớn, nhưng C/C++ thường xử lý thứ tự hàng lớn. tôi thường xử lý vấn đề này bằng văn bản tiết kiệm các ma trận trong một mảng 1D, và sử dụng #define để viết một macro truy cập toa các yếu tố i, j của một ma trận như:
/* 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 thư viện có một tổ chức tốt các thông số và các quy ước (biến const enum) để cung cấp cho mỗi chức năng thứ tự của ma trận. Hãy coi chừng rằng việc lưu trữ các ma trận khác nhau, một ma trận dải được xếp hàng khôn ngoan không được lưu trữ giống như ma trận băng thông cột.
Tôi không nghĩ rằng có cơ chế để cho phép người dùng lựa chọn giữa việc sử dụng BLAS hoặc CUBLAS, mà không cần viết mã hai lần. CUBLAS cũng có trên hầu hết các cuộc gọi hàm một biến "xử lý" không xuất hiện trên BLAS. Tôi mặc dù #define để thay đổi tên tại mỗi cuộc gọi chức năng, nhưng điều này có thể không hoạt động.