2025年6月号 ラズパイGPUプログラミング環境のサポート・ページ

●このページで解説すること
本サポート・ページでは,2025年6月号 特集 第2部 「ラズパイからはじめる!GPUプログラミング」で作成するGPUプログラムを動かす開発環境の構築手順を解説します.基本的には本誌と同じ内容ですが,環境構築時に使用するコマンドなどをコピー&ペーストできるようにしてあります.第2部の内容が試せるハードウェアは表1の通りです.

 

表1 第2 部内容が試せるハードウェア

ボード名称 GPU 備考
ラズベリー・パイ4モデルB VideoCore VI(ブロードコム) 筆者は4Gバイト版を使用
ラズベリー・パイ5 VideoCore VII(ブロードコム) 筆者は8Gバイト版を使用

 

●ステップ①…OSのインストール
次のURL にアクセスして,Ubuntu 24.10 for Raspberry Pi のイメージ・ファイルをダウンロードします.

https://cdimage.ubuntu.com/releases/24.10/release/ubuntu-24.10-preinstalled-desktop-arm64+raspi.img.xz

ダウンロードしたファイルは,Raspberry Pi Imagerを利用してmicroSDカードに書き込みます.[OS]選択ボタンを押すと表示される選択肢の中から,一番下に表示されている[Use custom]を選択します.
もし,OSがうまく起動しない場合は,次の2通りの対策が有効です.

(1) OSのインストール先メディアとしてUSBメモリを使用する
(2) メモリ・カード・リーダを利用して,microSDカードをUSB ポートに接続する

 

●ステップ②…OSの初期設定と必要なソフトウェアのインストール
▼手順1:アップデート&インストール
以降のコマンド実行例において,行先頭の一文字目が$の場合は通常のユーザ権限で実行することを意味します.また,一文字目が#の場合はrootユーザ権限で実行することを意味します.

# apt update
# apt upgrade
# reboot
$ uname -r
6.11.0-1009-raspi
# apt install openssh-server net-tools screen
# apt install git cmake clang vulkan-tools libvulkan-dev clinfo
# apt install g++ opencl-headers libopencv-core-dev libopencv-imgcodecs-dev

openssh-serverのインストール時に「What do you want to do about modified configuration file sshd_config?(sshd_config ファイルが書き換えられてますが,どちらのファイルを使用しますか?)」と聞かれた場合には,”install the package maintainer’s version”を選択してください.
▼手順2:GPUデバイスの使用権限を設定する
GPUデバイスを使用する権限を得るために,自分のユーザIDをvideo及びrenderグループに追加します.<userid>の部分は自分のユーザIDに置き換えてください.例えば,ユーザIDがmotohashiだった場合には,adduser motohashi videoと入力します.

# adduser <userid> video
# adduser <userid> render

所属グループの変更は,次回のログイン時から反映されるので,一度ラズベリー・パイからログアウトしてから,再度ログインし直してください.

 

●ステップ③…clvkのソースコードを入手する
ホーム・ディレクトリの直下にソフトウェア開発用のワークスペースとして,projというディレクトリを作成する前提で,clvkのソースコードをGitHubから入手します.

$ mkdir proj
$ cd proj
$ git clone https://github.com/kpet/clvk
$ cd clvk

次のコマンドを実行して,clvkのソースコードのバージョンを,記事執筆時のものと一致させておくことをお勧めします.

$ git submodule update –init –recursive
$ ./external/clspv/utils/fetch_sources.py –deps llvm

 

●ステップ④…clvkのビルド準備
標準のスワップ・ファイル1Gバイトに加えて,追加8Gバイト分のスワップ・ファイルを作成します.

# swapon –show
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 59.2M -2
# cd /
# fallocate -l 8G swapfile2
# chmod 600 swapfile2
# mkswap /swapfile2
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=3c03c6ec-33a8-4e34-8d5e-fe13f41442cf
# swapon swapfile2
# swapon –show
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 4M -2
/swapfile2 file 8G 0B -3
# free -m
total used free shared buff/cache available
Mem: 3782 1272 159 136 2675 2510
Swap: 9215 672 8543

使用するCコンパイラをUbuntu標準のgccから,clangに切り替えます.

# update-alternatives –list cc
/usr/bin/clang
/usr/bin/gcc
# update-alternatives –config cc
There are 2 choices for the alternative cc (providing /usr/bin/cc).
Selection Path Priority Status
——————————————————
* 0 /usr/bin/gcc 20 auto mode
1 /usr/bin/clang 10 manual mode
2 /usr/bin/gcc 20 manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/clang to provide /usr/bin/cc (cc) in manual mode

g++からclang++に切り替えます.

# update-alternatives –list c++
/usr/bin/clang++
/usr/bin/g++
# update-alternatives –config c++
There are 2 choices for the alternative c++ (providing /usr/bin/c++).

Selection Path Priority Status
——————————————————-
* 0 /usr/bin/g++ 20 auto mode
1 /usr/bin/clang++ 10 manual mode
2 /usr/bin/g++ 20 manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/clang++ to provide /usr/bin/c++ (c++) in manual mode

 

●ステップ⑤…clvkのビルド
Makefileを生成します.

$ cd ~/proj/clvk
$ mkdir build
$ cd build
$ cmake ..

makeコマンドを実行します.

<搭載メモリが4Gバイト以下の場合>
$ make
<搭載メモリが8Gバイト以上の場合>
$ make -j2

 

●ステップ⑥…clvkのインストール
clvkのビルドに無事成功したら,出来上がったバイナリ・ファイルをシステムにインストールします.

$ sudo make install

Install the project…
— Install configuration: “RelWithDebInfo”
— Installing: /usr/local/./libOpenCL.so.0.1
— Installing: /usr/local/./libOpenCL.so.1
— Installing: /usr/local/./libOpenCL.so
— Installing: /usr/local/./clspv

どうやらlibOpenCL.soなどのバイナリ・ファイルが/usr/localディレクトリにインストールされてしまったようなので,手動で/usr/local/libに移動しておくことにします.

# cd /usr/local
# mv clspv libOpenCL.so* lib

OpenCLのICDローダにclvkのlibOpenCL.soファイルを登録しておきます.

# mkdir -p /etc/OpenCL/vendors
# echo /usr/local/lib/libOpenCL.so.1 > /etc/OpenCL/vendors/clvk.icd

 

●ステップ⑦…動作確認
clinfoコマンドを実行して,clvkが正しく動作していることを確認します.

$ clinfo
Number of platforms 1
Platform Name clvk ← OpenCLプラットフォーム名
Platform Vendor clvk
Platform Version OpenCL 3.0 clvk
Platform Profile FULL_PROFILE

Number of devices 2 ← 存在するOpenCLデバイスの個数

Device Name V3D 7.1.7.0 ← これが VideoCore VII 用 GPU ドライバ
Device Vendor Unknown vendor
Device Vendor ID 0x14e4
Device Version OpenCL 3.0 CLVK on Vulkan v1.2.289 driver 100671496

Device Name llvmpipe (LLVM 19.1.1, 128 bits) ← こちらは S/Wエミュレーションドライバ
Device Vendor Mesa
Device Vendor ID 0x10005
Device Version OpenCL 3.0 CLVK on Vulkan v1.3.289 driver 1