「GPGPU」の版間の差分
(同期) |
(同期) |
||
111行目: | 111行目: | ||
==== Rusticl ==== |
==== Rusticl ==== |
||
+ | |||
+ | {{Accuracy|マニュアルに書かれてあることと異なり、OCL_ICD_VENDORS は単一の icd ファイルを処理することができないようです。https://github.com/OCL-dev/ocl-icd/issues/7#issuecomment-1522941979 を参照してください。}} |
||
{{Note|現在、{{ic|iris}} ドライバがサポートするのは Intel GPU のみです。{{ic|radeonsi}} による AMD GPU のサポートはもうじき搭載されるはずです。他の GPU とドライバはそれより遅くなるでしょう。}} |
{{Note|現在、{{ic|iris}} ドライバがサポートするのは Intel GPU のみです。{{ic|radeonsi}} による AMD GPU のサポートはもうじき搭載されるはずです。他の GPU とドライバはそれより遅くなるでしょう。}} |
||
282行目: | 284行目: | ||
* [https://gitlab.com/illwieckz/i-love-compute 異なる GPU 用に利用可能な OpenCL フレームワークのリスト] |
* [https://gitlab.com/illwieckz/i-love-compute 異なる GPU 用に利用可能な OpenCL フレームワークのリスト] |
||
− | {{TranslationStatus|GPGPU|2023-04- |
+ | {{TranslationStatus|GPGPU|2023-04-27|776398}} |
2023年4月27日 (木) 19:05時点における版
関連記事
GPGPU は General-purpose computing on graphics processing units; GPUによる汎用計算 の略です。
OpenCL
OpenCL (Open Computing Language) は、非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API について規定されています。
ランタイム
OpenCL を使用するプログラムを実行するには、互換性のあるハードウェアランタイムをインストールする必要があります。
AMD/ATI
- opencl-mesa: clover と rusticl による mesa ドライバ用の OpenCL サポート
- rocm-opencl-runtime: AMD の ROCm GPU コンピュートスタックの一部。GFX8 およびそれ以降のカード (Fiji, Polaris, Vega) を公式にサポートしており、Navi10 ベースのカードは非公式で部分的なサポートがあります。Vega より古いカードをサポートするには、ラインタイム変数
ROC_ENABLE_PRE_VEGA=1
を設定する必要があります。これは、ubuntu の amdgpu-install にopencl=rocr
を指定したものに似てはいますが、全く異なるものです。このパッケージの rocm バージョンは ubuntu のインストーラバージョンとは異なるからです。 - opencl-legacy-amdgpu-proAUR: AMD の ubuntu リリースから再パッケージングされたレガシーな Orca OpenCL。ubuntu の amdgpu-install に
opencl=legacy
を指定することと等価です。 - opencl-amdAUR, opencl-amd-devAUR: AMD の ubuntu リリースから再パッケージングされた ROCr と Orca OpenCL。ubuntu の amdgpu-install で
opencl=rocr,legacy
を指定することと等価です。 - amdapp-sdkAUR: AMD CPU ランタイム
NVIDIA
- opencl-nvidia: 公式の NVIDIA ランタイム
Intel
- intel-compute-runtime: またの名を Neo OpenCL ランタイム。第8世代 (Broadwell) 以降の Intel HD Graphics GPU 用のオープンソース実装です。
- opencl-mesa: clover と rusticl による mesa ドライバ用の OpenCL サポート
- beignetAUR: 第7世代 (Ivy Bridge) 以降の Intel HD Graphics GPU 用のオープンソース実装。これは Intel によって非推奨となっており、NEO OpenCL ドライバが後継です。ただし、古いハードウェアプラットフォーム (例: Ivy Bridge、Haswell) においては推奨されるソリューションです。
- intel-openclAUR: 第7世代 (Ivy Bridge) 以降の Intel HD Graphics GPU のプロプライエタリな実装。これは Intel によって非推奨となっており、NEO OpenCL ドライバが後継です。ただし、古いハードウェアプラットフォーム (例: Ivy Bridge、Haswell) においては推奨されるソリューションです。
- intel-opencl-runtimeAUR: Intel Core 及び Xeon プロセッサ用の実装。非 Intel な CPU もサポートしています。
その他
- pocl: LLVM ベースの OpenCL 実装 (ハードウェアとは独立)
Vulkan ランタイム上で OpenCL アプリケーションを実行するためのコンパイラとトランスレータがあります。
- clspv-gitAUR: Clspv は OpenCL C のサブセットから Vulkan コンピュートシェーダに変換するためのプロトタイプコンパイラです。
- clvk: clvk は clspv をコンパイラとして使用する、Vulkan 上で動作する OpenCL 3.0 のプロトタイプ実装です。
- xrt-binAUR: FPGA xrt のための Xilinx Run Time
- fpga-runtime-for-opencl: FPGA ランタイムs
32ビットランタイム
OpenCL を使う32ビットプログラムを実行するには、互換性のあるハードウェア32ビットランタイムをインストールする必要があります。
AMD/ATI
- lib32-opencl-mesa: AMD/TI Radeon mesa ドライバ用の OpenCL サポート (32ビット)
NVIDIA
- lib32-opencl-nvidia: NVIDIA 用の OpenCL 実装 (32ビット)
ICD ローダー (libOpenCL.so)
OpenCL ICD ローダーはプラットフォームに依存しないライブラリで、OpenCL API 経由で特定のデバイスのドライバをロードするために使われます。 ほとんどの OpenCL ベンダーはそれぞれ独自の OpenCL ICD ローダーを提供しており、他のベンダーの OpenCL 実装でも問題なく動作するはずです。 残念ながら、大抵のベンダーは最新の ICD ローダーを提供していません。そのため、Arch Linux ではこのライブラリを別のプロジェクト (ocl-icd) から提供することで最新の OpenCL API の実装が機能するようにしています。
他の ICD ローダーライブラリは各メーカーの SDK の一部としてインストールされます。確実に ocl-icd パッケージに含まれている ICD ローダーを使用したい場合、/etc/ld.so.conf.d
にファイルを作成して /usr/lib
を動的プログラムローダーの検索ディレクトリに追加してください:
/etc/ld.so.conf.d/00-usrlib.conf
/usr/lib
全ての SDK は ld.so.conf.d
ファイルでランタイムのライブラリディレクトリを検索パスに追加するため上記の設定をする必要があります。
様々な OpenCL ICD を含む利用可能なパッケージは:
- ocl-icd: 推奨、ほぼ最新
- intel-openclAUR: Intel により提供。OpenCL 2.0 を提供します。これは非推奨となっており、後継は intel-compute-runtime です。
開発
OpenCL を使用して開発するには、最低でも以下のパッケージが必要です:
- ocl-icd: OpenCL ICD ローダ実装。最新の OpenCL 仕様に沿っています。
- opencl-headers: OpenCL C/C++ API ヘッダーファイル。
ベンダーの SDK には様々なツールやサポートライブラリが含まれています:
- intel-opencl-sdkAUR: Intel OpenCL SDK (古いバージョン。新しい OpenCL SDK は INDE と Intel Media Server Studio に含まれています)
- amdapp-sdkAUR: このパッケージにより
/opt/AMDAPP
と SDK ファイルの一部がインストールされ、一定数のコードサンプル (/opt/AMDAPP/SDK/samples/
) も含まれています。また、システム内に存在する OpenCL プラットフォームとデバイスをリストアップし、それらに関する詳細な情報を表示するclinfo
ユーティリティも提供します。SDK 自体に CPU OpenCL ドライバが含まれているため、OpenCL を CPU デバイス上で実行するための追加のドライバは必要ありません (CPU のベンダを問わず)。 - cuda: OpenCL 1.1 のサポートを含む Nvidia の GPU SDK。
実装
あなたのシステムで現在アクティブになっている OpenCL 実装を確認するには、以下のコマンドを使用してください:
$ ls /etc/OpenCL/vendors
システムで利用可能な OpenCL プラットフォームとデバイスの利用可能な (既知の) 全プロパティを調べるには、clinfo をインストールしてください。
Rusticl
Rusticl は、Rust で記述された新しい OpenCL 実装で、opencl-mesa によって提供されています。環境変数 RUSTICL_ENABLE=driver
(driver
は Gallium ドライバ。radeonsi
や iris
など) を設定することで有効化できます。
任意で、OpenCL アプリケーションが Rusticl を検出しない場合、以下の環境変数を使用してください:
OCL_ICD_VENDORS=/etc/OpenCL/vendors/rusticl.icd
言語バインディング
- JavaScript/HTML5: WebCL
- Python: python-pyopencl
- D: cl4d や DCompute
- Java: Aparapi や JOCL (JogAmp の一部)
- Mono/.NET: Open Toolkit
- Go: Go のための OpenCL バインディング
- Racket: Racket にはネイティブなインファーフェイス on PLaneT が含まれています。roco を通してインストールできます。
- Rust: ocl
- Julia: OpenCL.jl
SYCL
SYCL は、Khronos Group によるオープンでロイヤルティフリーな標準で、OpenCL 1.2 に基づく C++ 用のシングルソースのヘテロジニアスプログラミングモデルを定義します。
SYCL はランタイム部分と C++ デバイスコンパイラから構成されます。デバイスコンパイラはあらゆる種類のアクセラレータを対象とすることができます。ランタイムは OpenCL 実装が存在しない場合に CPU コードパスにフォールバックするために必要となります。
実装
- computecppAUR: Codeplay による SYCL 1.2.1 のプロプライエタリ実装。SPIR、SPIR-V、そして実験的な PTX (NVIDIA) をデバイスターゲットとして対象とすることができます。
- trisycl-gitAUR: 主に Xilinx によって開発されているオープンソースの実装。
- hipsycl-cuda-gitAUR と hipsycl-rocm-gitAUR: OpenCL の代わりに AMD の HIP を使用するフリー実装。AMD と NVIDIA の GPU で動作可能。
SPIR サポートの確認
大抵の SYCL 実装はアクセラレータのコードを SPIR あるいは SPIR-V にコンパイルすることができます。どちらも Khronos によって設計された中間言語で、OpenCL ドライバーに渡すことができます。SPIR や SPIR-V に対応しているかどうか確認するには clinfo を使います:
$ clinfo | grep -i spir
Platform Extensions cl_khr_icd cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_fp64 cl_khr_image2d_from_buffer cl_intel_vec_len_hint IL version SPIR-V_1.0 SPIR versions 1.2
ComputeCpp には、関連するシステム情報を要約するツールも同梱されています:
$ computecpp_info
Device 0: Device is supported : UNTESTED - Untested OS CL_DEVICE_NAME : Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz CL_DEVICE_VENDOR : Intel(R) Corporation CL_DRIVER_VERSION : 18.1.0.0920 CL_DEVICE_TYPE : CL_DEVICE_TYPE_CPU
SPIR や SPIR-V をサポートしている既知のドライバーとして intel-compute-runtime, intel-opencl-runtimeAUR, pocl, amdgpu-pro-openclAUR[リンク切れ: パッケージが存在しません] などが存在します。
開発
SYCL は、機能する C++11 環境がセットアップされている必要があります。いくつかのオープンソースライブラリが存在します:
- ComputeCpp SDK: コード例集、ComputeCpp 用の cmake 統合。
- SYCL-DNN: ニューラルネットワークパフォーマンスプリミティブ
- SYCL-BLAS: 線形代数パフォーマンスプリミティブ
- VisionCpp: コンピュータビジョンライブラリ
- SYCL Parallel STL: C++17 の並列アルゴリズムお GPU 実装
CUDA
CUDA (Compute Unified Device Architecture) は、NVIDIA のプロプライエタリな、クローズドソースの並列計算アーキテクチャ及びフレームワークです。NVIDIA GPU を必要とします。CUDA は複数のコンポーネントから構成されます:
- 必須:
- プロプライエタリな NVIDIA カーネルモジュール
- CUDA "ドライバ" と "ランタイム" ライブラリ
- 任意:
- 追加のライブラリ: CUBLAS、CUFFT、CUSPARSE など
- CUDA ツールキット。
nvcc
コンパイラが含まれています。 - CUDA SDK。CUDA と OpenCL プログラムの多数のサンプルや例が含まれています。
カーネルモジュールと CUDA "ドライバ" ライブラリは nvidia と opencl-nvidia に入っています。"ランタイム" ライブラリと CUDA ツールキットの残りは cuda パッケージでインストール可能です。cuda-gdb
を使うには ncurses5-compat-libsAUR のインストールが必要です。FS#46598 を参照。
開発
cuda パッケージは全てのコンポーネントを /opt/cuda
ディレクトリにインストールします。CUDA のコードをコンパイルするには、コンパイラのインクルードパスに /opt/cuda/include
を追加してください。例えば、コンパイラのフラグやオプションに -I/opt/cuda/include
を加えることで追加できます。NVIDIA による gcc
ラッパーである nvcc
を使うには、/opt/cuda/bin
をパスに追加してください。
インストールが成功したかどうかや、CUDA が動いているかどうかを確かめるには、CUDA samples をコンパイルすることで可能です。インストールをチェックする方法の一つとして、deviceQuery
サンプルを実行するというものがあります。
言語バインディング
- Fortran: PGI CUDA Fortran Compiler
- Haskell: アクセラレートパッケージには利用可能な CUDA バックエンドがあります。
- Java: JCuda
- Mathematica: CUDAlink
- Mono/.NET: CUDAfy.NET、managedCuda
- Perl: KappaCUDA、CUDA-Minimal
- Python: python-pycuda
- Ruby: rbcuda
- Rust: cuda-sys (bindings) や RustaCUDA (高レベルなラッパ)
ROCm
ROCm (Radeon Open Compute) は、AMD のオープンソースな並列計算アーキテクチャ及びフレームワークです。これは AMD GPU を必要としますが、一部の ROCm ツールはハードウェアに依存しません。詳細は Arch Linux リポジトリ用の ROCm を見てください。
- rocm-hip-sdk: HIP と AMD プラットフォーム用のライブラリを使用するアプリケーションの開発。
- rocm-opencl-sdk: AMD プラットフォーム用の OpenCL ベースアプリケーションの開発。
HIP
Heterogeneous Interface for Portability (HIP) は、GPU ハードウェア上で高パフォーマンスなカーネルを設計するための、AMD の専用 GPU プログラミング環境です。HIP は、異なるプラットフォーム上でポータブルなアプリケーションを作成できるようにする C++ ランタイム API 及びプログラミング言語です。
- rocm-hip-runtime: ベースランタイム。AMD プラットフォーム上で HIP アプリケーションを実行するためのパッケージ群。
- hip-runtime-amd: ROCm における AMDGPU 用の Heterogeneous Interface。Polaris アーキテクチャ (RX 500 シリーズ) から AMD の最新 RDNA 2 アーキテクチャ (RX 6000 シリーズ) までの GPU をサポートします。
- miopen-hip: 起動時の遅延を軽減するためのコンパイル済み GPU カーネル
- hip-runtime-nvidiaAUR: ROCm における NVIDIA GPU 用 Heterogeneous Interface。
OpenMP
openmp-extrasAUR パッケージは AOMP (AMD GPU における OpenMP API のサポートを追加した、オープンソースの Clang/LLVM ベースコンパイラ) を提供します。
OpenCL
rocm-opencl-runtime パッケージは、OpenCL ランタイムを提供する ROCm フレームワークの一部です。
OpenCL image support
最新の ROCm バージョンには、Darktable などの GPGPU 支援のソフトウェアによって使用される OpenCL Image Support が含まれています。必要なのは AMDGPU オープンソースグラフィックドライバと ROCm だけです。AMDGPU PRO は必要ありません。
$ /opt/rocm/bin/clinfo | grep -i "image support"
Image support Yes
GPGPU のアクセラレーションがあるソフトウェア
- Bitcoin
- Blender – Nvidia GPU 向けの CUDA のサポートと AMD GPU 向けの OpenCL のサポート。詳細はこちら。
- BOINC
- FFmpeg – 詳細はこちら。
- Folding@home
- GIMP – 実験段階 – 詳細はこちら。
- HandBrake
- Hashcat
- LibreOffice Calc – 詳細はこちら。
- Mpv - Mpv#ハードウェアビデオアクセラレーション を参照。
- clinfo – システム上で利用可能な OpenCL プラットフォーム及びデバイスの可能な (既知の) 全プロパティを検出。
- cuda_memtestAUR – GPU メモリテスト。その名前とは裏腹に、CUDA と OpenCL の両方をサポートしています。
- darktable – OpenCL 機能を使うには GPU に最低でも 1GB のメモリが搭載されていて Image support が必要です (clinfo コマンドの出力で確認できます)。
- DaVinci Resolve - ノンリニア動画エディタ。OpenCL と CUDA の両方を使えます。
- imagemagick
- lc0AUR - ニューラルネットワークの検索に使います (tensorflow、OpenCL、CUDA、そして openblas に対応)。
- opencv
- pyritAUR
- python-pytorch-cuda - CUDA バックエンドの PyTorch
- tensorflow-cuda - TensorFlow の CUDA への移植
- tensorflow-computecppAUR - TensorFlow の SYCL への移植
- xmrig - High Perf CryptoNote CPU と GPU (OpenCL, CUDA) マイナー