2016-03-22 7 views
2

あるディレクトリ内のファイルのパターンを検索するコードがあります。ポイントはこれをどのように並列化するかです。私の最初のバージョン:OpenMPの/ forのパラレル化 - ディレクトリのファイル

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

にしながら、だから、私は変換:

#pragma omp parallel 
#pragma omp for 
for(;(dir = readdir(dptr)) !=NULL;) { 
    // searching 
} 

しかし、今、私はエラーを持っている:

「期待反復宣言や初期化をする前に ';'

ディレクトリ内のすべてのファイルを適切なforループで整理する方法を知っていますか?いいえ、ありがとうございます。

+0

コードが使用するI /あなたがそれを並列化してもスピードアップを得ることはできません... –

+0

大きな入力ファイルの場合でも? – Konrad

+0

大きな入力ファイルの場合特にボトルネックはファイルから私の中にデータを移動する可能性がありますデータを処理しません。ファイルが大きいと、カーネルの開閉時間が短くなりますが、すべてのデータを移動する必要があります。 –

答えて

3

OpenMP parallel for命令はスレッド間で反復ベクトルを分割します。これを行うためには、いわゆるcanonicalフォームのループが必要です。私。 for(statement; expression; expression)となり、ループの一部をスキップすることはできません。さらに、束縛expressionは、書式:less-expr (<), more-expr (>)とその等式:less-equal-expr (<=), more-equal (>=)の1つでなければならない。これは非常に可能性があるよう

だから、あなたのコードを修正するために、あなたはforループに

  1. 書き込み初期化子と増分を必要とする
  2. 書き換え拘束式は(それが現在ne-expr (!=)
関連する問題