我有两个不同的函数来用随机数填充全局数组:串行版本和使用 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 ; });
}
该程序正在运行英特尔至强集群,但不幸的是并行版本要慢得多。如果不是用随机数填充数组,我只需做一个data[i] *= 2
高达 50% 的速度就可以测量。这与随机函数有关吗?有没有办法避免这种情况?