Guest User

Untitled

a guest
May 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. float **matrizA;
  6. float **matrizB;
  7. float **matrizC;
  8.  
  9. int la, ca, lb, cb, t;
  10.  
  11. void imprime (float *matriz[], int m, int n) {
  12. for (int i = 0; i < m; ++i) {
  13. printf("\n");
  14. for (int j = 0; j < n; ++j) {
  15. printf("%f ", matriz[i][j]);
  16. }
  17. }
  18.  
  19. printf("\n\n");
  20. }
  21.  
  22. void imprimePalavra (){
  23. printf("Teste 1\n");
  24. }
  25.  
  26. void imprimePalavra2 (){
  27. printf("Teste 2\n");
  28. }
  29.  
  30.  
  31.  
  32. void aloca_matriz() {
  33. int i;
  34.  
  35. matrizA = (float **) calloc(la, sizeof(float *));
  36. matrizB = (float **) calloc(lb, sizeof(float *));
  37. matrizC = (float **) calloc(la, sizeof(float *));
  38.  
  39. for (i = 0; i < la; i++) {
  40. matrizA[i] = (float *) calloc(ca, sizeof(float));
  41. matrizC[i] = (float *) calloc(cb, sizeof(float));
  42. }
  43.  
  44. for (i = 0; i < lb; i++) {
  45. matrizB[i] = (float *) calloc(cb, sizeof(float));
  46. }
  47. }
  48.  
  49. void preenche_matrizes() {
  50. int i, j;
  51.  
  52. for (i = 0; i < la; i++) {
  53. for (j = 0; j < ca; j++) {
  54. matrizA[i][j] = rand() % 10;
  55. }
  56. }
  57.  
  58. for (i = 0; i < lb; i++) {
  59. for (j = 0; j < cb; j++) {
  60. matrizB[i][j] = rand() % 10;
  61. }
  62. }
  63.  
  64. for (i = 0; i < la; i++) {
  65. for (j = 0; j < cb; j++) {
  66. matrizC[i][j] = 0.0;
  67. }
  68. }
  69. }
  70.  
  71. void mm() {
  72.  
  73. if (ca == lb) {
  74. #pragma omp parallel for schedule(static)
  75. for(int i = 0; i < la; i++) {
  76. for(int j = 0; j < cb; j++) {
  77. for(int k = 0; k < ca; k++) {
  78. matrizC[i][j] += matrizA[i][k] * matrizB[k][j];
  79. }
  80. }
  81. }
  82. }
  83. else {
  84. printf("\n\nNão é possível realizar a multiplicação.");
  85. }
  86. }
  87.  
  88. int main(int argc, char **argv) {
  89. char ch;
  90.  
  91. while ((ch = (char) getopt(argc, argv, "a:b:c:d:")) != -1) {
  92.  
  93. switch(ch) {
  94. case 'a':
  95. la = atoi(optarg);
  96. break;
  97. case 'b':
  98. ca = atoi(optarg);
  99. break;
  100. case 'c':
  101. lb = atoi(optarg);
  102. break;
  103. case 'd':
  104. cb = atoi(optarg);
  105. break;
  106. default:
  107. abort();
  108. }
  109. }
  110.  
  111. aloca_matriz();
  112. preenche_matrizes();
  113. mm();
  114.  
  115.  
  116.  
  117. //imprime(matrizA, la, ca);
  118. //imprime(matrizB, lb, cb);
  119. //imprime(matrizC, la, cb);
  120.  
  121. return 0;
  122. }
Add Comment
Please, Sign In to add comment