gpt4 book ai didi

c - pragma omp for 没有性能

转载 作者:行者123 更新时间:2023-11-30 17:19:34 26 4
gpt4 key购买 nike

我开始学习 OpenMP,用于并行计算,并测试以下代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
int i,j,k,a = -59, b = 19,N,R;
struct timeval T1, T2;
long delta_ms;

N = atoi(argv[1]);
float m1[N][N], m2[N][N], m3[N][N];

gettimeofday(&T1, NULL);


#pragma omp parallel for default(none) private(R,i,j,k) shared(N,b,a,m1, m2, m3)
for (R=0; R<100; R++)
{
srand(R);

#pragma omp parallel for default(none) private(i,j) shared(N,b,a,m1)
for (i = 0; i < N; i++){
for (j = 0; j < N; j++){
m1[i][j] = (float) rand() / RAND_MAX * (b - a + 1) + a;
}
}

#pragma omp parallel for default(none) private(i,j) shared(N,m1,m2)
for (i = 0; i < N; i++){
for (j = 0; j < N; j++){
m2[i][j] = m1[i][j] * 5;
}
}

#pragma omp parallel for default(none) private(i,j,k) shared(N,m1,m2,m3)
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
m3[i][j] = 0;
for(k = 0; k < N; k++){
m3[i][j] = m3[i][j] + (m1[i][k] * m2[k][j]);
}
}
}


}
gettimeofday(&T2, NULL);
delta_ms = 1000*(T2.tv_sec - T1.tv_sec) + (T2.tv_usec - T1.tv_usec)/1000;
printf("\nN=%d. Milliseconds passed: %ld\n", N, delta_ms);
return 0;
}

我的电脑的特点:

我使用虚拟机(Virtual Box)。我安装的是Ubuntu 14.04。我的虚拟机使用 3 个 CPU 和 1 Gb RAM。我使用 gcc 编译器,版本 4.8

现在我对以下情况产生了很大的兴趣:

  1. 我编译代码时没有 -fopenmp key :gcc -o code1 code1.c .

当我运行代码1时,我看到:

N=300. Milliseconds passed: 13706
  • 我使用 key -fopenmp 编译我的代码:gcc -o code1 code1.c -fopenmp .
  • 当我运行代码1时,我看到:

    N=300. Milliseconds passed: 4898
  • 我使用 key -fopenmp 编译我的代码我只使用一个#pragma omp for :
  • #pragma omp parallel for default(none) private(R,i,j,k) shared(N,b,a,m1, m2, m3)
    for (R=0; R<100; R++)
    {...}

    当我运行代码1时,我看到:

    N=300. Milliseconds passed: 4919

    第 2 步和第 3 步的结果相等。

    有人可以向我解释一下为什么会发生这种情况吗?

    我阅读了 OpenMP 的文档,但没有找到答案。

    最佳答案

    检查OMP_NUM_THREADS环境变量。我在使用 VirtualBox 时遇到过这个问题,问题是这个变量被设置为 1。它应该等于 CPU 核心的数量(如果使用超线程,则为 x2)。

    关于c - pragma omp for 没有性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871843/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com