我有两个嵌套循环:
!$omp parallel
!$omp do
do i=1,4
...
!$omp parallel
!$omp do
do j=1,4
call job(i,j)
我的电脑可以并行运行四个线程。对于外循环,创建了这四个线程。前三个快速完成,因为i=4
,job
的价格要高出四倍。
现在我希望在内部并行区域中,新线程共享工作。但这不会发生:CPU负载保持在1/4,就像第四个线程在内循环上串行工作一样。
如何为内部并行循环分配并行CPU时间?
答案 0 :(得分:1)
您是否尝试过以下方法?
!$omp parallel do collapse(2)
do i = 1,4
do j = 1,4
call job(i,j)
end do
end do
应该表现得更好。