CUBLAS umschließt BLAS nicht. CUBLAS greift auch auf Matrizen in einer übergeordneten Reihenfolge zu, z. B. einige Fortran-Codes und BLAS.
Ich bin mehr daran gewöhnt, Code in C zu schreiben, auch für CUDA. Ein mit CBLAS geschriebener Code (ein C-Wrapper von BLAS) kann leicht in einen CUDA-Code umgewandelt werden. Beachten Sie, dass Fortran-Codes, die BLAS verwenden, sich stark von C/C++ - Codes unterscheiden, die CBLAS verwenden. Fortran und BLAS speichern normalerweise Matrizen oder Doppelarrays in der Reihenfolge der Spaltenmajorität, , aber C/C++ behandelt normalerweise die Reihenfolge der Zeilen. ich Griff normalerweise dieses Problem zu schreiben, die Matrizen in einem 1D-Arrays zu speichern, und verwenden #define ein Makro Toa Zugang das Element i, j einer Matrix als schreiben:
/* 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 Bibliothek hat eine gut Parameter organisieren und Konventionen (const enum Variablen) , um jeder Funktion die Reihenfolge der Matrix zu geben. Beachten Sie, dass auch die Speicherung von Matrizen variiert, eine zeilenweise gebänderte Matrix wird nicht wie eine spaltenweise Bandmatrix gespeichert.
Ich glaube nicht, dass es Mechanismen gibt, die dem Benutzer erlauben, zwischen der Verwendung von BLAS oder CUBLAS zu wählen, ohne den Code zweimal zu schreiben. CUBLAS hat auch in den meisten Funktionsaufrufen eine "handle" Variable, die nicht auf BLAS erscheint. ich von #define, um den Namen bei jedem Funktionsaufruf zu ändern, aber dies funktioniert möglicherweise nicht.