由于我无法使用 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] );
}
}
据我了解您的问题,初始化部分应该在不需要
single
指令的情况下处理,前提是 results
的实际类型支持赋值为 0。此外,您的初始代码缺少 private( i )
声明。最后,应该不需要 barrier
。关于c - OMP 2.0 嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38892404/