嘗試OpenMP編譯成CUDA的失敗經歷

一次失敗的嘗試,記錄一下。

現有代碼使用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平臺上還不可用,暫時沒有偷懶的辦法大哭


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章