OpenMP 中的并行 while/for - 目录中的文件

Kon*_*rad 2 directory parallel-processing for-loop openmp

我有一段代码可以在某个目录中的文件中搜索模式。重点是如何并行化它。我的第一个版本:

DIR * dptr = opendir(DIRNAME);
struct dirent *dir;
while(dir = readdir(dptr)) != NULL) {
    // searching in dir -> d_name;
}
Run Code Online (Sandbox Code Playgroud)

所以我将 while 转换为 for:

#pragma omp parallel
#pragma omp for
for(;(dir = readdir(dptr)) !=NULL;) {
    // searching
}
Run Code Online (Sandbox Code Playgroud)

但现在我有一个错误:

“预期在‘;’之前进行迭代声明或初始化 token.for(;(dir = readdir(dptr)) !=NULL;) "

您知道如何使用适当的 for 循环组织遍历目录中的每个文件吗?

小智 5

OpenMPparallel for指令在线程之间分割迭代向量。为了做到这一点,它需要所谓的canonical形式的循环。即for(statement; expression; expression),您不能跳过循环的一部分。此外,boundexpression应为以下形式之一:less-expr (<), more-expr (>)及其等价形式:less-equal-expr (<=), more-equal (>=)

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

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