gpt4 book ai didi

c++ - 在使用 OpenMP 进行 gcc -O3 优化后,for 循环不会加速

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:33 28 4
gpt4 key购买 nike

<分区>

我写了一个简单的 for 循环,它将一个常量分配给一个数组。

#include <iostream>
#include <vector>
#include <cstdlib>

#include "omp.h"

using namespace std;
int nr_threads = 1;
long J = 10000000;
long K = 40;

int main(int argc, char* argv[])
{
nr_threads = atoi(argv[1]);
vector<double> H_U_d(J*K, 1);

double start_time = omp_get_wtime();
#pragma omp parallel for num_threads(nr_threads) schedule(static)
for(long j = 0; j < J*K; j++)
{
H_U_d[j] = 1;
}
cout << omp_get_wtime()-start_time << endl;
return 0;
}

我使用 gcc 编译它,g++ main.cpp -o test_speedup -fopenmp 并在 12 核机器上测试它。我的系统是 Ubuntu 14.04.3,cpu 是 Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz 和 128GB RAM。如果不进行优化,我们会得到这样的结果:

➜ ~ ./test_speedup 1

2.95739

➜ ~ ./test_speedup 8

0.483756

加速约为 6。

但是,如果我使用 -O3 对其进行优化,g++ main.cpp -o test_speedup -fopenmp -O3

结果是

➜ ~ ./test_speedup 1

0.379158

➜ ~ ./test_speedup 8

0.265842

加速很差。

gcc 是如何优化循环的?有什么解决办法可以避免这种情况吗?

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