CUDA LLVM, PoCL
2023-8-25 15:33 JST
Ubuntu の 20.04 がアップデートを繰り返すうちに Cuda が使えなくなった。そこで、11.6 から 12.2 へアップデートすることにした。
CUDA
まずは関連しそうなものすべてを削除。ドライバは 525 だった。削除後 reboot。
sudo apt remove \
libnvidia-cfg1-525 \
libnvidia-compute-525 \
nvidia-compute-utils-525 \
nvidia-dkms-525 \
nvidia-kernel-common-525 \
nvidia-kernel-source-525 \
nvidia-utils-525 \
xserver-xorg-video-nvidia-525
そして、535 をインストール。これでいいのかは不明。
sudo apt install /
libnvidia-cfg1-535 /
libnvidia-compute-535 /
nvidia-compute-utils-535 /
nvidia-dkms-535 /
nvidia-kernel-common-535 /
nvidia-compute-utils-535 /
xserver-xorg-video-nvidia-535
実はすげー試行錯誤している。その後、CUDA を公式ダウンロードサイトから導入。本当は11.7を入れようとしたのだが、色々間違えて最新のものをインストールしてしまった。動いているから良しとする。
LLVM 16
数日前と同じ要領で LLVM 16 を入れる。llvm-spirv が今回は入っている。どうも llvm/projects の下に入れたものが自動的に入るようだ。だとしたら、シンボリックリンクして LLVM_ENABLE_PROJECTS いらねんじゃね?と思って後で試したらうまく行かんかった。当面はこの方法でいく。
$ mkdir Work
$ cd Work
$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project/llvm/projects/
$ git clone https://github.com/KhronosGroup/SPIRV-LLVM-Translator.git
$ cd ..
$ git tag
$ git checkout -b llvmorg-16.0.6 llvmorg-16.0.6
$ cd projects/SPIRV-LLVM-Translator/
$ git tag
$ git checkout -b v16.0.0 v16.0.0
$ cd ../../..
$ mkdir build-v16-with-llvm-spirv-without-lld
$ cd build-v16-with-llvm-spirv-without-lld
$ cmake -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DCMAKE_INSTALL_PREFIX=~/Work/root -DLLVM_ENABLE_PROJECTS=lld\;clang\;polly -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm
$ ninja install
$ cd ..
$ mkdir build-v16-with-llvm-spirv
$ cd build-v16-with-llvm-spirv
$ cmake -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DCMAKE_INSTALL_PREFIX=~/Work/root -DLLVM_ENABLE_PROJECTS=lld\;clang\;polly -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm
$ cmake -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DCMAKE_INSTALL_PREFIX=~/Work/root -DLLVM_ENABLE_PROJECTS=lld\;clang\;polly -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm
lld がなかったので、最初に lld なしで、つぎに lld ありで再インストールしている。今回は Release で build。
PoCL
PoCL も同様にビルドそしてインストール。
$ cmake -DCMAKE_INSTALL_PREFIX=~/Work/root -DENABLE_CUDA=ON -GNinja ..
$ ninja
$ ninja install
ついでにできた libpoclu.a と poclu.h も手でコピーする。毎回 -GNinja するのめんどくさいので、.bashrc にexport CMAKE_GENERATOR=Ninjaと追加。
過去に作ったアプリを実行してみる。OCL_ICD_VENDORS とか LD_LIBRARY_PATH の設定を忘れないようにする。
$ export OCL_ICD_VENDORS=~/Work/root/etc/OpenCL/vendors/
$ export LD_LIBRARY_PATH=~/Work/root/lib
$ _build/template_gemm_pocl0 _build/template_gemm_pocl0.spv
:+ OpenCL initialisation ...
| Using platform: Portable Computing Language
| Using device: NVIDIA GeForce RTX 3060
- (ok)
poclu_load_program:0
Average:206.978 GFlops, 2.2839
:+ Check Result ...
| ok_n:1048576 ng_n:0
- (ok)
うまくいったようだ。