gpt4 book ai didi

c - OpenMP - 初始化一维数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:18 25 4
gpt4 key购买 nike

我正在尝试在 C 中使用 OpenMP 初始化动态数组,但它似乎比串行方法慢。我使用的功能是

int* createArray(int size, int num) {
int i;
int* M = (int*)malloc(size*sizeof(int));

srand(time(NULL));
double start = omp_get_wtime();

#pragma omp parallel for num_threads(num)
for (i = 0; i < size; i++) {
M[i] = rand() % (MAX_NUMBER - MIN_NUMBER + 1) + MIN_NUMBER;
}

double end = omp_get_wtime();
printf("Create Array %f\n",end-start);
return M;
}

我得到一个包含随机数的给定大小的数组,但我使用的线程越少,函数运行得越快。难道我做错了什么?

最佳答案

一般来说,并行应用程序运行速度比相应的顺序实现慢通常是因为启动线程的开销或线程不是完全独立的瓶颈(例如通过共享数据) .

在这里,前者为真,因为您正在调用 rand()。此函数以某种方式使用必须在线程之间共享的全局变量。克服这个问题的一种方法是为每个线程使用一个 private 种子。此外,您是否注意到,当您有多个线程时,您的数组并不是真正随机的?您可以将提供给 srand() 的种子作为 omp_get_thread_num() 的函数来解决这个问题。

关于c - OpenMP - 初始化一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357044/

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