【问题标题】:Omp sections vs Omp workshareOmp 部分与 Omp 工作共享
【发布时间】:2023-03-30 23:39:01
【问题描述】:
我读到:“此构造 (Omp workshare) 用于通过将任务划分为工作单元来并行化数组操作。每个这样的工作单元仅由并行区域中存在的可用线程之一处理。” (来自“Ray, S. (2019). Fortran 2018 with Parallel Programming (1st ed.). CRC Press')。那么“omp workshare”和“omp section”之间的实际区别是什么?
P.S:我使用的是 gfortran,所以如果您使用示例,请使用 fortran 代码。
【问题讨论】:
标签:
parallel-processing
fortran
openmp
【解决方案1】:
OpenMP Workshare 与章节完全不同,即使是在您的书中进行非常简短的阅读也应该能发现其中的区别。
使用部分定义代码的不同部分,可以同时完成。
!$omp parallel
!$omp sections
!$omp section
some commands
!$omp sections
some different independent commands
!$omp end sections
!$omp end parallel
对于 workshare,您是说 Fortran forall 或 where 构造或数组操作可以由 OpenMP 线程按部分进行评估。
real, dimension(:,:,:) :: A, B, C
...
!$omp parallel
!$omp workshare
A = B * C
!$omp end workshare
!$omp end parallel
A = B * C 数组操作将被分成小部分,每个线程将评估其中的一些部分。