gpt4 book ai didi

c++ - 为什么所有内核上的 sin(Vector) 可以和一个内核上的 sin(V) 一样快?

转载 作者:行者123 更新时间:2023-11-27 22:50:24 28 4
gpt4 key购买 nike

我有一个简单的 C++ 代码,它在一个值 vector 上运行一个默认的 sin 函数。

static void BM_sin() {
int data_size = 100000000;
double lower_bound = 0;
double upper_bound = 1;
random_device device;
mt19937 engine(device());
uniform_real_distribution<double> distribution(lower_bound, upper_bound);
auto generator = bind(distribution, engine);
vector<double> data(data_size);
generate(begin(data), end(data), generator);
#pragma omp parallel for
for(int i = 0; i < data_size; ++i) {
data[i] = sin(data[i]);
}
cout << accumulate(data.begin(), data.end(), 0) << endl;
}

当我将 export OMP_NUM_THREADS 设置为 1 和具有 8 个内核的 8 时,我得到了相同的时间。注释行 #pragma omp parallel for out 也无济于事。所以我想知道为什么从所有线程应用于 vector 的正弦曲线与从一个线程应用于 vector 一样快?

(我在 gcc-4.8 上用 -Ofast -fopenmp 编译)

最佳答案

简单的回答很简单:

  • 并非所有事情都能很好地扩展。我不知道 fast_sin,但可能主要是内存带宽受限。在那种情况下,将工作负载分配给多个核心将一事无成。
  • 另外,我怀疑你的测量方法。如果您的生成器是 mt19337,它比您的正弦波复杂得多,因此并行化您的正弦波并没有太大作用,因为大部分时间都花在了生成随机数上。

关于c++ - 为什么所有内核上的 sin(Vector) 可以和一个内核上的 sin(V) 一样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37646639/

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