我很新于并行编程,正在使用OpenMP。我对以下问题感到困惑。
假设我有这个程序:
void functionX(int x){
for(int i = 0; i < x; i++)
//do some process
}
void functionY(int x, int y){
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++) {
funtionX(j);
}
}
void functionZ(int x){
for(int i = 0; i < x; i++)
functionY(i, 5);
}
int main() {
functionZ(3)
}
现在我想在这段代码中实现并行编程。因为 functionZ 调用了 functionY 而 functionY 又调用了 functionX,所以我认为不必让每个函数都变成并行的,只需要将 functionZ 并行化即可,因此每个线程在 functionZ 中都会独立地调用 functionY。
以下是我在 functionZ 中的代码样例。
void functionZ(int x){
#pragma omp parallel for
for(int i = 0; i < x; i++)
functionY(i, 5);
}
然而,我不确定我上面所说的是否正确。我应该将每个函数分别并行处理吗?
functionY();
调用,但前提是这些调用之间没有依赖关系,而这似乎是你的情况。然而,你应该考虑数据并行性而不是线程并行性:在functionX()
中读取的数据以这种方式有效地读取吗?数据读取是否会成为瓶颈? - Lorenzo Belli