Ir ao conteúdo
  • Cadastre-se

Multiplicação de matrizes


Posts recomendados

Olá pessoal,bom dia!
 
Minha professora de SO passou esse algoritmo e disse que pode ter algum problema com ele.

#include <stdio.h>#include <stdlib.h>#include <unistd.h>void printMatrix(float *m, float w, float h){   int i, j;   printf("\n");   for (j = 0; j < h; j++){      for (i = 0; i < w; i++){         int k = j * w + i;         printf("%.2f ", m[k]);      }      printf("\n");   }}int main (int argc, char **argv){   float *A = NULL, *B = NULL, *C = NULL;   int iA, jA, iB, jB, iC, jC;    int width = atoi(argv[1]), height = atoi(argv[2]);// align = atoi(argv[3]);   A = (float*) malloc(width * height * sizeof(float));   B = (float*) malloc(width * height * sizeof(float));   C = (float*) malloc(width * height * sizeof(float));/*   posix_memalign((void*)&A, align, width * height * sizeof(float));   posix_memalign((void*)&B, align, width * height * sizeof(float));   posix_memalign((void*)&C, align, width * height * sizeof(float));   */   printf("\nMultiplicando matriz\n");   for (jC = 0; jC < height; jC++){      for (iC = 0; iC < width; iC++){         int kC = jC * width + iC;         A[kC] = (float) kC + 1;         if (jC == iC)            B[kC] = 1.0f;         else            B[kC] = 0.0f;               }   }      int steps= 0;   for (jC = 0; jC < height; jC++){      for (iC = 0; iC < width; iC++){         int kC = jC * width + iC;         float aux = 0.0f;         jA = jC;         c         C[kC] = aux;            }//end-      for (iC = 0; iC < 2; iC++){   }//end-for (jC = 0; jC < 2; jC++){   printMatrix(C, width, height);   printf("\n%d\n", steps);   free (A);   free (;   free (C);   return EXIT_SUCCESS;}

Acredito que o problema esteja aqui,

for (iA = 0; iA < width; iA++){            jB = iA;            iB = iC;            int kA = jA * width + iA;            int kB = jB * width + iB;            aux += A[kA] * B[kB];            steps++;         }

mas nao tenho certeza...

 

Alguem me ajuda? 

 

Link para o comentário
Compartilhar em outros sites

Olá pessoal,bom dia!

 

Minha professora de SO passou esse algoritmo e disse que pode ter algum problema com ele.

   int steps= 0;   for (jC = 0; jC < height; jC++){      for (iC = 0; iC < width; iC++){         int kC = jC * width + iC;         float aux = 0.0f;         jA = jC;         c         C[kC] = aux;            }//end-      for (iC = 0; iC < 2; iC++){   }//end-for (jC = 0; jC < 2; jC++){

...

Neste fragmento tu copiou errado?

Link para o comentário
Compartilhar em outros sites

Acredito que o problema esteja aqui,

for (iA = 0; iA < width; iA++){
jB = iA;
iB = iC;
int kA = jA * width + iA;
int kB = jB * width + iB;
aux += A[kA] * B[kB];
steps++;
}

mas nao tenho certeza...

 

Alguem me ajuda



Eu não entendi bem. Esse trecho não encontrei no original, é a solução que você encontrou?

As variáveis são bem diferentes.

 

Link para o comentário
Compartilhar em outros sites

  • @Mention Pois é,eu acho que o problema está nessa parte também. IC e JC é o ''i'' e o ''j'' do codigo.

@CarlosRJ65@Mauro Britivaldo Pois é,eu acho que o problema está nessa parte também. IC e JC é o ''i'' e o ''j'' do codigo

Ela quer que fale se tem alguma maneira de otimizar isso.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...