Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. void matrix_mult_matrix_5(double * a, double * b, double * c, int n) {
  2. int bm, bi, nbm, nbi;
  3. int l, nl;
  4. int i, j, m;
  5. double * pa, * pb, * pc;
  6. double s00, s01, s10, s11;
  7. for (bm = 0; bm < n; bm += N) {
  8. nbm = (bm + N <= n ? bm + N : n);
  9. for (bi = 0; bi < n; bi += N) {
  10. nbi = (bi + N <= n ? bi + N : n); /* Вычислить результирующий блок матрицы cс верхним левым углом (bi, bm)и правым нижним (nbi-1, nbm-1) */ /* Вычисляем как произведения блоков матрицaиb*/
  11. for (m = bm, pc = c + bm; m < nbm; m++, pc++)
  12. for (i = bi; i < nbi; i++) pc[i * n] = 0.;
  13. for (l = 0; l < n; l += N) {
  14. 2.7.Использование параллелизма процессора53nl = (l + N <= n ? l + N : n); /* Вычисляем произведениеблока матрицы a [(bi,l) x (nbi-1,nl-1)]на блок матрицы b [(l,bm)x(nl-1,nbm-1)]и прибавляем к блокуматрицы c [(bi,bm) x (nbi-1,nbm-1)] */
  15. for (m = bm, pc = c + bm; m < nbm; m += 2, pc += 2)
  16. for (i = bi, pb = b + m; i < nbi; i += 2) {
  17. pa = a + l + i * n;
  18. s00 = s01 = s10 = s11 = 0.;
  19. for (j = l; j < nl; j++, pa++) {
  20. /* элемент (i, m) */
  21. s00 += pa[0] * pb[j * n]; /* элемент (i, m + 1) */
  22. s01 += pa[0] * pb[j * n + 1]; /* элемент (i + 1, m) */
  23. s10 += pa[n] * pb[j * n]; /* элемент (i + 1, m + 1) */
  24. s11 += pa[n] * pb[j * n + 1];
  25. }
  26. pc[i * n] += s00;
  27. pc[i * n + 1] += s01;
  28. pc[(i + 1) * n] += s10;
  29. pc[(i + 1) * n + 1] += s11;
  30. }
  31. }
  32. }
  33. }
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement