一次失敗的嘗試,記錄一下。
現有代碼使用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-12ubuntu1
libomptarget 有一處編譯失敗,原因是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平臺上還不可用,暫時沒有偷懶的辦法