2016-05-02 6 views
0

このwhileループは応答時間が長いため、スレッドのすべての反復を割り当てることを試みますが、何がわかりませんか?私に プラザの答え:(あなたはstd::vectorfrですべての単語を格納できると仮定すると、このwhileループのすべての反復をスレッドに割り当てる方法はありますか?

string tmp = fr.getNextWord(); 

while (tmp != "") 
{ 

    hf << h->getHash(tmp) << endl;   
    ENFA * enfa = new ENFA(); 
    * enfa = generateNfaFromString("%s%a_l%a%m%"); 
    if (enfa->accepts(h->getHash(tmp), getHashChar)) 
    { 
     of << "true" << endl; 
    } else 
    { 
     of << "false" << endl; 
    } 
    tmp = fr.getNextWord(); 
} 
+3

スレッドの多くを作成する可能性が高いスレッドの作成のコストは同様の機能と比較して非常に高いようなものを遅くしようとしています'getHash()' –

答えて

0
  1. を使用しようとすることができます
  2. スレッドオブジェクトのコンテナをループ外に作成することが望ましい(将来のオブジェクトでラップすることが望ましい)。
  3. ループ内で、関数を呼び出す新しいスレッドを作成します。スレッドオブジェクト(または関連する未来)をコンテナに格納します。
  4. (別売:あなたの頭の傷や応答時間が悪化した理由を疑問に思う)
+0

私は 'async()'を持つようになりました。あなたのためにすべてのスレッドを処理する必要があります。 –

+0

@ LokiAstari私はそれよりも高いレベルのアドバイスをした。スレッド(オブジェクト)が未来の中にラップされているかどうかは関係ありません。答えのステップは同じになります。もちろん、ベアスレッドよりも構造化アプローチが優れています。 – user2079303

+0

accept()関数はNFAパターンマッチングで、応答時間は約10分です!したがって、私は各マッチングをスレッドに割り当てる必要があります!それは正しい? –

0

、あなたは別々にループの内容をリファクタリングopenmp

std::vector<string> v; 
//TODO: loop over `fr` and push_back the words onto `v` 

# pragma omp parallel for 
for (int i = 0; i < v.size(); ++i) { 
    //use `v[i]` instead of `tmp` in your code 
} 
関連する問題