And*_*ida 24 multithreading fortran gpu openmp openacc
我一直在网上搜索,但我仍然对此话题感到困惑.谁能更清楚地解释这个?我来自航空航天工程背景(不是计算机科学专业),所以当我在网上阅读有关OpenMP/CUDA等的内容时.和多线程我真的不太了解所说的很多内容.
我目前正在尝试并行化用FORTRAN编写的内部CFD软件.这些是我的疑惑:
OpenMP使用来自CPU的多个线程共享工作负载.它可以用来让GPU也能完成一些工作吗?
我读过OpenACC.它是否类似于OpenMP(易于使用)?
我也读过有关CUDA和内核的内容,但我对并行编程没有太多经验,而且我对内核的内容并不了解.
你能给我一个"傻瓜"类型的答案吗?
是。OpenMP 4目标构造被设计为支持各种加速器。对于NVIDIA GPU的编译器支持可从GCC 7+(参见1和2,尽管后者还没有被更新,以反映OpenMP的4 GPU支持),锵(见3,4,5),和Cray。英特尔C / C ++编译器提供了对英特尔GPU的编译器支持(例如参见6)。
可从https://github.com/clang-ykt获得IBM为NVIDIA GPU开发的OpenMP 4+的Clang / LLVM实现。在“用于CORAL / OpenPower异构系统的OpenMP编译器”中提供了构建配方。
Cray编译器支持NVIDIA GPU的OpenMP目标。从Cray Fortran参考手册(8.5):
支持将OpenMP 4.5 target指令用于NVIDIA GPU或当前CPU目标。必须加载适当的加速器目标模块才能使用目标指令。
Intel编译器支持C / C ++的Intel Gen图形的OpenMP目标,但不支持Fortran。此外,不支持teams
and distribute
子句,因为它们不是必需的/不适当的。下面是一个简单的示例,显示了OpenMP目标功能如何在不同环境中工作。
void vadd2(int n, float * a, float * b, float * c)
{
#pragma omp target map(to:n,a[0:n],b[0:n]) map(from:c[0:n])
#if defined(__INTEL_COMPILER) && defined(__INTEL_OFFLOAD)
#pragma omp parallel for simd
#else
#pragma omp teams distribute parallel for simd
#endif
for(int i = 0; i < n; i++)
c[i] = a[i] + b[i];
}
Run Code Online (Sandbox Code Playgroud)
Intel和GCC的编译器选项如下。我没有用于NVIDIA GPU的GCC设置,但是您可以查看文档以了解适当的-foffload
选项。
$ icc -std=c99 -qopenmp -qopenmp-offload=gfx -c vadd2.c && echo "SUCCESS" || echo "FAIL"
SUCCESS
$ gcc-7 -fopenmp -c vadd2.c && echo "SUCCESS" || echo "FAIL"
SUCCESS
Run Code Online (Sandbox Code Playgroud)
小智 6
OpenMP 4.0标准包括对加速器(GPU,DSP,Xeon Phi等)的支持,但我不知道任何存在执行的OpenMP 4.0标准的GPU,只有早期的经验.
不幸的是,我认为至少现在没有CPU和GPU的可移植解决方案(OpenCL除外,但与OpenMP和OpenACC相比,它的级别太低).
如果您需要便携式解决方案,可以考虑使用Intel Xeon Phi加速器而不是GPU.英特尔Fortran(和C/C++)编译器包括对CPU和Xeon Phi的OpenMP支持.
此外,要创建一个真正可移植的解决方案,使用合适的并行技术是不够的.您必须修改程序才能提供足够的并行度.有关可能方法的示例,请参见" 结构化并行编程 "或类似书籍.
补充一下上述其他平台上的支持:IBM 正在为两个 OpenMP 4.5 编译器做出贡献:一个是开源 Clang/LLVM 编译器。另一个是IBM 的XL 编译器。两个编译器共享相同的帮助程序 OpenMP 卸载库,但编译器的代码生成和 GPU 优化不同。对于 Fortran,XL Fortran 编译器支持从版本15.1.5开始将大量 OpenMP 4.5 卸载到 NVIDIA GPU 。(以及XL C/C++版本13.1.5)。今年和明年将添加更多功能,目标是在 2018 年提供完整支持。如果您使用 POWER,您可以加入 XL 编译器测试版计划,以访问我们最新的 Fortran 和 C/C++ OpenMP 卸载功能.
归档时间: |
|
查看次数: |
13737 次 |
最近记录: |