#ifndef _matmul_n_ #define _matmul_n_ #include "./utils/matrix.h" namespace numerics{ template utils::Matrix matmul(const utils::Matrix& A, const utils::Matrix& B){ if(A.cols() != B.rows()){ throw std::runtime_error("matmul: dimension mismatch"); } const uint64_t m = A.rows(); const uint64_t n = A.cols(); // also B.rows() const uint64_t p = B.cols(); T tmp; utils::Matrix C(m, n, T{0}); //#pragma omp parallel for collapse(2) schedule(static) #pragma omp parallel for for (uint64_t i = 0; i < m; ++i){ for (uint64_t j = 0; j < n; ++j){ tmp = A(i,j); for (uint64_t k = 0; k < p; ++k){ C(i,k) += tmp * B(j,k); } } } return C; } } // namespace numerics #endif // _matmul_n_