matmul.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include <stdio.h>
  2. #include "ImC/imc_extension.h"
  3. #define MAT_SIZE 10
  4. int A[MAT_SIZE][MAT_SIZE] = {
  5. [0 ... MAT_SIZE - 1] = {[0 ... MAT_SIZE - 1] = 2}};
  6. int B[MAT_SIZE][MAT_SIZE] = {
  7. [0 ... MAT_SIZE - 1] = {[0 ... MAT_SIZE - 1] = 2}};
  8. void vMatMul() {
  9. // int IMC_REPEAT = 2000;
  10. int IMC_REPEAT = imcBENCH_REPEAT_COUNT;
  11. int C[MAT_SIZE * MAT_SIZE] = { 0 };
  12. for(int imc=0; imc<IMC_REPEAT; imc++) {
  13. IMC_UNROLL(3)
  14. for (int _i = 0; _i < MAT_SIZE * MAT_SIZE; _i++)
  15. {
  16. int sum = 0;
  17. int i = _i / MAT_SIZE;
  18. int j = _i % MAT_SIZE;
  19. IMC_UNROLL(MAT_SIZE)
  20. for(int k=0; k<MAT_SIZE; k++) {
  21. sum += A[i][k] * B[k][j];
  22. }
  23. C[_i] = sum;
  24. }
  25. }
  26. int sum = 0;
  27. for (int _i = 0; _i < MAT_SIZE * MAT_SIZE; _i++)
  28. {
  29. if(_i % MAT_SIZE == 0) {
  30. printf("\r\n");
  31. }
  32. printf("%d ", C[_i]);
  33. sum += C[_i];
  34. }
  35. printf("\r\n");
  36. printf("(OUT) sum: %d\r\n", sum);
  37. }