怎么使用openmp实现矩阵相乘
时间: 2024-02-18 08:06:19 浏览: 29
下面是使用OpenMP实现矩阵相乘的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#define N 1000
int main() {
int *A, *B, *C;
A = (int*) malloc(N * N * sizeof(int));
B = (int*) malloc(N * N * sizeof(int));
C = (int*) malloc(N * N * sizeof(int));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
A[i * N + j] = i * N + j;
B[i * N + j] = i * N + j;
C[i * N + j] = 0;
}
}
#pragma omp parallel for
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
C[i * N + j] += A[i * N + k] * B[k * N + j];
}
}
}
// 输出结果的前 5 行和列
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", C[i * N + j]);
}
printf("\n");
}
free(A);
free(B);
free(C);
return 0;
}
```
在这个示例代码中,我们使用了OpenMP的并行for指令,将矩阵相乘的计算部分并行化。在这个指令中,for循环内的指令会被多个线程并行执行,从而提高了计算效率。需要注意的是,在并行化的过程中,需要保证对共享变量的访问是正确的,否则会产生竞争条件。