在 OpenMP 中并行化 while/for - 目录中的文件
Parallelize while/for in OpenMP - files in directory
我有一段代码可以在某个目录的文件中搜索模式。关键是如何并行化它。我的第一个版本:
DIR * dptr = opendir(DIRNAME);
struct dirent *dir;
while(dir = readdir(dptr)) != NULL) {
// searching in dir -> d_name;
}
所以我将 while 转换为 for:
#pragma omp parallel
#pragma omp for
for(;(dir = readdir(dptr)) !=NULL;) {
// searching
}
但是现在我有一个错误:
"Expected iteration declaration or initialization before ';' token. for(;(dir = readdir(dptr)) !=NULL;) "
您知道如何组织使用适当的 for 循环遍历目录中的每个文件吗?
OpenMP parallel for
指令在线程之间拆分迭代向量。为了做到这一点,它采用所谓的 canonical
形式的循环。 IE。 for(statement; expression; expression)
并且您不能跳过循环的一部分。此外,绑定 expression
应为以下形式之一:less-expr (<), more-expr (>)
及其相等形式:less-equal-expr (<=), more-equal (>=)
.
因此,要修复您的代码,您需要
- 在
for
循环 中编写初始化程序和递增
- 重写绑定表达式(目前使用
ne-expr (!=)
我有一段代码可以在某个目录的文件中搜索模式。关键是如何并行化它。我的第一个版本:
DIR * dptr = opendir(DIRNAME);
struct dirent *dir;
while(dir = readdir(dptr)) != NULL) {
// searching in dir -> d_name;
}
所以我将 while 转换为 for:
#pragma omp parallel
#pragma omp for
for(;(dir = readdir(dptr)) !=NULL;) {
// searching
}
但是现在我有一个错误:
"Expected iteration declaration or initialization before ';' token. for(;(dir = readdir(dptr)) !=NULL;) "
您知道如何组织使用适当的 for 循环遍历目录中的每个文件吗?
OpenMP parallel for
指令在线程之间拆分迭代向量。为了做到这一点,它采用所谓的 canonical
形式的循环。 IE。 for(statement; expression; expression)
并且您不能跳过循环的一部分。此外,绑定 expression
应为以下形式之一:less-expr (<), more-expr (>)
及其相等形式:less-equal-expr (<=), more-equal (>=)
.
因此,要修复您的代码,您需要
- 在
for
循环 中编写初始化程序和递增
- 重写绑定表达式(目前使用
ne-expr (!=)