Guest User

Untitled

a guest
May 26th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <cblas.h>
  4. #include <time.h>
  5.  
  6. void printMatrix
  7. (int m , int n, double (matrix)[n]) // matrix burda Variable Length Array
  8. {
  9. int i = 0;
  10. int j = 0;
  11. for(i;i<m;i++){
  12. j=0;
  13. for(j;j<n;j++){
  14. printf("%lf ", matrix[i + m*j]);
  15. }
  16. printf("\n");
  17. }
  18. }
  19.  
  20. int main(int argc, char** argv){
  21. int m = 2; int n = 2; int p = 2;
  22. // Matrislerin boyutlari
  23. double A[m][n], B[n][p], C[m][p]; // C=AxB+C
  24.  
  25. printf("Toplam %d double kadar yer aldik\n", m*n+n*p+m*p);
  26. srand(12345); // Random seed
  27. double maxr=RAND_MAX; // Max Random
  28. int i,j;
  29. for (i = 0; i < m; i++)
  30. for (j = 0; j < n; j++)
  31. A[i][j] = rand()/maxr;
  32. // rand()/maxr 0 ile 1 arasinda sayi dondurur.
  33. for (i = 0; i < n; i++)
  34. for (j = 0; j < p; j++)
  35. B[i][j] = rand()/maxr;
  36.  
  37. double alpha = 1.; // Alpha parametresi
  38. double beta = 0.; // Beta parametresi
  39. double start;
  40. start = clock();
  41. cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,\
  42. m, p, n, alpha, *A, m, *B, n, beta, *C, m);
  43. // C = Alpha * A * B + Beta*C
  44. // Ilk parametre RowMajor-ColMajor farki icin
  45. // sonra gelen iki parametre Transpoze alinacak mi ona karar veriyor
  46. // sonraki 3 parametre matris boyutlarini veriyor.
  47. // mxn x nxp + mxp = mxp
  48. // Sonra Alpha A, B, Beta, C parametreleri veriliyor.
  49. // Aralarda dikkat ederseniz baska parametreler de mevcut
  50. // LDA, LDB ve LDC denen parametreleri
  51. // A B C matrislerinin Soldaki boyutuna karsilik gelir
  52. // A[m][n] -> m, B[n][p] -> n gibi
  53. // */
  54. double finish = clock();
  55. printf("C(%d,%d) = A(%d,%d) B(%d,%d) icin gecen sure %f saniye\n",\
  56. m, p, m, n, n, p, (finish - start)/CLOCKS_PER_SEC);
  57. printMatrix(m, n, *A);
  58. printMatrix(n, p, *B);
  59. printMatrix(m, p, *C);
  60.  
  61. return 0;
  62. }
Add Comment
Please, Sign In to add comment