我读到:“这个构造(Omp workshare)用于通过将任务划分为工作单元来并行化数组操作。每个这样的工作单元仅由并行区域中存在的可用线程之一处理。” (摘自“Ray, S. (2019)。Fortran 2018 并行编程(第一版)。CRC Press”)。那么“omp workshare”和“ompsections”之间的实际区别是什么?
P.S:我使用的是 gfortran,所以如果您使用示例,请使用 fortran 代码。
最佳答案
OpenMP Workshare 与章节完全不同,即使在您的书中进行非常简短的阅读也应该真正揭示其中的差异。
通过节,您可以定义代码的不同部分,这可以同时完成。
!$omp parallel
!$omp sections
!$omp section
some commands
!$omp sections
some different independent commands
!$omp end sections
!$omp end parallel
通过工作共享,您可以说 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
数组操作将被分为多个小部分,每个线程将评估其中的一些部分。
关于parallel-processing - Omp 部分与 Omp 工作共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66463658/