parallel-processing - Omp 部分与 Omp 工作共享

标签 parallel-processing fortran openmp

我读到:“这个构造(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 forallwhere 构造或数组操作可以由 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/

相关文章:

multithreading - 线性系统求解器在 Julia 中是否也像在 Matlab 中一样是多线程的?以及如何在 Julia 中对其进行 "multithread"处理?

c++ - OpenMP/C++ : Parallel for loop with reduction afterwards - best practice?

f# - 并行计算、f# 和 GPU 并行处理可能解决哪些实际问题

c# - 并行运行两个循环

openmp - 在openmp中对数组进行排序

gcc - Fortran 77 提示常见 block

arrays - Fortran 2008 - 类中的数组变量

arrays - Fortran 算法如何使用这些数组?

c++ - 在不同线程之间通过 (c++) openmp 共享信息

c++ - 如何减少 OpenMP 中 for 循环内关键部分内的值?