gpt4 book ai didi

c++ - 使用 Intel TBB 用随机数填充数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:36 24 4
gpt4 key购买 nike

我有两个不同的函数来用随机数填充全局数组:一个串行版本和一个使用 lamba 表达式和 TBB 的并行版本。

void get_data(void)
{
int j = 0;
srand((unsigned) time(NULL));
cout << "Generating random numbers ...\n";

for (j = 0; j < DATASIZE; j++)
data[j] = (rand() % range) + range_min ;

}

void parallel_get_data(void)
{
int j = 0;
srand((unsigned) time(NULL));
parallel_for(0, DATASIZE, 1, [=](int i)
{ data[i] = (rand() % range) + range_min ; });

}

该程序正在运行 Intel Xeon 集群,但不幸的是并行版本要慢得多。如果我不使用随机数填充数组,而是简单地执行 data[i] *= 2,则可以测量到高达 50% 的速度。这与随机函数有关吗?有没有办法避免这种情况?

最佳答案

是的,您是在调用函数而不是执行乘法指令。每次调用函数时,它都必须设置调用框架、跳转到函数、计算随机数并从函数返回。添加堆栈操作、堆栈检查等,它会变慢。避免它的唯一方法是提供您自己的 random 实现,并希望它可以被编译器内联。

关于c++ - 使用 Intel TBB 用随机数填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289110/

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