Heresy 在 2006 年,就曾經寫過一系列在 Visual Studio 中使用 OpenMP 2.0 的文章;基本上,在 Heresy 來看,他應該是 C++ 環境中,最簡單的資料平行化開發標準了。
而實際上,OpenMP 後來也有持續推出新版本,像是在 2013 年,就有推出支援 GPGPU 和 SIMD 的 OpenMP 4.0 了;在 2019,也推出了 5.0 版(可以參考《What’s new in OpenMP 5.0》,目前最新是 5.1)。
不過很遺憾的是,Heresy 這邊的主要開發環境 Microsoft Visual Studio,卻打死不肯更新 OpenMP 的部分,所以對於 OpenMP 的 支援,始終是停留在古老的 2.0 版…即便很多人都有像微軟提出反映、建議,卻始終沒有獲得正面的回覆。
直到 2019,微軟才終於想起來還有 OpenMP 這個東西要更新,以「-openmp:experimental」的形式,幫 Visual Studio 的 OpenMP,加入了 SIMD 的支援。(參考:《SIMD Extension to C++ OpenMP in Visual Studio》)
但是儘管如此,他的 OpenMP 核心的部分還是 2.0,只是為了 AI 的應用,硬加上 SIMD 的部分而已。
而到了最近的 Visual Studio 2019 16.9 的更新,微軟則是又針對了 OpenMP 的部分做了更新,變成是實驗性質地提供「-openmp:llvm」的選項,讓程式改用 LLVM 的 OpenMP runtime 函式庫(官網)(感覺是放棄自己的 OpenMP 實作了)。
這個功能目前也還在實驗階段,僅支援有限度的 OpenMP 3.0 功能:
- for 迴圈平行化支援 unsigned int
- 有限度地支援 #pragma omp task
- 需搭配 -openmp:experimental
另外,OpenMP LLVM 現階段也僅能在 amd64 平台上使用。
整體來說,目前 MSVC 針對 OpenMP 的改進還是很有限,但是至少算是開始了。
根據微軟在《Improved OpenMP Support for C++ in Visual Studio》的說法,目前改用 LLVM runtime 只是第一步,接下來應該是會認真更新 OpenMP 的支援;預計接下來將會針對 x64、x64、arm64 加入 OpenMP 3.1 的支援。
再來,則是會支援不涉及 offloading 的 OpenMP 4.5 的支援;也就是說,以目前來看應該是不用期待 OpenMP 的 GPGPU 支援了。
實際在 Visula Studio 使用的話,應該是要在專案設定的「C/C++」的「命令列」中的「其他選項」,加入「/openmp:llvm /openmp:experimental」。(「/」和「–」都可以)
其中,llvm 和 experimental 是可以並存的;像如果要使用 SIMD 的話,experimental 就還是必要的參數。
而本來在「C/C++」的「語言」中的「開啟 MP 支援」(錯很久的翻譯…)則是可以整個拿掉。
如此一來,在 include <omp.h> 的時候,內部會變成是 include <omp_llvm.h>;從 <omp_llvm.h> 的內容來看,他應該是抓 OpenMP 5.0 的版本來?
而在執行時,則會需要 libomp140.x86_64.dll 這個新的 DLL 檔(debug 版是 libomp140d.x86_64.dll);相較於此,以前對應的檔案是 vcomp140.dll。
參考:
[…] 2021 年、Visual Studio 2019 開始引入 OpenMP LLVM 後,微軟終於開始有慢慢地開始針對 OpenMP […]
讚讚
[…] Visual Studio 2019 16.9 的時候,才終於試著開始幫 Visual C++ 的 OpenMP 加上新功能;當時主要的改進,是加入了 OpenMP 對於 SIMD 的支援,另外也開始試著要將 […]
讚讚
[…] 而實際上,OpenMP 4.0 開始,也有支援 SIMD 和 GPGPU 了~不過 Visual Studio 在這塊始終還是要加油就是了(參考)。 […]
讚讚
[…] 同時,從 16.9 開始支援的 LLVM OpenMP,現在除了 x64 外,也開始支援 x86 與 ARM64 了。 […]
讚讚
OpenMP Updates and Fixes for C++ in Visual Studio 2019 version 16.10
https://devblogs.microsoft.com/cppblog/openmp-updates-and-fixes-for-cpp-in-visual-studio-2019-16-10/
讚讚
[…] OpenMP LLVM 會發展到什麼程度,能不能使用完整的 OpenMP 5.0 […]
讚讚