在 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 (>=).

因此,要修复您的代码,您需要

  1. for循环
  2. 中编写初始化程序和递增
  3. 重写绑定表达式(目前使用ne-expr (!=)