2017-05-04 17 views
0

並列プログラミングを使用して処理を高速化したいと考えています。並列呼び出しによる並列プログラミング

このクラスでは、メンバー関数mainFunにforループがあります。各反復で、subFunが呼び出されます。 parallel-invokeを使用して同時にCPUパワーを完全に利用するためにsubFunを呼び出す方法

ありがとうございます。次のように

コードは次のとおりです。

#include <vector> 
#include <ppl.h> 

using namespace std; 
using namespace concurrency; 
typedef vector<double> Vector; 
typedef vector<Vector> Matrix; 

class myClass { 
private: 
    int num; 
    Matrix a; 

public: 
    myClass(int n) : 
     num(n), a(num, Vector(2)) {} 

    Vector subFun(int n) { 
     Vector b(2, 0); 

     //body: to be implemented 

     return b; 
    } 

    void mainFun() { 
     for (int i = 0; i < num; i++) { 

      //parallel_invoke([&a[i]] { a[i] = subFun(i); });//<-- how to implement parallel_invoke? 
     } 
    } 


}; 

int main() { 

    myClass A(1000); 

    return 0; 
} 

答えて

0

あなたはマルチスレッドと考えていますか?別のスレッドで各関数呼び出しを呼び出すことができます。

+0

CPUの50%未満が使用されます。その結果、parallel_invokeを使用してより高速にしたいと考えています。 – Frankie

+0

スレッド数がコア数と等しいスレッドプールがある場合は、 – dm03514

+0

Iのようにコードを変更: parallel_invoke( \t \t \t \t \t \t \t [b] {[I] = subFun(I);} [I {\t \t \t \t \t \t \t、[b] + NUM/4] = subFun(NUM/4 + I);}、 \t \t \t \t \t \t \t [b] {[I + 2 * NUM/4] = subFun(NUM/4 + I);} 、 \t(i + 3 * num/4)= subFun(num/4 + i); } \t \t \t \t \t \t); forループを使用してコードをコンパクトにする方法はありますか? – Frankie

関連する問題