Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- float **matrizA;
- float **matrizB;
- float **matrizC;
- int la, ca, lb, cb, t;
- void imprime (float *matriz[], int m, int n) {
- for (int i = 0; i < m; ++i) {
- printf("\n");
- for (int j = 0; j < n; ++j) {
- printf("%f ", matriz[i][j]);
- }
- }
- printf("\n\n");
- }
- void imprimePalavra (){
- printf("Teste 1\n");
- }
- void imprimePalavra2 (){
- printf("Teste 2\n");
- }
- void aloca_matriz() {
- int i;
- matrizA = (float **) calloc(la, sizeof(float *));
- matrizB = (float **) calloc(lb, sizeof(float *));
- matrizC = (float **) calloc(la, sizeof(float *));
- for (i = 0; i < la; i++) {
- matrizA[i] = (float *) calloc(ca, sizeof(float));
- matrizC[i] = (float *) calloc(cb, sizeof(float));
- }
- for (i = 0; i < lb; i++) {
- matrizB[i] = (float *) calloc(cb, sizeof(float));
- }
- }
- void preenche_matrizes() {
- int i, j;
- for (i = 0; i < la; i++) {
- for (j = 0; j < ca; j++) {
- matrizA[i][j] = rand() % 10;
- }
- }
- for (i = 0; i < lb; i++) {
- for (j = 0; j < cb; j++) {
- matrizB[i][j] = rand() % 10;
- }
- }
- for (i = 0; i < la; i++) {
- for (j = 0; j < cb; j++) {
- matrizC[i][j] = 0.0;
- }
- }
- }
- void mm() {
- if (ca == lb) {
- #pragma omp parallel for schedule(static)
- for(int i = 0; i < la; i++) {
- for(int j = 0; j < cb; j++) {
- for(int k = 0; k < ca; k++) {
- matrizC[i][j] += matrizA[i][k] * matrizB[k][j];
- }
- }
- }
- }
- else {
- printf("\n\nNão é possível realizar a multiplicação.");
- }
- }
- int main(int argc, char **argv) {
- char ch;
- while ((ch = (char) getopt(argc, argv, "a:b:c:d:")) != -1) {
- switch(ch) {
- case 'a':
- la = atoi(optarg);
- break;
- case 'b':
- ca = atoi(optarg);
- break;
- case 'c':
- lb = atoi(optarg);
- break;
- case 'd':
- cb = atoi(optarg);
- break;
- default:
- abort();
- }
- }
- aloca_matriz();
- preenche_matrizes();
- mm();
- //imprime(matrizA, la, ca);
- //imprime(matrizB, lb, cb);
- //imprime(matrizC, la, cb);
- return 0;
- }
Add Comment
Please, Sign In to add comment