由于我无法使用 omp 任务(使用 visual studio 2015),我正在尝试为嵌套循环任务找到解决方法。代码如下:
#pragma omp parallel
{
for (i = 0; i < largeNum; i++)
{
#pragma omp single
{
//Some code to be run by a single thread
memset(results, 0, num * sizeof(results[0]));
}
#pragma omp for
for (n = 0; n < num; n++) {
//Call to my function
largeFunc(params[n], &resulsts[n])
}
}
#pragma omp barrier
}
我希望我的所有线程执行 largeNum 次,但等待 memset 设置为零,然后我希望每个线程执行 largeFunc。我没有发现任何数据依赖性。
此时,我已经了解了 omp 指令在我脑海中的所有内容。这个解决方案有效吗?没有任务有更好的方法吗?
谢谢!
最佳答案
仅这段代码呢?
#pragma omp parallel private( i, n )
for ( i = 0; i < largeNum; i++ ) {
#pragma omp for
for ( n = 0; n < num; n++ ) {
results[n] = 0;
largeFunc( param[n], &results[n] );
}
}
据我了解您的问题,如果 results
的实际类型支持分配,则无需 single
指令即可处理初始化部分到 0。此外,您的初始代码缺少 private( i )
声明。最后,应该不需要 barrier
。
关于c - OMP 2.0 嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892404/