在我当前的代码中我使用两个OpenMP部分,只有两个线程 如下:
!$omp parallel NUM_THREADS(2)
!$omp sections
!$omp section
do work1
!$omp section
do work2
!$omp end sections
!$omp end parallel
work1
比work2
更耗时,并且因为sections
构造需要两个线程完成其同步任务,work1
成为限制步骤,并且一个线程浪费了大部分时间。
我想使用更灵活的构造,例如task
,但我不知道是不是
有可能做到以下,如果是这样,该怎么做。首先,从两个线程开始(每个线程1个任务,如sections
构造中),一个解决work1
,另一个work2
。其次,只要最简单的任务work2
完成,就可以使用自由线程来加速work1
。
感谢。