如果我有這樣的OpenMP和功能
int main(){
....
for (i=0; i< N; i++)
{
/*Do some calculations*/
for (j=0; j<M; j++)
{
/*Do more calculations*/
compute_x(some pointers as args);
}
compute_y(some pointer as args);
}
...
return value;
}
and
void compute_x(some pointers as args)
{
/* some calculations*/
for (h=0; h<COUNT; h++)
{
...
}
}
}
和compute_y(一環)是相似的。
我的問題是,如果我在並行使用OpenMP指令的主要外環,
#pragma omp parallel for schedule (runtime) private (...)
for (i=0; i< N; i++)
{
...
}
什麼將是功能compute_x()
和compute_y()
的行爲?據我瞭解,它們將由每個線程執行,因此compute_x()
中的for循環將由每個線程從0執行到COUNT。
如果這是正確的,我還能做什麼來分擔工作負荷也在函數compute_x()
for循環(假設沒有數據依賴性)。我的第一個猜測是使函數compute_x()和compute_y()內聯,但函數非常大,並且他們還調用其他函數,幸運的是它們也可以並行執行。
你的問題已經很複雜,所以我刪除了關於內聯的問題。請在單獨的帖子中提問(可以用歷史記錄恢復它) – CharlesB 2012-04-12 15:59:05