「GPGPU」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎開発: 「お」を「の」に)
 
(4人の利用者による、間の23版が非表示)
1行目: 1行目:
 
[[Category:開発]]
 
[[Category:開発]]
[[Category:グラフィック]]
+
[[Category:グラフィック]]
 
[[en:GPGPU]]
 
[[en:GPGPU]]
  +
[[ru:GPGPU]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|NVIDIA}}
+
{{Related|Nvidia}}
 
{{Related|ハードウェアビデオアクセラレーション}}
 
{{Related|ハードウェアビデオアクセラレーション}}
 
{{Related articles end}}
 
{{Related articles end}}
GPGPU は [[Wikipedia:ja:GPGPU|General-purpose computing on graphics processing units]] の略です。
+
GPGPU は [[Wikipedia:ja:GPGPU|General-purpose computing on graphics processing units; GPUによる汎用計算]] の略です。
   
 
== OpenCL ==
 
== OpenCL ==
   
[[Wikipedia:ja:OpenCL|OpenCL]] (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。
+
[[Wikipedia:ja:OpenCL|OpenCL]] (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。
   
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API が書かれています。
+
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API について規定されています。
   
{{Tip|{{pkg|clinfo}} ユーティリティを使うことで OpenCL プラットフォームと存在するデバイス、ICD ローダのプロパティを確認できます。}}
+
{{Tip|{{pkg|clinfo}} ユーティリティを使うことで OpenCL プラットフォームと存在するデバイス、ICD ローダのプロパティを確認できます。}}
   
=== OpenCL ランタイム ===
+
=== ランタイム ===
   
OpenCL を使用するプログラムを'''実行'''するには、ハードウェアに対応したランタイムをインストールする必要があります。
+
OpenCL を使用するプログラムを'''実行'''するには、互換性のあるハードウェアランタイムをインストールする必要があります。
   
 
==== AMD/ATI ====
 
==== AMD/ATI ====
   
* {{Pkg|opencl-mesa}}: [[AMDGPU]] [[Radeon]] 用のフリなランタイム。
+
* {{Pkg|opencl-mesa}}: rusticl による mesa ドライバ用の OpenCL サポ
* {{AUR|opencl-amd}}: AMD の ubuntu リリースから再パジングされた ROCr OpenCL と legacy OpenCL (別名:orca) (ubuntu の amdgpu-install {{ic|1=opencl=rocr,legacy}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]したものと等価です)
+
* {{Pkg|rocm-opencl-runtime}}: AMD の ROCm GPU コンピュクの一部。[https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html 僅かな範囲のGPUモデル]を公式にサポトしています (他のカードは非公式に、または部分的なサポートにより動作する可能性があります)。Vega より古いカードをサポートするには、ラインタイム変数 {{ic|1=ROC_ENABLE_PRE_VEGA=1}} を設定する必要があります。これは、ubuntu の amdgpu-install {{ic|1=opencl=rocr}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]したものに似てはいますが、全く異なるものです。このパッケージの rocm バージョンは ubuntu のインストーラバージョンは異なるからです。
* {{AUR|opencl-legacy-amdgpu-pro}}: AMD の ubuntu リリースからパッケージングされた ROCr OpenCL と legacy OpenCL (別名:orca) (ubuntu の amdgpu-install {{ic|1=opencl=legacy}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]したものと等価です)
+
* {{AUR|opencl-legacy-amdgpu-pro}}: AMD の ubuntu リリースからパッケージングされたレガシーな Orca OpenCLubuntu の amdgpu-install {{ic|1=opencl=legacy}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]することと等価です。
* {{AUR|rocm-opencl-runtime}}: AMD の ROCm GPU コンピュクの一部。GFX8 およびそ以降のカード(Fiji, Polaris, Vega)を公式にサポートしますNavi10 ベースのカードは非公式・部分的なサポートがあります(ubuntu の amdgpu-install で {{ic|1=opencl=rocr}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]したものと等価です)
+
* {{AUR|opencl-amd}}、{{AUR|opencl-amd-dev}}: AMD の Ubuntu リリースから再パケージングさ ROCm コンポーネンUbuntu の amdgpu-install で {{ic|1=opencl=rocr,legacy}} を[https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/amdgpu-install.html 指定]することと等価です。
* {{AUR|amdapp-sdk}}: AMD CPU ランタイム
+
* {{AUR|amdapp-sdk}}: AMD CPU ランタイム
   
 
==== NVIDIA ====
 
==== NVIDIA ====
   
* {{Pkg|opencl-nvidia}}: 公式 [[NVIDIA]]ンタ
+
* {{Pkg|opencl-mesa}}: rusticl による mesa ドライバ向けの OpenCL サポート
  +
* {{Pkg|opencl-nvidia}}: 公式の [[NVIDIA]] ランタイム
   
 
==== Intel ====
 
==== Intel ====
   
* {{pkg|intel-compute-runtime}}: 名 Neo OpenCL ランタイム。Gen8 (Broadwell) 以降の Intel HD Graphics GPU 用のオープンソース実装。
+
* {{pkg|intel-compute-runtime}}: またの Neo OpenCL ランタイム。第12世代 (Alder Lake) 以降の Intel HD Graphics GPU 用のオープンソース実装です
  +
* {{AUR|intel-compute-runtime-legacy}}: 第11世代 (Rocket Lake) 以前のみ、上と同じ。
* {{AUR|beignet}}: Intel IvyBridge 以上の iGPU 用のオープンソース実装。古いプラットフォーム向け (例: Ivy Bridge, Sandy Bridge, Haswell)。
 
  +
* {{Pkg|opencl-mesa}}: rusticl による mesa ドライバ用の OpenCL サポート
* {{AUR|intel-opencl}}: Intel IvyBridge 以上の iGPU 用のプロプライエタリ実装。古いプラットフォーム向け (例: Ivy Bridge, Sandy Bridge, Haswell)。
 
  +
* {{AUR|beignet}}: 第7世代 (Ivy Bridge) 以降の Intel HD Graphics GPU 用のオープンソース実装。これは Intel によって非推奨となっており、NEO OpenCL ドライバが後継です。ただし、古いハードウェアプラットフォーム (例: Ivy Bridge、Haswell) においては推奨されるソリューションです。
* {{AUR|intel-opencl-runtime}}: Intel Core と Xeon プロセッサ向けの実装。Intel 製以外の CPU もサポート。
 
  +
* {{AUR|intel-opencl}}: 第7世代 (Ivy Bridge) 以降の Intel HD Graphics GPU のプロプライエタリな実装。これは Intel によって非推奨となっており、NEO OpenCL ドライバが後継です。ただし、古いハードウェアプラットフォーム (例: Ivy Bridge、Haswell) においては推奨されるソリューションです。
  +
* {{AUR|intel-opencl-runtime}}: Intel Core 及び Xeon プロセッサ用の実装。非 Intel な CPU もサポートしています。
   
 
==== その他 ====
 
==== その他 ====
   
* {{Pkg|pocl}}: LLVM ベースの OpenCL 実装(ハードウェアとは独立)
+
* {{Pkg|pocl}}: LLVM ベースの OpenCL 実装 (ハードウェアとは独立)
   
  +
Vulkan ランタイム上で OpenCL アプリケーションを実行するためのコンパイラとトランスレータがあります。
=== 32ビット OpenCL ランタイム ===
 
  +
  +
* {{AUR|clspv-git}}: Clspv は OpenCL C のサブセットから Vulkan コンピュートシェーダに変換するためのプロトタイプコンパイラです。
  +
* {{AUR|clvk-git}}: clvk は clspv をコンパイラとして使用する、Vulkan 上で動作する OpenCL 3.0 のプロトタイプ実装です。
  +
* {{AUR|xrt-bin}}: FPGA [https://github.com/Xilinx/XRT xrt] のための Xilinx Run Time
  +
* [https://github.com/intel/fpga-runtime-for-opencl fpga-runtime-for-opencl]: FPGA ランタイムs
  +
  +
=== 32ビットランタイム ===
   
 
OpenCL を使う32ビットプログラムを'''実行'''するには、互換性のあるハードウェア32ビットランタイムをインストールする必要があります。
 
OpenCL を使う32ビットプログラムを'''実行'''するには、互換性のあるハードウェア32ビットランタイムをインストールする必要があります。
   
{{Tip|{{pkg|clinfo}} ユーティリティは64ビットの OpenCL プラットフォームや存在するデバイス、ICD ローダプロパティをリストアップするためだけに使用できます。32ビットにおいては、clinfo を 32ビット向けにコンパイルするか、archlinux32 プロジェクトの32ビット版 [https://www.archlinux32.org/packages/i686/community/clinfo/ clinfo] を使う必要があります。}}
+
{{Tip|{{pkg|clinfo}} ユーティリティは64ビットの OpenCL プラットフォームや存在するデバイス、ICD ローダプロパティをリストアップするためだけに使用できます。
  +
32ビットにおいては、clinfo を 32ビット向けにコンパイルするか、archlinux32 プロジェクトの32ビット版 [https://www.archlinux32.org/packages/i686/extra/clinfo/ clinfo] を使う必要があります。}}
   
 
==== AMD/ATI ====
 
==== AMD/ATI ====
   
* {{Pkg|lib32-opencl-mesa}}: [[AMDGPU]] と [[Radeon]] (32-bit)のためのフリーなランタイム
+
* {{Pkg|lib32-opencl-mesa}}: AMD/ATI Radeon mesa ドライバの OpenCL サポート (32 ビット)
* {{AUR|lib32-opencl-legacy-amdgpu-pro}}: AMDの ubuntu リリース(32ビット)から最パッケージングされた legacy OpenCL (別名: orca)
 
   
 
==== NVIDIA ====
 
==== NVIDIA ====
   
* {{Pkg|lib32-opencl-nvidia}}: 公式[[NVIDIA]] ランタイム(32ビット)
+
* {{Pkg|lib32-opencl-nvidia}}: NVIDIA 用OpenCL 実装 (32ビット)
   
=== OpenCL ICD ローダー (libOpenCL.so) ===
+
=== ICD ローダー (libOpenCL.so) ===
   
OpenCL ICD ローダーはプラットフォームに依存しないライブラリで、OpenCL API 経由で特定のデバイスのドライバをロードするに使われます。ほとんどの OpenCL ベンダーはそれぞれ独自の OpenCL ICD ローダーを提供しており、他のベンダーの OpenCL 実装でも問題なく動作するはずです。残念ながら、大抵のベンダーは最新の ICD ローダーを提供していません。そのため、Arch Linux ではこのライブラリを別のプロジェクトから用意することで ({{Pkg|ocl-icd}}) 最新の OpenCL API の実装が機能するようにしています。
+
OpenCL ICD ローダーはプラットフォームに依存しないライブラリで、OpenCL API 経由で特定のデバイスのドライバをロードするために使われます。
  +
ほとんどの OpenCL ベンダーはそれぞれ独自の OpenCL ICD ローダーを提供しており、他のベンダーの OpenCL 実装でも問題なく動作するはずです。
  +
残念ながら、大抵のベンダーは最新の ICD ローダーを提供していません。そのため、Arch Linux ではこのライブラリを別のプロジェクト ({{Pkg|ocl-icd}}) から提供することで最新の OpenCL API の実装が機能するようにしています。
   
他の ICD ローダーライブラリは各メーカーの SDK の一部としてインストールされます。確実に {{Pkg|ocl-icd}} パッケージに含まれている ICD ローダーを使用したい場合、{{ic|/etc/ld.so.conf.d}} にファイルを作成して {{ic|/usr/lib}} を動的プログラムローダーの検索ディレクトリに追加します:
+
他の ICD ローダーライブラリは各メーカーの SDK の一部としてインストールされます。確実に {{Pkg|ocl-icd}} パッケージに含まれている ICD ローダーを使用したい場合、{{ic|/etc/ld.so.conf.d}} にファイルを作成して {{ic|/usr/lib}} を動的プログラムローダーの検索ディレクトリに追加してください:
   
{{hc|/etc/ld.so.conf.d/00-usrlib.conf|2=<nowiki>
+
{{hc|/etc/ld.so.conf.d/00-usrlib.conf|
/usr/lib</nowiki>}}
+
/usr/lib
  +
}}
   
 
全ての SDK は {{ic|ld.so.conf.d}} ファイルでランタイムのライブラリディレクトリを検索パスに追加するため上記の設定をする必要があります。
 
全ての SDK は {{ic|ld.so.conf.d}} ファイルでランタイムのライブラリディレクトリを検索パスに追加するため上記の設定をする必要があります。
   
様々な OpenCL ICD まれているパッケージ:
+
様々な OpenCL ICD む利用可能なパッケージ:
  +
* {{Pkg|ocl-icd}}: 推奨、基本的に最新です。
 
  +
* {{Pkg|ocl-icd}}: 推奨、ほぼ最新
* Intel による {{AUR|intel-opencl}}: OpenCL 2.0 を提供します。{{pkg|intel-compute-runtime}} によって廃止予定。
 
  +
* {{AUR|intel-opencl}}: Intel により提供。OpenCL 2.0 を提供します。これは非推奨となっており、後継は {{pkg|intel-compute-runtime}} です。
   
 
{{Note|ICD ローダーのベンダーの名前が出るのはローダーを識別する必要があるときだけです。他の場合、ベンダーの名前は関係ありません。ICD ローダーはベンダーに依存しないため (正しく実装されてさえいれば) 相互に交換して使うことができます。}}
 
{{Note|ICD ローダーのベンダーの名前が出るのはローダーを識別する必要があるときだけです。他の場合、ベンダーの名前は関係ありません。ICD ローダーはベンダーに依存しないため (正しく実装されてさえいれば) 相互に交換して使うことができます。}}
   
=== OpenCL 開発 ===
+
=== 開発 ===
  +
  +
OpenCL を使用して'''開発'''するには、最低でも以下のパッケージが必要です:
   
  +
* {{Pkg|ocl-icd}}: OpenCL ICD ローダ実装。最新の OpenCL 仕様に沿っています。
OpenCL を使用して'''開発'''をしたい場合、最低でも以下のパッケージが必要になります:
 
* {{Pkg|ocl-icd}}: OpenCL ICD ローダーの実装、最新の OpenCL の仕様に沿っています
+
* {{Pkg|opencl-headers}}: OpenCL C/C++ API ヘッダーファイル
* {{Pkg|opencl-headers}}: OpenCL C/C++ API ヘッダー。
 
   
 
ベンダーの SDK には様々なツールやサポートライブラリが含まれています:
 
ベンダーの SDK には様々なツールやサポートライブラリが含まれています:
  +
* {{AUR|intel-opencl-sdk}}: [https://software.intel.com/en-us/articles/opencl-sdk/ Intel の OpenCL SDK] (旧バージョン、最新の OpenCL SDK は INDE や Intel Media Server Studio に含まれています)
 
  +
* {{AUR|intel-opencl-sdk}}: [https://software.intel.com/en-us/articles/opencl-sdk/ Intel OpenCL SDK] (古いバージョン。新しい OpenCL SDK は INDE と Intel Media Server Studio に含まれています)
* {{AUR|amdapp-sdk}}: このパッケージでは {{ic|/opt/AMDAPP}} にファイルがインストールされ、SDK ファイルの他にコードサンプルが大量に同梱されています ({{ic|/opt/AMDAPP/SDK/samples/}})。システム内の OpenCL プラットフォームやデバイスを確認したり詳細情報を表示できる {{ic|clinfo}} ユーティリティが含まれています。SDK には CPU OpenCL ドライバーが含まれているため、CPU デバイスで OpenCL を実行するのに追加のドライバーは必要ありません (AMD 製じゃなくても動作します)。
 
  +
* {{AUR|amdapp-sdk}}: このパッケージにより {{ic|/opt/AMDAPP}} と SDK ファイルの一部がインストールされ、一定数のコードサンプル ({{ic|/opt/AMDAPP/SDK/samples/}}) も含まれています。また、システム内に存在する OpenCL プラットフォームとデバイスをリストアップし、それらに関する詳細な情報を表示する {{ic|clinfo}} ユーティリティも提供します。SDK 自体に CPU OpenCL ドライバが含まれているため、OpenCL を CPU デバイス上で実行するための追加のドライバは必要ありません (CPU のベンダを問わず)。
* {{Pkg|cuda}}: NVidia の GPU SDK、OpenCL 1.1 のサポートを含んでいます。
 
  +
* {{Pkg|cuda}}: OpenCL 3.0 のサポートを含む Nvidia の GPU SDK。
   
 
=== 実装 ===
 
=== 実装 ===
   
あなたの環境有効になっている OpenCL 実装を確認するには、のコマンドを使います:
+
あなたのシステム現在アクティブになっている OpenCL 実装を確認するには、以下のコマンドを使用してください:
  +
 
$ ls /etc/OpenCL/vendors
 
$ ls /etc/OpenCL/vendors
   
OpenCL プラットフォームとデバイスの利用可能な (既知の) プロパティを確認するには {{pkg|clinfo}} を[[インストール]]してください。
+
システムで利用可能な OpenCL プラットフォームとデバイスの利用可能な (既知の) プロパティを調べるには{{pkg|clinfo}} を[[インストール]]してください。
  +
  +
{{AUR|ocl-icd-choose}} を使えば、アプリケーションに参照させる実装を指定することができます。例えば:
  +
  +
$ ocl-icd-choose amdocl64.icd:mesa.icd davinci-resolve-checker
  +
  +
==== Rusticl ====
  +
  +
{{Accuracy|マニュアルに書かれてあることと異なり、OCL_ICD_VENDORS は単一の icd ファイルを処理することができないようです。https://github.com/OCL-dev/ocl-icd/issues/7#issuecomment-1522941979 を参照してください。}}
  +
  +
[https://docs.mesa3d.org/rusticl.html Rusticl] は、Rust で記述された新しい OpenCL 実装で、{{Pkg|opencl-mesa}} によって提供されています。環境変数 {{ic|1=RUSTICL_ENABLE=''driver''}} ({{ic|''driver''}} は Gallium ドライバ。{{ic|radeonsi}} や {{ic|iris}} など) を設定することで有効化できます。
  +
  +
任意で、OpenCL アプリケーションが Rusticl を検出しない場合、以下の環境変数を使用してください:
  +
  +
OCL_ICD_VENDORS=/etc/OpenCL/vendors/rusticl.icd
   
 
==== 言語バインディング ====
 
==== 言語バインディング ====
101行目: 133行目:
 
* [[Mono|Mono/.NET]]: [https://sourceforge.net/projects/opentk/ Open Toolkit]
 
* [[Mono|Mono/.NET]]: [https://sourceforge.net/projects/opentk/ Open Toolkit]
 
* [[Go]]: [https://github.com/samuel/go-opencl Go のための OpenCL バインディング]
 
* [[Go]]: [https://github.com/samuel/go-opencl Go のための OpenCL バインディング]
* '''Racket''': Racket には [http://planet.racket-lang.org/display.ss?owner=jaymccarthy&package=opencl.plt PLaneT]にネイティブのインファーフェイスが含まれています。roco を通してインストールできます。
+
* '''Racket''': Racket にはネイティブなインファーフェイス [http://planet.racket-lang.org/display.ss?owner=jaymccarthy&package=opencl.plt on PLaneT] が含まれています。roco を通してインストールできます。
 
* [[Rust]]: [https://github.com/cogciprocate/ocl ocl]
 
* [[Rust]]: [https://github.com/cogciprocate/ocl ocl]
 
* [[Julia]]: [https://github.com/JuliaGPU/OpenCL.jl OpenCL.jl]
 
* [[Julia]]: [https://github.com/JuliaGPU/OpenCL.jl OpenCL.jl]
   
==SYCL==
+
== SYCL ==
[[Wikipedia:SYCL|SYCL]] は Khronos Group によって作られたオープン・ロイヤルティフリーな標準で、OpenCL 1.2 に基づく C++ によるシングルソースのヘテロジニアスプログラミングモデルを定義しています。
 
   
  +
[[Wikipedia:SYCL]] によると:
SYCL はランタイム部分と C++ デバイスコンパイラから構成されます。デバイスコンパイラはあらゆる種類のアクセラレータを対象とします。ランタイムは OpenCL 実装が存在しない場合に CPU コードパスにフォールバックするために必要となります。
 
   
  +
: SYCL は、様々なハードウェアアクセラレータにおいてプログラミングの生産性を向上させるための高レベルなプログラミングモデルです。純粋な C++17 をベースにした、単一ソースな組み込みドメイン固有言語 (eDSL) です。
===実装===
 
  +
* {{AUR|computecpp}}: Codeplay による SYCL 1.2.1 のプロプライエタリ実装。SPIR, SPIR-V を対象とし、実験的なデバイスターゲットとして PTX (NVIDIA) にも対応。
 
  +
: SYCL は、ロイヤリティフリーでクロスプラットフォームな抽象レイヤーです。完全に標準の C++ を使って様々な種類のプロセッサ向けに "単一ソース" なスタイルでコードを記述することのできる OpenCL からインスパイアされたコンセプト、移植性、そして効率性をベースに構築されています。SYCL により、C++ のテンプレート関数をホストとデバイスの両方のコードに含めて、ハードウェアアクセラレータを使用する複雑なアルゴリズムを構築し、それらの関数をソースコード全体で異なる種類のデータで再利用できる、単一ソース開発が可能になります。
* {{AUR|trisycl-git}}: Xilinx によって開発されているオープンソースの実装。
 
  +
* {{AUR|hipsycl-cuda-git}} と {{AUR|hipsycl-rocm-git}}: OpenCL の代わりに AMD の HIP を使用するフリー実装。AMD と NVIDIA の GPU で動作可能。
 
  +
: SYCL 標準は、OpenCL ワーキンググループの高レベルプログラミングモデルサブグループとして始まり、元々は OpenCL と SPIR と合わせて使用するために開発されていましたが、2019年9月20日から SYCL は OpenCL ワーキンググループから独立した Khronos Group ワーキンググループとなり、SYCL 2020 から SYCL は他のシステムもターゲットとすることが可能なより一般的なヘテロジニアスなフレームワークに一般化されました。これは、既存のネイティブなライブラリを使用してプログラミングの労力を削減しながら最大のパフォーマンスを得るというような、任意のアクセラレーション API をターゲットとしつつターゲットの API との完全な相互運用性を可能とする汎用バックエンドというコンセプトにより可能になりました。例えば、Open SYCL 実装は AMD のクロスベンダー HIP を経由して ROCm と CUDA をターゲットとしています。
  +
  +
=== 実装 ===
  +
  +
* {{AUR|computecpp}}: Codeplay による SYCL 1.2.1 のプロプライエタリ実装。SPIR、SPIR-V、そして実験的な PTX (NVIDIA) をデバイスターゲットとして対象とすることができます (2023年9月1日でサポート終了、Intel llvm 実装にマージされる予定です [https://codeplay.com/portal/news/2023/07/07/the-future-of-computecpp 情報])。
  +
* {{AUR|trisycl-git}}: 主に Xilinx によって開発されているオープンソースの実装。
  +
* {{AUR|hipsycl-cuda-git}} と {{AUR|hipsycl-rocm-git}}{{Broken package link|package not found}}: [https://github.com/AdaptiveCpp/AdaptiveCpp AdaptiveCpp]は、AMDのhipSYCLから改名された、すべてのベンダーのCPUとGPU向けのSYCLとC++標準並列処理の実装です。
  +
* {{Pkg|intel-oneapi-dpcpp-cpp}}: Intel の Data Parallel C++: SYCL の oneAPI 実装。
  +
  +
=== SPIR サポートの確認 ===
   
===SPIR サポートの確認===
 
 
大抵の SYCL 実装はアクセラレータのコードを [[Wikipedia:Standard Portable Intermediate Representation|SPIR]] あるいは [[Wikipedia:Standard Portable Intermediate Representation|SPIR-V]] にコンパイルすることができます。どちらも Khronos によって設計された中間言語で、OpenCL ドライバーに渡すことができます。SPIR や SPIR-V に対応しているかどうか確認するには {{pkg|clinfo}} を使います:
 
大抵の SYCL 実装はアクセラレータのコードを [[Wikipedia:Standard Portable Intermediate Representation|SPIR]] あるいは [[Wikipedia:Standard Portable Intermediate Representation|SPIR-V]] にコンパイルすることができます。どちらも Khronos によって設計された中間言語で、OpenCL ドライバーに渡すことができます。SPIR や SPIR-V に対応しているかどうか確認するには {{pkg|clinfo}} を使います:
   
124行目: 164行目:
 
}}
 
}}
   
ComputeCpp にはシステム情報を表示するツールが付属しています:
+
ComputeCpp には、関連するシステム情報を要約するツールも同梱されています:
  +
 
{{hc|$ computecpp_info|
 
{{hc|$ computecpp_info|
 
Device 0:
 
Device 0:
135行目: 176行目:
   
 
}}
 
}}
  +
  +
{{Out of date|このドライバは AMD {{AUR|opencl-legacy-amdgpu-pro}} や {{AUR|opencl-amd}} 用か?}}
   
 
SPIR や SPIR-V をサポートしている既知のドライバーとして {{pkg|intel-compute-runtime}}, {{AUR|intel-opencl-runtime}}, {{Pkg|pocl}}, {{AUR|amdgpu-pro-opencl}}{{Broken package link|パッケージが存在しません}} などが存在します。
 
SPIR や SPIR-V をサポートしている既知のドライバーとして {{pkg|intel-compute-runtime}}, {{AUR|intel-opencl-runtime}}, {{Pkg|pocl}}, {{AUR|amdgpu-pro-opencl}}{{Broken package link|パッケージが存在しません}} などが存在します。
   
===SYCL 開発===
+
=== 開発 ===
  +
SYCL を使うには C++11 環境が必要です。少数ながらオープンソースのライブラリが存在します:
 
  +
SYCL は、機能する C++11 環境がセットアップされている必要があります。いくつかのオープンソースライブラリが存在します:
* [https://github.com/codeplaysoftware/computecpp-sdk/ ComputeCpp SDK]: コードサンプル集や ComputeCpp の{{Pkg|cmake}} 統合
 
  +
  +
* [https://github.com/codeplaysoftware/computecpp-sdk/ ComputeCpp SDK]: コード例集、ComputeCpp 用の {{Pkg|cmake}} 統合。
 
* [https://github.com/codeplaysoftware/SYCL-DNN SYCL-DNN]: ニューラルネットワークパフォーマンスプリミティブ
 
* [https://github.com/codeplaysoftware/SYCL-DNN SYCL-DNN]: ニューラルネットワークパフォーマンスプリミティブ
 
* [https://github.com/codeplaysoftware/SYCL-BLAS SYCL-BLAS]: 線形代数パフォーマンスプリミティブ
 
* [https://github.com/codeplaysoftware/SYCL-BLAS SYCL-BLAS]: 線形代数パフォーマンスプリミティブ
 
* [https://github.com/codeplaysoftware/visioncpp VisionCpp]: コンピュータビジョンライブラリ
 
* [https://github.com/codeplaysoftware/visioncpp VisionCpp]: コンピュータビジョンライブラリ
* [https://github.com/KhronosGroup/SyclParallelSTL SYCL Parallel STL]: C++17 並列アルゴリズムの GPU 実装
+
* [https://github.com/KhronosGroup/SyclParallelSTL SYCL Parallel STL]: C++17 並列アルゴリズムの GPU 実装
   
==CUDA==
+
== CUDA ==
  +
  +
[[Wikipedia:ja:CUDA|CUDA]] (Compute Unified Device Architecture) は、[[NVIDIA]] のプロプライエタリな、クローズドソースの並列計算アーキテクチャ及びフレームワークです。NVIDIA GPU を必要とします。CUDA は複数のコンポーネントから構成されます:
   
CUDA (Compute Unified Device Architecture) は [[NVIDIA]] による、プロプライエタリでクローズドソースの並列計算アーキテクチャ・フレームワークです。NVIDIA の GPU を必要とします。CUDA は複数のコンポーネントから構成されます:
 
 
* 必須:
 
* 必須:
** プロプライエタリ NVIDIA カーネルモジュール
+
** プロプライエタリ NVIDIA カーネルモジュール
** CUDA "driver" と "runtime" ライブラリ
+
** CUDA "ドライバ" と "ランタイム" ライブラリ
 
* 任意:
 
* 任意:
** 追加ライブラリ: CUBLAS, CUFFT, CUSPARSE など
+
** 追加ライブラリ: CUBLASCUFFTCUSPARSE など
 
** CUDA ツールキット。{{ic|nvcc}} コンパイラが含まれています。
 
** CUDA ツールキット。{{ic|nvcc}} コンパイラが含まれています。
** CUDA SDK。CUDA と OpenCL プログラムの多数のサンプルやコードが含まれています。
+
** CUDA SDK。CUDA と OpenCL プログラムの多数のサンプルやが含まれています。
  +
  +
カーネルモジュールと CUDA "ドライバ" ライブラリは {{Pkg|nvidia}} と {{Pkg|opencl-nvidia}} に入っています。"ランタイム" ライブラリと CUDA ツールキットの残りは {{Pkg|cuda}} パッケージでインストール可能です。{{ic|cuda-gdb}} を使うには {{aur|ncurses5-compat-libs}} のインストールが必要です。{{Bug|46598}} を参照。
   
  +
=== 開発 ===
カーネルモジュールと CUDA の "driver" ライブラリは {{Pkg|nvidia}} と {{Pkg|opencl-nvidia}} に入っています。"runtime" ライブラリと CUDA ツールキットは {{Pkg|cuda}} パッケージでインストール可能です。{{ic|cuda-gdb}} を使うには {{aur|ncurses5-compat-libs}} のインストールが必要です。{{Bug|46598}} を参照。
 
   
  +
{{Pkg|cuda}} パッケージは、すべてのコンポーネントを {{ic|/opt/cuda}} ディレクトリにインストールします。スクリプト {{ic|/etc/profile.d/cuda.sh}} によって、関連する環境変数が設定され、CUDA をサポートするビルドシステムが CUDA を見つけられるようになります。
===開発===
 
   
  +
インストールが成功したかどうかや、CUDA が動いているかどうかを確かめるには、[https://github.com/nvidia/cuda-samples CUDA samples] をコンパイルすることで可能です。インストールをチェックする方法の一つとして、{{ic|deviceQuery}} サンプルを実行するというものがあります。
{{Pkg|cuda}} パッケージは全てのコンポーネントを {{ic|/opt/cuda}} ディレクトリにインストールします。CUDA のコードをコンパイルするときはコンパイラのインクルードパスに {{ic|/opt/cuda/include}} を追加してください。例えばコンパイラのフラグやオプションに {{ic|-I/opt/cuda/include}} を加えることで追加できます。NVIDIA による {{ic|gcc}} ラッパーである {{ic|nvcc}} を使うには、{{ic|/opt/cuda/bin}} をパスに追加してください。
 
   
  +
=== 言語バインディング ===
{{ic|/opt/cuda/samples}} にインストールされたサンプルをコンパイルしてコンパイルされたサンプルを実行することで、インストールが成功したこと、CUDA が動作していることを確認できます (サンプルディレクトリで {{ic|make}} を実行するだけでコンパイルできます、ただし、コンパイルする前に {{ic|/opt/cuda/samples}} ディレクトリをホームディレクトリにコピーしておいた方が良いでしょう)。インストールが問題ないことを確認するときは {{ic|deviceQuery}} と呼ばれるサンプルのどれかを実行するのがふさわしいと思われます。
 
   
  +
* '''Fortran''': [https://www.pgroup.com/resources/cudafortran.htm PGI CUDA Fortran Compiler]
===言語バインディング===
 
  +
* [[Haskell]]: [https://hackage.haskell.org/package/accelerate アクセラレートパッケージ]には利用可能な CUDA バックエンドがあります。
* Fortran: [http://www.pgroup.com/resources/cudafortran.htm PGI CUDA Fortran Compiler]
 
* [[Haskell]]: [https://hackage.haskell.org/package/accelerate accelerate パッケージ] に CUDA バックエンドがあります
 
 
* [[Java]]: [http://www.jcuda.org/jcuda/JCuda.html JCuda]
 
* [[Java]]: [http://www.jcuda.org/jcuda/JCuda.html JCuda]
* [[Mathematica]]: [http://reference.wolfram.com/mathematica/CUDALink/tutorial/Overview.html CUDAlink]
+
* [[Mathematica]]: [https://reference.wolfram.com/mathematica/CUDALink/tutorial/Overview.html CUDAlink]
* [[Mono|Mono/.NET]]: [http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx CUDA.NET], [http://www.hybriddsp.com/ CUDAfy.NET]
+
* [[Mono|Mono/.NET]]: [https://github.com/rapiddev/CUDAfy.NET CUDAfy.NET][https://github.com/kunzmi/managedCuda managedCuda]
* [[Perl]]: [https://metacpan.org/pod/KappaCUDA KappaCUDA], [https://github.com/run4flat/perl-CUDA-Minimal CUDA-Minimal]
+
* [[Perl]]: [https://metacpan.org/pod/KappaCUDA KappaCUDA][https://github.com/run4flat/perl-CUDA-Minimal CUDA-Minimal]
* [[Python]]: {{pkg|python-pycuda}} または [http://psilambda.com/download/kappa-for-python Kappa]
+
* [[Python]]: {{pkg|python-pycuda}}
* [[Ruby]], Lua: [http://psilambda.com/products/kappa/ Kappa]
+
* [[Ruby]]: [https://github.com/SciRuby/rbcuda rbcuda]
  +
* [[Rust]]: [https://github.com/Rust-GPU/Rust-CUDA Rust-CUDA]。メンテナンスされていません。: [https://github.com/rust-cuda/cuda-sys cuda-sys] (bindings)、[https://github.com/bheisler/rustacuda RustaCUDA] (高レベルなラッパ)。
  +
  +
== ROCm ==
  +
  +
[https://rocm.docs.amd.com/en/latest/ ROCm] (Radeon Open Compute) は、AMD のオープンソースな並列計算アーキテクチャ及びフレームワークです。これは AMD GPU を必要としますが、一部の ROCm ツールはハードウェアに依存しません。詳細は [https://github.com/rocm-arch/rocm-arch Arch Linux リポジトリ用の ROCm] を見てください。
  +
  +
* {{Pkg|rocm-hip-sdk}}: HIP と AMD プラットフォーム用のライブラリを使用するアプリケーションの開発。
  +
* {{Pkg|rocm-opencl-sdk}}: AMD プラットフォーム用の OpenCL ベースアプリケーションの開発。
  +
  +
=== HIP ===
  +
  +
[https://rocm.docs.amd.com/projects/HIP/en/latest/ Heterogeneous Interface for Portability (HIP)] は、GPU ハードウェア上で高パフォーマンスなカーネルを設計するための、AMD の専用 GPU プログラミング環境です。HIP は、異なるプラットフォーム上でポータブルなアプリケーションを作成できるようにする C++ ランタイム API 及びプログラミング言語です。
  +
  +
* {{Pkg|rocm-hip-runtime}}: ベースランタイム。AMD プラットフォーム上で HIP アプリケーションを実行するためのパッケージ群。
  +
* {{Pkg|hip-runtime-amd}}: ROCm における AMDGPU 用の Heterogeneous Interface。Polaris アーキテクチャ (RX 500 シリーズ) から AMD の最新 RDNA 2 アーキテクチャ (RX 6000 シリーズ) までの GPU をサポートします。
  +
* {{Pkg|miopen-hip}}: HIP バックエンドを用いる、AMD のオープンソースのディープラーニングライブラリ。
  +
* {{Pkg|hip-runtime-nvidia}}: ROCm における NVIDIA GPU 用 Heterogeneous Interface。
  +
  +
{{Tip|HIP の [[Blender]] における使用に関するより多くの情報が利用可能です。}}
  +
  +
=== OpenMP ===
  +
  +
{{AUR|openmp-extras}} パッケージは [https://github.com/ROCm-Developer-Tools/aomp AOMP] (AMD GPU における OpenMP API のサポートを追加した、オープンソースの Clang/LLVM ベースコンパイラ) を提供します。
  +
  +
=== OpenCL ===
  +
  +
{{Pkg|rocm-opencl-runtime}} パッケージは、OpenCL ランタイムを提供する ROCm フレームワークの一部です。
  +
  +
==== OpenCL image support ====
  +
  +
最新の ROCm バージョンには、Darktable などの GPGPU 支援のソフトウェアによって使用される OpenCL Image Support が含まれています。必要なのは [[AMDGPU]] オープンソースグラフィックドライバと ROCm だけです。AMDGPU PRO は必要ありません。
  +
  +
{{hc|head=$ /opt/rocm/bin/clinfo {{!}} grep -i "image support"|output=
  +
Image support Yes
  +
}}
  +
  +
=== トラブルシューティング ===
  +
  +
まず、GPU が {{ic|/opt/rocm/bin/rocminfo}} ディレクトリに現れるか確認してください。現れない場合、ROCm はあなたの GPU をサポートしていないか、あなたの GPU のサポート無しでビルドされている可能性があります。
  +
  +
==== PyTorch ====
  +
  +
ROCm で PyTorch を使うには、{{Pkg|python-pytorch-rocm}} をインストールしてください。
  +
  +
{{hc|$ python -c 'import torch; print(torch.cuda.is_available())'|True}}
  +
  +
ROCm はまるで CUDA であるかのように振る舞うので、上記のコマンドは {{ic|True}} を返すはずです。{{ic|True}} を返さない場合、あなたの GPU のサポート無しで PyTorch がコンパイルされているか、依存関係の衝突が発生している可能性があります。{{ic|ldd /usr/lib/libtorch.so}} を実行してみることで、どちらの問題が発生しているか確認することができます - 欠落している {{ic|.so}} ファイルが無く、かつ同じ {{ic|.so}} ファイルに複数のバージョンが存在しない必要があります。
  +
  +
== GPGPU のアクセラレーションがあるソフトウェア ==
  +
  +
{{Expansion|もっとたくさんのアプリケーションがGPGPUをサポートしている可能性があります。}}
   
==GPGPU のアクセラレーションがあるソフトウェア==
 
 
* [[Bitcoin]]
 
* [[Bitcoin]]
* [[Blender]] - Nvidia GPU 向けの CUDA のサポートと AMD GPU 向けの OpenCL のサポート。詳細は[http://blender.org/manual/render/cycles/features.html#features こちら]。
+
* [[Blender]] Nvidia GPU 向けの CUDA のサポートと AMD GPU 向けの OpenCL のサポート。詳細は[https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html こちら]。
 
* [[BOINC]]
 
* [[BOINC]]
  +
* [[FFmpeg]] – 詳細は[https://trac.ffmpeg.org/wiki/HWAccelIntro#OpenCL こちら]。
* [[DaVinci Resolve]] - ノンリニア動画エディタ。OpenCL と CUDA の両方を使います。
 
  +
* [[Folding@home]]
* [[FFmpeg]] – 詳しくは [https://trac.ffmpeg.org/wiki/HWAccelIntro#OpenCL こちら] を参照。
 
* [[GIMP]] (実験段階 - [http://www.h-online.com/open/news/item/GIMP-2-8-RC-1-arrives-with-GPU-acceleration-1518417.html] を参照)
+
* [[GIMP]] 実験段階 詳細は[https://www.h-online.com/open/news/item/GIMP-2-8-RC-1-arrives-with-GPU-acceleration-1518417.html こちら]。
 
* [[HandBrake]]
 
* [[HandBrake]]
 
* [[Hashcat]]
 
* [[Hashcat]]
* [[LibreOffice]] Calc – [https://help.libreoffice.org/Calc/OpenCL_Options こちら] を参照
+
* [[LibreOffice]] Calc – 詳細は[https://help.libreoffice.org/Calc/OpenCL_Options こちら]。
  +
* [[mpv]] - [[mpv#ハードウェアビデオアクセラレーション]] を参照。
* {{Pkg|clinfo}} – システムの OpenCL プラットフォーム・デバイスのプロパティを確認。
 
  +
* {{Pkg|clinfo}} – システム上で利用可能な OpenCL プラットフォーム及びデバイスの可能な (既知の) 全プロパティを検出。
* {{AUR|cuda_memtest}} - GPU memtest。名前とは裏腹に、CUDA と OpenCL の両方をサポートしています。
 
  +
* {{AUR|cuda_memtest}} – GPU メモリテスト。その名前とは裏腹に、CUDA と OpenCL の両方をサポートしています。
* {{Pkg|darktable}} - OpenCL 機能を使うには GPU に最低でも 1GB のメモリが搭載されていて ''Image support'' が必要です (clinfo コマンドの出力で確認できます)。
 
  +
* {{Pkg|darktable}} – OpenCL 機能を使うには GPU に最低でも 1GB のメモリが搭載されていて ''Image support'' が必要です (clinfo コマンドの出力で確認できます)。
  +
* [[DaVinci Resolve]] - ノンリニア動画エディタ。OpenCL と CUDA の両方を使えます。
 
* {{Pkg|imagemagick}}
 
* {{Pkg|imagemagick}}
* {{AUR|lc0}} - ニューラルネットワークの検索に使います (tensorflow, OpenCL, CUDA, openblas に対応)。
+
* {{AUR|lc0}} - ニューラルネットワークの検索に使います (tensorflowOpenCLCUDA、そして openblas に対応)。
 
* {{Pkg|opencv}}
 
* {{Pkg|opencv}}
* {{Pkg|pyrit}}
+
* {{AUR|pyrit}}
* {{Pkg|tensorflow-cuda}} および {{Pkg|tensorflow-opt-cuda}} - TensorFlowCUDA 移植
+
* {{Pkg|python-pytorch-cuda}} - CUDA バックエンドPyTorch
* {{AUR|tensorflow-computecpp}} - TensorFlow の SYCL 移植
+
* {{Pkg|tensorflow-cuda}} - TensorFlow の CUDA への移植
  +
* {{AUR|tensorflow-computecpp}} - TensorFlow の SYCL への移植
  +
* {{Pkg|xmrig}} - High Perf CryptoNote CPU と GPU (OpenCL, CUDA) マイナー
   
==参照==
+
== 参照 ==
  +
* [http://www.khronos.org/opencl/ OpenCL 公式ホームページ]
 
  +
* [https://www.khronos.org/opencl/ OpenCL 公式ホームページ]
 
* [https://www.khronos.org/sycl/ SYCL 公式ホームページ]
 
* [https://www.khronos.org/sycl/ SYCL 公式ホームページ]
 
* [https://www.khronos.org/spir/ SPIR 公式ホームページ]
 
* [https://www.khronos.org/spir/ SPIR 公式ホームページ]
* [https://www.nvidia.com/object/cuda_home_new.html CUDA 公式ホームページ]
 
* [http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt ICD 拡張仕様]
 
* [http://developer.amd.com/appsdk AMD APP SDK ホームページ]
 
 
* [https://developer.nvidia.com/cuda-toolkit CUDA Toolkit ホームページ]
 
* [https://developer.nvidia.com/cuda-toolkit CUDA Toolkit ホームページ]
* [https://software.intel.com/en-us/intel-opencl Intel OpenCL SDK ホームページ]
+
* [https://software.intel.com/en-us/intel-opencl Intel SDK for OpenCL Applications ホームページ]
 
* [https://developer.codeplay.com/home/ ComputeCpp 公式ホームページ]
 
* [https://developer.codeplay.com/home/ ComputeCpp 公式ホームページ]
  +
* [https://gitlab.com/illwieckz/i-love-compute 異なる GPU 用に利用可能な OpenCL フレームワークのリスト]
  +
  +
{{TranslationStatus|GPGPU|2025-06-05|837001}}

2025年10月9日 (木) 15:34時点における最新版

関連記事

GPGPU は General-purpose computing on graphics processing units; GPUによる汎用計算 の略です。

OpenCL

OpenCL (Open Computing Language) は、非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。

OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API について規定されています。

ヒント: clinfo ユーティリティを使うことで OpenCL プラットフォームと存在するデバイス、ICD ローダのプロパティを確認できます。

ランタイム

OpenCL を使用するプログラムを実行するには、互換性のあるハードウェアランタイムをインストールする必要があります。

AMD/ATI

  • opencl-mesa: rusticl による mesa ドライバ用の OpenCL サポート
  • rocm-opencl-runtime: AMD の ROCm GPU コンピュートスタックの一部。僅かな範囲のGPUモデルを公式にサポートしています (他のカードは非公式に、または部分的なサポートにより動作する可能性があります)。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-amdAURopencl-amd-devAUR: AMD の Ubuntu リリースから再パッケージングされた ROCm コンポーネント群。Ubuntu の amdgpu-install で opencl=rocr,legacy指定することと等価です。
  • amdapp-sdkAUR: AMD CPU ランタイム

NVIDIA

Intel

  • intel-compute-runtime: またの名を Neo OpenCL ランタイム。第12世代 (Alder Lake) 以降の Intel HD Graphics GPU 用のオープンソース実装です。
  • intel-compute-runtime-legacyAUR: 第11世代 (Rocket Lake) 以前のみ、上と同じ。
  • opencl-mesa: 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-gitAUR: clvk は clspv をコンパイラとして使用する、Vulkan 上で動作する OpenCL 3.0 のプロトタイプ実装です。
  • xrt-binAUR: FPGA xrt のための Xilinx Run Time
  • fpga-runtime-for-opencl: FPGA ランタイムs

32ビットランタイム

OpenCL を使う32ビットプログラムを実行するには、互換性のあるハードウェア32ビットランタイムをインストールする必要があります。

ヒント: clinfo ユーティリティは64ビットの OpenCL プラットフォームや存在するデバイス、ICD ローダプロパティをリストアップするためだけに使用できます。 32ビットにおいては、clinfo を 32ビット向けにコンパイルするか、archlinux32 プロジェクトの32ビット版 clinfo を使う必要があります。

AMD/ATI

  • lib32-opencl-mesa: AMD/ATI Radeon mesa ドライバの OpenCL サポート (32 ビット)

NVIDIA

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 を含む利用可能なパッケージは:

ノート: ICD ローダーのベンダーの名前が出るのはローダーを識別する必要があるときだけです。他の場合、ベンダーの名前は関係ありません。ICD ローダーはベンダーに依存しないため (正しく実装されてさえいれば) 相互に交換して使うことができます。

開発

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 3.0 のサポートを含む Nvidia の GPU SDK。

実装

あなたのシステムで現在アクティブになっている OpenCL 実装を確認するには、以下のコマンドを使用してください:

$ ls /etc/OpenCL/vendors

システムで利用可能な OpenCL プラットフォームとデバイスの利用可能な (既知の) 全プロパティを調べるには、clinfoインストールしてください。

ocl-icd-chooseAUR を使えば、アプリケーションに参照させる実装を指定することができます。例えば:

$ ocl-icd-choose amdocl64.icd:mesa.icd davinci-resolve-checker

Rusticl

この記事またはセクションの正確性には問題があります。
理由: マニュアルに書かれてあることと異なり、OCL_ICD_VENDORS は単一の icd ファイルを処理することができないようです。https://github.com/OCL-dev/ocl-icd/issues/7#issuecomment-1522941979 を参照してください。 (議論: トーク:GPGPU#)

Rusticl は、Rust で記述された新しい OpenCL 実装で、opencl-mesa によって提供されています。環境変数 RUSTICL_ENABLE=driver (driver は Gallium ドライバ。radeonsiiris など) を設定することで有効化できます。

任意で、OpenCL アプリケーションが Rusticl を検出しない場合、以下の環境変数を使用してください:

OCL_ICD_VENDORS=/etc/OpenCL/vendors/rusticl.icd

言語バインディング

SYCL

Wikipedia:SYCL によると:

SYCL は、様々なハードウェアアクセラレータにおいてプログラミングの生産性を向上させるための高レベルなプログラミングモデルです。純粋な C++17 をベースにした、単一ソースな組み込みドメイン固有言語 (eDSL) です。
SYCL は、ロイヤリティフリーでクロスプラットフォームな抽象レイヤーです。完全に標準の C++ を使って様々な種類のプロセッサ向けに "単一ソース" なスタイルでコードを記述することのできる OpenCL からインスパイアされたコンセプト、移植性、そして効率性をベースに構築されています。SYCL により、C++ のテンプレート関数をホストとデバイスの両方のコードに含めて、ハードウェアアクセラレータを使用する複雑なアルゴリズムを構築し、それらの関数をソースコード全体で異なる種類のデータで再利用できる、単一ソース開発が可能になります。
SYCL 標準は、OpenCL ワーキンググループの高レベルプログラミングモデルサブグループとして始まり、元々は OpenCL と SPIR と合わせて使用するために開発されていましたが、2019年9月20日から SYCL は OpenCL ワーキンググループから独立した Khronos Group ワーキンググループとなり、SYCL 2020 から SYCL は他のシステムもターゲットとすることが可能なより一般的なヘテロジニアスなフレームワークに一般化されました。これは、既存のネイティブなライブラリを使用してプログラミングの労力を削減しながら最大のパフォーマンスを得るというような、任意のアクセラレーション API をターゲットとしつつターゲットの API との完全な相互運用性を可能とする汎用バックエンドというコンセプトにより可能になりました。例えば、Open SYCL 実装は AMD のクロスベンダー HIP を経由して ROCm と CUDA をターゲットとしています。

実装

  • computecppAUR: Codeplay による SYCL 1.2.1 のプロプライエタリ実装。SPIR、SPIR-V、そして実験的な PTX (NVIDIA) をデバイスターゲットとして対象とすることができます (2023年9月1日でサポート終了、Intel llvm 実装にマージされる予定です 情報)。
  • trisycl-gitAUR: 主に Xilinx によって開発されているオープンソースの実装。
  • hipsycl-cuda-gitAURhipsycl-rocm-gitAUR[リンク切れ: package not found]: AdaptiveCppは、AMDのhipSYCLから改名された、すべてのベンダーのCPUとGPU向けのSYCLとC++標準並列処理の実装です。
  • intel-oneapi-dpcpp-cpp: Intel の Data Parallel C++: SYCL の oneAPI 実装。

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 

この記事またはセクションは情報が古くなっています。
理由: このドライバは AMD opencl-legacy-amdgpu-proAURopencl-amdAUR 用か? (Discuss)

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 "ドライバ" ライブラリは nvidiaopencl-nvidia に入っています。"ランタイム" ライブラリと CUDA ツールキットの残りは cuda パッケージでインストール可能です。cuda-gdb を使うには ncurses5-compat-libsAUR のインストールが必要です。FS#46598 を参照。

開発

cuda パッケージは、すべてのコンポーネントを /opt/cuda ディレクトリにインストールします。スクリプト /etc/profile.d/cuda.sh によって、関連する環境変数が設定され、CUDA をサポートするビルドシステムが CUDA を見つけられるようになります。

インストールが成功したかどうかや、CUDA が動いているかどうかを確かめるには、CUDA samples をコンパイルすることで可能です。インストールをチェックする方法の一つとして、deviceQuery サンプルを実行するというものがあります。

言語バインディング

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: HIP バックエンドを用いる、AMD のオープンソースのディープラーニングライブラリ。
  • hip-runtime-nvidia: ROCm における NVIDIA GPU 用 Heterogeneous Interface。
ヒント: HIP の Blender における使用に関するより多くの情報が利用可能です。

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

トラブルシューティング

まず、GPU が /opt/rocm/bin/rocminfo ディレクトリに現れるか確認してください。現れない場合、ROCm はあなたの GPU をサポートしていないか、あなたの GPU のサポート無しでビルドされている可能性があります。

PyTorch

ROCm で PyTorch を使うには、python-pytorch-rocm をインストールしてください。

$ python -c 'import torch; print(torch.cuda.is_available())'
True

ROCm はまるで CUDA であるかのように振る舞うので、上記のコマンドは True を返すはずです。True を返さない場合、あなたの GPU のサポート無しで PyTorch がコンパイルされているか、依存関係の衝突が発生している可能性があります。ldd /usr/lib/libtorch.so を実行してみることで、どちらの問題が発生しているか確認することができます - 欠落している .so ファイルが無く、かつ同じ .so ファイルに複数のバージョンが存在しない必要があります。

GPGPU のアクセラレーションがあるソフトウェア

この記事またはセクションは加筆を必要としています。
理由: もっとたくさんのアプリケーションがGPGPUをサポートしている可能性があります。 (議論: トーク:GPGPU#)

参照

翻訳ステータス: このページは en:GPGPU の翻訳バージョンです。最後の翻訳日は 2025-06-05 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。