计算大规模矩阵相乘代码
时间: 2023-12-20 17:53:16 浏览: 136
Java多线程矩阵相乘的代码
这里提供一个基于C++和OpenMP的矩阵相乘代码示例,可以利用多线程并行计算,加快计算速度。假设有两个矩阵A和B,其中A的大小为m x k,B的大小为k x n,那么它们的乘积C的大小为m x n。
```c++
#include <iostream>
#include <omp.h>
using namespace std;
void matrix_multiply(double* A, double* B, double* C, int m, int k, int n) {
#pragma omp parallel for
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
double sum = 0.0;
for (int p = 0; p < k; p++) {
sum += A[i * k + p] * B[p * n + j];
}
C[i * n + j] = sum;
}
}
}
int main() {
int m = 1000;
int k = 500;
int n = 800;
double* A = new double[m * k];
double* B = new double[k * n];
double* C = new double[m * n];
// 初始化矩阵A和B
for (int i = 0; i < m * k; i++) {
A[i] = i * 0.1;
}
for (int i = 0; i < k * n; i++) {
B[i] = i * 0.2;
}
double start_time = omp_get_wtime(); // 开始计时
matrix_multiply(A, B, C, m, k, n);
double end_time = omp_get_wtime(); // 结束计时
cout << "Time: " << end_time - start_time << " seconds." << endl;
delete[] A;
delete[] B;
delete[] C;
return 0;
}
```
这个示例代码中,我们首先利用OpenMP的pragma指令并行化了最外层的循环,即对矩阵C中的每一行进行计算。然后,在每个线程中,我们进行了标准的矩阵乘法计算,即对矩阵A的每一行和矩阵B的每一列进行点积计算。最后,将计算结果累加到矩阵C中。
请注意,这只是一个示例代码,实际使用时需要根据具体的需求进行修改和优化。例如,可以使用更高效的算法,如Strassen算法或Coppersmith-Winograd算法来计算大规模矩阵乘法。
阅读全文