空闲线程,而新线程可以分配给嵌套循环

时间:2016-08-18 13:18:03

标签: multithreading fortran openmp

我有两个嵌套循环:

!$omp parallel 
!$omp do
do i=1,4
  ...
  !$omp parallel 
  !$omp do
  do j=1,4
    call job(i,j)

我的电脑可以并行运行四个线程。对于外循环,创建了这四个线程。前三个快速完成,因为i=4job的价格要高出四倍。

现在我希望在内部并行区域中,新线程共享工作。但这不会发生:CPU负载保持在1/4,就像第四个线程在内循环上串行工作一样。

如何为内部并行循环分配并行CPU时间?

1 个答案:

答案 0 :(得分:1)

您是否尝试过以下方法?

!$omp parallel do collapse(2)
do i = 1,4
do j = 1,4
    call job(i,j)
end do
end do

应该表现得更好。