一次失败的尝试,记录一下。
现有代码使用OpenMP优化的,想在不改代码的情况下直接通过编译成GPU代码加速,网上搜索了一番,IBM提供了基于Power9架构的OpenMP GPU支持
[1]. 不适合X86平台。1. 参考:https://parallel-computing.pro/index.php/9-cuda/43-openmp-4-0-on-nvidia-cuda-gpus,编译成功host:Ubuntu 18.04 dev, CUDA 9.1.85-1, gcc6 6.4.0-12ubuntu1libomptarget 有一处编译失败,原因是cu代码里使用了c99 的complex.h,但是cuda默认是使用c++编译,会导致c里定义的宏complex没法正常展开成_Complex,需要强制定义一下。问题:编译好的程序只能编译c程序,编译c++程序会遇到链接问题
2. 参考:https://github.com/clang-ykt/clang/wiki这个版本是上一个链接里的更新版本,编译这个的时候我退回到了cuda 8/gcc 5编译同样需要重定义complex问题:libomptarget-nvptx 只能静态链接成.a,动态链接报错
结论:OpenMP 4对GPU的支持现在在X86平台上还不可用,暂时没有偷懒的办法