Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <cblas.h>
- #include <time.h>
- void printMatrix
- (int m , int n, double (matrix)[n]) // matrix burda Variable Length Array
- {
- int i = 0;
- int j = 0;
- for(i;i<m;i++){
- j=0;
- for(j;j<n;j++){
- printf("%lf ", matrix[i + m*j]);
- }
- printf("\n");
- }
- }
- int main(int argc, char** argv){
- int m = 2; int n = 2; int p = 2;
- // Matrislerin boyutlari
- double A[m][n], B[n][p], C[m][p]; // C=AxB+C
- printf("Toplam %d double kadar yer aldik\n", m*n+n*p+m*p);
- srand(12345); // Random seed
- double maxr=RAND_MAX; // Max Random
- int i,j;
- for (i = 0; i < m; i++)
- for (j = 0; j < n; j++)
- A[i][j] = rand()/maxr;
- // rand()/maxr 0 ile 1 arasinda sayi dondurur.
- for (i = 0; i < n; i++)
- for (j = 0; j < p; j++)
- B[i][j] = rand()/maxr;
- double alpha = 1.; // Alpha parametresi
- double beta = 0.; // Beta parametresi
- double start;
- start = clock();
- cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,\
- m, p, n, alpha, *A, m, *B, n, beta, *C, m);
- // C = Alpha * A * B + Beta*C
- // Ilk parametre RowMajor-ColMajor farki icin
- // sonra gelen iki parametre Transpoze alinacak mi ona karar veriyor
- // sonraki 3 parametre matris boyutlarini veriyor.
- // mxn x nxp + mxp = mxp
- // Sonra Alpha A, B, Beta, C parametreleri veriliyor.
- // Aralarda dikkat ederseniz baska parametreler de mevcut
- // LDA, LDB ve LDC denen parametreleri
- // A B C matrislerinin Soldaki boyutuna karsilik gelir
- // A[m][n] -> m, B[n][p] -> n gibi
- // */
- double finish = clock();
- printf("C(%d,%d) = A(%d,%d) B(%d,%d) icin gecen sure %f saniye\n",\
- m, p, m, n, n, p, (finish - start)/CLOCKS_PER_SEC);
- printMatrix(m, n, *A);
- printMatrix(n, p, *B);
- printMatrix(m, p, *C);
- return 0;
- }
Add Comment
Please, Sign In to add comment