嵌套循环中的 OpenMP 数组索引
OpenMP array indexing in nested loop
我在尝试使用 OpenMP 并行化嵌套循环时遇到问题 - 这只是用于玩和习惯的演示代码。
int* myresults = new int[1000]
#pragma omp parallel
{
#pragma omp for
for(int z=0; z<=mainCount;z++)
{
results[n++] = myfunc(z,0); //compute something
for(int i=0;i<=secondCount;i+=5)
{
results[n++]=myfunc(z,i);
}
}
}
我的问题是结果数组的索引。我假设由于 OpenMP 正在并行化第一个 for 循环,他使用results[]
位置两次或更多,因为results[n++]
会产生未定义的行为(因为不能保证 n 正确递增),我说得对吗?
如何正确索引和存储结果?
n
递增一次myfunc(z,0)
,1 + secondCount/5
倍递增myfunc(z,i)
。这意味着应在外部循环的每次迭代开始时z * (2 + secondCount/5)
n
。你应该像这样重写你的代码:
#pragma omp parallel for private(n)
for (int z = 0; z <= mainCount; z++)
{
n = z * (2 + secondCount/5);
results[n++] = myfunc(z, 0);
for (int i = 0; i <= secondCount; i += 5)
results[n++] = myfunc(z, i);
}
相关文章:
- 数组索引的值没有增加
- 并行用于C++17中数组索引范围内的循环
- 数组索引重载错误
- 通过指针与数组引用扩展数组索引序列
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 缓冲区溢出 - 数组索引越界(严重)
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 查找下一个具有真值C++的数组索引
- 在编译时自动生成用于稀疏数组索引的switch语句
- 在数组索引上引发异常
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 平衡数组索引,同时从左和右对数组求和
- 为什么C ,Devstudio,数组索引工作
- 如何对同一数组索引下的结构成员进行排序?
- 我想返回数组索引,而不是数组值
- C++相当于 Python 的:用于数组索引
- 分段错误:为什么这里的数组索引越界了
- 数组索引在地图上不是整数
- 根据用户输入的每个字母添加到数组索引
- C 数组索引