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;
}
使用了不到50%的CPU。因此,我想使用parallel_invoke使其更快。 – Frankie
如果你有一個線程池的線程數等於核心數量? – dm03514
我改變了代碼爲: 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