【发布时间】:2016-10-25 19:53:38
【问题描述】:
因此,在我的代码中,有各种函数可以改变各种数组,调用函数的顺序很重要。由于所有函数都被调用了很多次,因此创建和销毁线程已成为很大的开销。 编辑我的问题,因为我可能过度简化了我当前的问题。 一个例子
double ans = 0;
for (int i = 0; i < 4000; i++){
funcA(a,b,c);
funcB(a,b,c);
ans = funcC(a,b,c):
}
prinft(ans);
funcA、funcB 和 func C 在哪里
void funcA (int* a, point b, int* c){
#pragma omp parallel for shared(a,b,c)
for (int ii = 0; ii < b.y; ii++){
for (int jj = 0; jj < b.x; jj++){
\\ alter values of a and c
}
}
}
void funcB (int* a, point b, int* c){
#pragma omp parallel for shared(a,b,c)
for (int ii = 0; ii < b.y; ii++){
for (int jj = 0; jj < b.x; jj++){
\\ alter values of a and c
}
}
}
double funcC (int* a, pointb, int* c){
double k = 0;
#pragma omp parallel for shared(a,b,c) reduction(+:k)
for (int ii = 0; ii < b.y; ii++){
for (int jj = 0; jj < b.x; jj++){
\\ alter values of a and c
k += sqrt(a[ii*jj] + c[ii**jj]);
}
}
return k;
}
有没有办法在所有函数使用的初始 for 循环之前创建一组线程,并且不会不断地被销毁和再次创建,并且在函数调用中仍然保持正确的顺序?
编辑 2:
我正在寻找一种按顺序运行 funcA funB、funcC 的方法。但是这些函数内部有一些代码将使用多个线程。我想要一种在开始时创建线程的方法,然后它们只会用于那些并行部分,所以最后的答案是正确的。有没有办法避免分叉和加入40000次?
【问题讨论】:
-
但是你怎么看
k这里?如果没有合理合理的用途,很难解释如何处理它...... -
@Gilles 我已经编辑了我的问题以便更好地解释
标签: c multithreading openmp