2017-05-04 141 views
0

我想使用並行編程來加速進程。並行調用並行編程

在該類中,成員函數mainFun中有一個for循環。在每次迭代中,subFun被調用。如何使用並行調用來併發地調用subFun來充分利用CPU的電源?

非常感謝。

的代碼如下:

#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

使用了不到50%的CPU。因此,我想使用parallel_invoke使其更快。 – Frankie

+0

如果你有一個線程池的線程數等於核心數量? – dm03514

+0

我改變了代碼爲: parallel_invoke( \t \t \t \t \t \t \t [&] {A [1] = subFun(I);}, \t \t \t \t \t \t \t [&] {A [1 + NUM/4] = subFun(NUM/4 + I);}, \t \t \t \t \t \t \t [&] {A [1 + 2 * NUM/4] = subFun(NUM/4 + I);} , \t \t \t \t \t \t \t [&] {a [i + 3 * num/4] = subFun(num/4 + i); } \t \t \t \t \t \t); 如何使用for循環使代碼更緊湊? – Frankie