Add tags

Add tags to the following comment
FORTRAN / OpenMP で。
15行で明示的に 8 threads 生成
18行で空きスレッドに仕事を割り当て
22行で NOWAIT 指定によりスレッド間同期を取らずに先へ
24行で全てのスレッドの終了待ち、
ってところです。

スレッドプールの管理は OpenMP に任せきりですが、通常の実装ではスレッドプールは残される、んではないかと。
# OpenMP の仕様を読みきれていない....


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
      subroutine random_wait(i)
      integer omp_get_thread_num, omp_get_num_threads
      j=mod(irand(),10)
      write(*,'(AI2AI2AI2AI2)') 'begin ',i,' - ',j,' sec, thread ',
     c     omp_get_thread_num(), '/', omp_get_num_threads()
      call sleep(j)
      write(*,'(AI2AI2AI2AI2)') 'end   ',i,' - ',j,' sec, thread ',
     c     omp_get_thread_num(), '/', omp_get_num_threads()
      end

      program thread_test
      integer omp_get_thread_num, omp_get_num_threads
      write(*,*) 'Single Thread'
      call sleep(4)
!$OMP PARALLEL NUM_THREADS(8)                                                   
      write(*,'(AI2AI2)') 'Multi Thread ',
     c     omp_get_thread_num(),'/',omp_get_num_threads()
!$OMP DO SCHEDULE(DYNAMIC)                                                      
      do i=1,20
         call random_wait(i)
      end do
!$OMP END DO NOWAIT                                                             
      write(*,'(AI2)') 'finish', omp_get_thread_num()
!$OMP BARRIER                                                                   
!$OMP MASTER                                                                    
      write(*,*) 'Finish'
!$OMP END MASTER                                                                
!$OMP END PARALLEL                                                              
      end

Add tags

The input will be splited to tags with space.

Index

Feed

Other

Link

Pathtraq

loading...