OpenMP如何遍历二维向量
How to traverse two-dimensional vector by OpenMP
我是 OpenMP 新手,遇到无法修复的错误。
假设我有一个二维向量:
vector<vector<int>> a{{...}, {...}, ...};
我想遍历为
#pragma omp parallel for collapse(2)
for (int i = 0; i < a.size(); i++){
for (int j = 0; j < a[i].size(); j++){
work(a[i][j]);
}
}
但是出现错误:条件表达式引用了迭代变量‘i’。
那么如何正确遍历二维向量呢?
问题在于第二个循环的结束条件取决于第一个循环的索引变量 (a[i].size()
)。只有 OpenMP 5.0(或更高版本)支持所谓的非矩形折叠循环,因此如果您使用更早的 OpenMP 版本,则不能在此处使用 collapse(2)
子句。只需删除 collapse(2)
子句即可。
请注意,如果 a[i].size()
对所有 i
都相同,那么您可以轻松删除此依赖项。
我是 OpenMP 新手,遇到无法修复的错误。
假设我有一个二维向量:
vector<vector<int>> a{{...}, {...}, ...};
我想遍历为
#pragma omp parallel for collapse(2)
for (int i = 0; i < a.size(); i++){
for (int j = 0; j < a[i].size(); j++){
work(a[i][j]);
}
}
但是出现错误:条件表达式引用了迭代变量‘i’。
那么如何正确遍历二维向量呢?
问题在于第二个循环的结束条件取决于第一个循环的索引变量 (a[i].size()
)。只有 OpenMP 5.0(或更高版本)支持所谓的非矩形折叠循环,因此如果您使用更早的 OpenMP 版本,则不能在此处使用 collapse(2)
子句。只需删除 collapse(2)
子句即可。
请注意,如果 a[i].size()
对所有 i
都相同,那么您可以轻松删除此依赖项。