「GPGPU」の版間の差分
細 (tensorflow-opt-cuda パッケージ追加→GPGPU のアクセラレーションがあるソフトウェア) |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
||
(4人の利用者による、間の26版が非表示) | |||
1行目: | 1行目: | ||
[[Category:開発]] |
[[Category:開発]] |
||
− | [[Category:グラフィック]] |
+ | [[Category:グラフィックス]] |
[[en:GPGPU]] |
[[en:GPGPU]] |
||
+ | [[ru:GPGPU]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related| |
+ | {{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 == |
− | OpenCL (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。 |
+ | [[Wikipedia:ja:OpenCL|OpenCL]] (Open Computing Language) は、非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。 |
− | OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマ |
+ | OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API について規定されています。 |
− | {{Tip|{{pkg|clinfo}} ユーティリティを使うことで OpenCL プラットフォームと存在するデバイス、ICD ローダ |
+ | {{Tip|{{pkg|clinfo}} ユーティリティを使うことで OpenCL プラットフォームと存在するデバイス、ICD ローダのプロパティを確認できます。}} |
− | === |
+ | === ランタイム === |
− | OpenCL を使用するプログラムを実行するには、ハードウェアに対応したランタイムをインストールする必要があります。 |
||
+ | OpenCL を使用するプログラムを'''実行'''するには、互換性のあるハードウェアランタイムをインストールする必要があります。 |
||
− | ====AMD/ATI==== |
||
− | * {{Pkg|opencl-mesa}}: [[AMDGPU]] と [[Radeon]] 用のフリーなランタイム。 |
||
− | * {{AUR|opencl-amd}}: [[AMDGPU]] 用のプロプライエタリなスタンドアロンのランタイム。 |
||
− | * {{AUR|rocm-opencl-runtime}}: AMD の完全なオープンソースの ROCm GPU 計算スタックに含まれます。GFX8 以降のカードに対応 (Fiji, Polaris, Vega)。 |
||
− | * {{AUR|opencl-amdgpu-pro-orca}}: [[AMDGPU PRO]] 用のプロプライエタリなランタイム (Vega 10 よりも古い製品をサポート)。 |
||
− | * {{AUR|opencl-amdgpu-pro-pal}}: [[AMDGPU PRO]] 用のプロプライエタリなランタイム (Vega 10 以降の新しい製品をサポート)。 |
||
− | * {{AUR|opencl-catalyst}}: AMD のプロプライエタリなランタイム。[[AMDGPU]] に取って代わられる予定です。 |
||
− | * {{AUR|amdapp-sdk}}: AMD CPU ランタイム。 |
||
− | ==== |
+ | ==== AMD/ATI ==== |
− | * {{Pkg|opencl-nvidia}}: 公式 [[NVIDIA]] ランタイム。 |
||
+ | * {{Pkg|opencl-clover-mesa}} または {{Pkg|opencl-rusticl-mesa}}: clover と rusticl による mesa ドライバ用の OpenCL サポート |
||
− | ====Intel==== |
||
+ | * {{Pkg|rocm-opencl-runtime}}: AMD の ROCm GPU コンピュートスタックの一部。GFX8 およびそれ以降のカード (Fiji, Polaris, Vega) を公式にサポートしており、Navi10 ベースのカードは非公式で部分的なサポートがあります。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 のインストーラバージョンとは異なるからです。 |
||
− | * {{pkg|intel-compute-runtime}}: 別名 Neo OpenCL ランタイム。Gen8 (Broadwell) 以降の Intel HD Graphics GPU 用のオープンソース実装。 |
||
+ | * {{AUR|opencl-legacy-amdgpu-pro}}: AMD の ubuntu リリースから再パッケージングされたレガシーな Orca OpenCL。ubuntu の amdgpu-install に {{ic|1=opencl=legacy}} を[https://amdgpu-install.readthedocs.io/en/latest/install-script.html#specifying-an-opencl-implementation 指定]することと等価です。 |
||
− | * {{pkg|beignet}}: Intel IvyBridge 以上の iGPU 用のオープンソース実装。古いプラットフォーム向け (例: Ivy Bridge, Sandy Bridge, Haswell)。 |
||
+ | * {{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|intel-opencl}}: Intel IvyBridge 以上の iGPU 用のプロプライエタリ実装。古いプラットフォーム向け (例: Ivy Bridge, Sandy Bridge, Haswell)。 |
||
+ | * {{AUR|amdapp-sdk}}: AMD CPU ランタイム |
||
− | * {{AUR|intel-opencl-runtime}}: Intel Core と Xeon プロセッサ向けの実装。Intel 製以外の CPU もサポート。 |
||
− | ==== |
+ | ==== NVIDIA ==== |
− | * {{AUR|pocl}}: LLVM ベースの OpenCL 実装。 |
||
+ | * {{Pkg|opencl-clover-mesa}} または {{Pkg|opencl-rusticl-mesa}}: clover と rusticl による mesa ドライバ向けの OpenCL サポート。 |
||
− | ===OpenCL ICD ローダー (libOpenCL.so)=== |
||
+ | * {{Pkg|opencl-nvidia}}: 公式の [[NVIDIA]] ランタイム |
||
+ | ==== Intel ==== |
||
− | OpenCL ICD ローダーはプラットフォームに依存しないライブラリで、OpenCL API 経由で特定のデバイスのドライバーをロードするのに使われます。ほとんどの OpenCL ベンダーはそれぞれ独自の OpenCL ICD ローダーを提供しており、他のベンダーの OpenCL 実装でも問題なく動作するはずです。残念ながら、大抵のベンダーは最新の ICD ローダーを提供していません。そのため、Arch Linux ではこのライブラリを別のプロジェクトから用意することで ({{Pkg|ocl-icd}}) 最新の OpenCL API の実装が機能するようにしています。 |
||
+ | * {{pkg|intel-compute-runtime}}: またの名を Neo OpenCL ランタイム。第8世代 (Broadwell) 以降の Intel HD Graphics GPU 用のオープンソース実装です。 |
||
− | 他の ICD ローダーライブラリは各メーカーの SDK の一部としてインストールされます。確実に {{Pkg|ocl-icd}} パッケージに含まれている ICD ローダーを使用したい場合、{{ic|/etc/ld.so.conf.d}} にファイルを作成して {{ic|/usr/lib}} を動的プログラムローダーの検索ディレクトリに追加します: |
||
+ | * {{Pkg|opencl-clover-mesa}} または {{Pkg|opencl-rusticl-mesa}}: clover と rusticl による mesa ドライバ用の OpenCL サポート |
||
+ | * {{AUR|beignet}}: 第7世代 (Ivy Bridge) 以降の Intel HD Graphics GPU 用のオープンソース実装。これは Intel によって非推奨となっており、NEO OpenCL ドライバが後継です。ただし、古いハードウェアプラットフォーム (例: Ivy Bridge、Haswell) においては推奨されるソリューションです。 |
||
+ | * {{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 もサポートしています。 |
||
+ | ==== その他 ==== |
||
− | {{hc|/etc/ld.so.conf.d/00-usrlib.conf|2=<nowiki> |
||
+ | |||
− | /usr/lib</nowiki>}} |
||
+ | * {{Pkg|pocl}}: LLVM ベースの OpenCL 実装 (ハードウェアとは独立) |
||
+ | |||
+ | Vulkan ランタイム上で 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ビットランタイムをインストールする必要があります。 |
||
+ | |||
+ | {{Tip|{{pkg|clinfo}} ユーティリティは64ビットの OpenCL プラットフォームや存在するデバイス、ICD ローダプロパティをリストアップするためだけに使用できます。 |
||
+ | 32ビットにおいては、clinfo を 32ビット向けにコンパイルするか、archlinux32 プロジェクトの32ビット版 [https://www.archlinux32.org/packages/i686/extra/clinfo/ clinfo] を使う必要があります。}} |
||
+ | |||
+ | ==== AMD/ATI ==== |
||
+ | |||
+ | * {{Pkg|lib32-opencl-clover-mesa}} または {{Pkg|lib32-opencl-rusticl-mesa}}: AMD/ATI Radeon mesa ドライバの OpenCL サポート (32 ビット) |
||
+ | |||
+ | ==== NVIDIA ==== |
||
+ | |||
+ | * {{Pkg|lib32-opencl-nvidia}}: NVIDIA 用の OpenCL 実装 (32ビット) |
||
+ | |||
+ | === ICD ローダー (libOpenCL.so) === |
||
+ | |||
+ | 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}} を動的プログラムローダーの検索ディレクトリに追加してください: |
||
+ | |||
+ | {{hc|/etc/ld.so.conf.d/00-usrlib.conf| |
||
+ | /usr/lib |
||
+ | }} |
||
全ての SDK は {{ic|ld.so.conf.d}} ファイルでランタイムのライブラリディレクトリを検索パスに追加するため上記の設定をする必要があります。 |
全ての SDK は {{ic|ld.so.conf.d}} ファイルでランタイムのライブラリディレクトリを検索パスに追加するため上記の設定をする必要があります。 |
||
− | 様々な OpenCL ICD |
+ | 様々な OpenCL ICD を含む利用可能なパッケージは: |
+ | |||
− | * {{Pkg|ocl-icd}}: 推奨、基本的に最新です。 |
||
+ | * {{Pkg|ocl-icd}}: 推奨、ほぼ最新 |
||
− | * AMD による {{AUR|libopencl}}: OpenCL のバージョン 2.0 を提供します。目下 AMD によって制限的なライセンスで配布されているため、公式リポジトリに入れることはできません。 |
||
− | * |
+ | * {{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 の仕様に沿っています。 |
||
+ | |||
− | * {{Pkg|opencl-headers}}: OpenCL C/C++ API ヘッダー。 |
||
+ | * {{Pkg|ocl-icd}}: OpenCL ICD ローダ実装。最新の OpenCL 仕様に沿っています。 |
||
+ | * {{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|amdapp-sdk}}: このパッケージでは {{ic|/opt/AMDAPP}} にファイルがインストールされ、SDK ファイルの他にコードサンプルが大量に同梱されています ({{ic|/opt/AMDAPP/SDK/samples/}})。システム内の OpenCL プラットフォームやデバイスを確認したり詳細情報を表示できる {{ic|clinfo}} ユーティリティが含まれています。[http://developer.amd.com/sdks/AMDAPPSDK/Pages/default.aspx AMD APP SDK] には CPU OpenCL ドライバーが含まれているため、CPU デバイスで OpenCL を実行するのに追加のドライバーは必要ありません (AMD 製じゃなくても動作します)。GPU の OpenCL ドライバーは {{AUR|catalyst}} パッケージに入っています。 |
||
− | * {{Pkg|cuda}}: NVidia の GPU SDK、OpenCL 1.1 のサポートを含んでいます。 |
||
+ | * {{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 ドライバが含まれているため、OpenCL を CPU デバイス上で実行するための追加のドライバは必要ありません (CPU のベンダを問わず)。 |
||
− | あなたの環境で有効になっている OpenCL 実装を確認するには、次のコマンドを使います: |
||
+ | * {{Pkg|cuda}}: OpenCL 3.0 のサポートを含む Nvidia の GPU SDK。 |
||
+ | |||
+ | === 実装 === |
||
+ | |||
+ | あなたのシステムで現在アクティブになっている OpenCL 実装を確認するには、以下のコマンドを使用してください: |
||
+ | |||
$ ls /etc/OpenCL/vendors |
$ ls /etc/OpenCL/vendors |
||
− | OpenCL プラットフォームとデバイスの利用可能な (既知の) プロパティを |
+ | システムで利用可能な OpenCL プラットフォームとデバイスの利用可能な (既知の) 全プロパティを調べるには、{{pkg|clinfo}} を[[インストール]]してください。 |
+ | {{AUR|ocl-icd-choose}} を使えば、アプリケーションに参照させる実装を指定することができます。例えば: |
||
− | ====言語バインディング==== |
||
+ | |||
− | * C++: Khronos によるバインディングが公式の仕様書 (バージョン 1.2) に存在します。{{Pkg|opencl-headers}} に含まれています。 |
||
+ | $ ocl-icd-choose amdocl64.icd:mesa.icd davinci-resolve-checker |
||
− | * C++/Qt: Qt Labs に [http://qt.gitorious.org/qt-labs/opencl QtOpenCL] という名前の実験的なバインディングがあります - 詳しくは [http://labs.qt.nokia.com/2010/04/07/using-opencl-with-qt/ ブログエントリ] を参照 |
||
+ | |||
− | * JavaScript/HTML5: [http://www.khronos.org/webcl/ WebCL] |
||
+ | ==== Rusticl ==== |
||
− | * [[Python]]: PyOpenCL という同じ名前を持った2つのバインディングが存在します。片方は [extra] に入っています: {{pkg|python-pyopencl}}。もう片方については [https://sourceforge.net/projects/pyopencl/ sourceforge] を見て下さい。 |
||
+ | |||
− | * [[D]]: [https://bitbucket.org/trass3r/cl4d/wiki/Home cl4d] |
||
+ | {{Accuracy|マニュアルに書かれてあることと異なり、OCL_ICD_VENDORS は単一の icd ファイルを処理することができないようです。https://github.com/OCL-dev/ocl-icd/issues/7#issuecomment-1522941979 を参照してください。}} |
||
− | * [[Java]]: [http://jogamp.org/jocl/www/ JOCL] ([http://jogamp.org/ JogAmp] の一部) |
||
+ | |||
+ | [https://docs.mesa3d.org/rusticl.html Rusticl] は、Rust で記述された新しい OpenCL 実装で、{{Pkg|opencl-rusticl-mesa}} によって提供されています。環境変数 {{ic|1=RUSTICL_ENABLE=''driver''}} ({{ic|''driver''}} は Gallium ドライバ。{{ic|radeonsi}} や {{ic|iris}} など) を設定することで有効化できます。 |
||
+ | |||
+ | 任意で、OpenCL アプリケーションが Rusticl を検出しない場合、以下の環境変数を使用してください: |
||
+ | |||
+ | OCL_ICD_VENDORS=/etc/OpenCL/vendors/rusticl.icd |
||
+ | |||
+ | ==== 言語バインディング ==== |
||
+ | |||
+ | * '''JavaScript/HTML5''': [https://www.khronos.org/webcl/ WebCL] |
||
+ | * [[Python]]: {{pkg|python-pyopencl}} |
||
+ | * [[D]]: [https://github.com/Trass3r/cl4d cl4d] や [https://github.com/libmir/dcompute DCompute] |
||
+ | * [[Java]]: [https://git.qoto.org/aparapi/aparapi Aparapi] や [https://jogamp.org/jocl/www/ JOCL] ([https://jogamp.org/ JogAmp] の一部) |
||
* [[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]]: [https://github.com/samuel/go-opencl Go のための OpenCL バインディング] |
− | * Racket: |
+ | * '''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 によって開発されているオープンソースの実装。 |
||
+ | |||
+ | : 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}}: OpenCL の代わりに AMD の HIP を使用するフリー実装。AMD と NVIDIA の GPU で動作可能。 |
* {{AUR|hipsycl-cuda-git}} と {{AUR|hipsycl-rocm-git}}: OpenCL の代わりに AMD の HIP を使用するフリー実装。AMD と NVIDIA の GPU で動作可能。 |
||
+ | * {{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}} を使います: |
||
107行目: | 163行目: | ||
}} |
}} |
||
− | ComputeCpp にはシステム情報を |
+ | ComputeCpp には、関連するシステム情報を要約するツールも同梱されています: |
+ | |||
{{hc|$ computecpp_info| |
{{hc|$ computecpp_info| |
||
Device 0: |
Device 0: |
||
119行目: | 176行目: | ||
}} |
}} |
||
+ | {{Out of date|このドライバは AMD {{AUR|opencl-legacy-amdgpu-pro}} や {{AUR|opencl-amd}} 用か?}} |
||
− | SPIR や SPIR-V をサポートしている既知のドライバーとして {{pkg|intel-compute-runtime}}, {{AUR|intel-opencl-runtime}}, {{AUR|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 環境が必要です。少数ながらオープンソースのライブラリが存在します: |
||
+ | === 開発 === |
||
− | * [https://github.com/codeplaysoftware/computecpp-sdk/ ComputeCpp SDK]: コードサンプル集や ComputeCpp の{{Pkg|cmake}} 統合 |
||
+ | |||
+ | SYCL は、機能する C++11 環境がセットアップされている必要があります。いくつかのオープンソースライブラリが存在します: |
||
+ | |||
+ | * [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 並列アルゴリズム |
+ | * [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 カーネルモジュール |
− | ** CUDA " |
+ | ** CUDA "ドライバ" と "ランタイム" ライブラリ |
* 任意: |
* 任意: |
||
− | ** 追加ライブラリ: CUBLAS |
+ | ** 追加のライブラリ: CUBLAS、CUFFT、CUSPARSE など |
** CUDA ツールキット。{{ic|nvcc}} コンパイラが含まれています。 |
** CUDA ツールキット。{{ic|nvcc}} コンパイラが含まれています。 |
||
− | ** CUDA SDK。CUDA と OpenCL |
+ | ** CUDA SDK。CUDA と OpenCL プログラムの多数のサンプルや例が含まれています。 |
− | カーネルモジュールと CUDA |
+ | カーネルモジュールと CUDA "ドライバ" ライブラリは {{Pkg|nvidia}} と {{Pkg|opencl-nvidia}} に入っています。"ランタイム" ライブラリと CUDA ツールキットの残りは {{Pkg|cuda}} パッケージでインストール可能です。{{ic|cuda-gdb}} を使うには {{aur|ncurses5-compat-libs}} のインストールが必要です。{{Bug|46598}} を参照。 |
− | ===開発=== |
+ | === 開発 === |
− | {{Pkg|cuda}} パッケージは |
+ | {{Pkg|cuda}} パッケージは、すべてのコンポーネントを {{ic|/opt/cuda}} ディレクトリにインストールします。スクリプト {{ic|/etc/profile.d/cuda.sh}} によって、関連する環境変数が設定され、CUDA をサポートするビルドシステムが CUDA を見つけられるようになります。 |
− | + | インストールが成功したかどうかや、CUDA が動いているかどうかを確かめるには、[https://github.com/nvidia/cuda-samples CUDA samples] をコンパイルすることで可能です。インストールをチェックする方法の一つとして、{{ic|deviceQuery}} サンプルを実行するというものがあります。 |
|
− | ===言語バインディング=== |
+ | === 言語バインディング === |
+ | |||
− | * Fortran: [http://www.pgroup.com/resources/cudafortran.htm PGI CUDA Fortran Compiler] |
||
+ | * '''Fortran''': [https://www.pgroup.com/resources/cudafortran.htm PGI CUDA Fortran Compiler] |
||
− | * [[Haskell]]: [https://hackage.haskell.org/package/accelerate accelerate パッケージ] に CUDA バックエンドがあります |
||
+ | * [[Haskell]]: [https://hackage.haskell.org/package/accelerate アクセラレートパッケージ]には利用可能な CUDA バックエンドがあります。 |
||
* [[Java]]: [http://www.jcuda.org/jcuda/JCuda.html JCuda] |
* [[Java]]: [http://www.jcuda.org/jcuda/JCuda.html JCuda] |
||
− | * [[Mathematica]]: [ |
+ | * [[Mathematica]]: [https://reference.wolfram.com/mathematica/CUDALink/tutorial/Overview.html CUDAlink] |
− | * [[Mono|Mono/.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] |
+ | * [[Perl]]: [https://metacpan.org/pod/KappaCUDA KappaCUDA]、[https://github.com/run4flat/perl-CUDA-Minimal CUDA-Minimal] |
− | * [[Python]]: {{pkg|python-pycuda}} |
+ | * [[Python]]: {{pkg|python-pycuda}} |
− | * [[Ruby]] |
+ | * [[Ruby]]: [https://github.com/SciRuby/rbcuda rbcuda] |
+ | * [[Rust]]: [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 のオープンソースのディープラーニングライブラリ。 |
||
+ | * {{AUR|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 のサポート無しでビルドされている可能性があります。 |
||
+ | |||
+ | ==== Vega10 GPU ==== |
||
+ | |||
+ | MI25 (及びその他の gfx900 GPU) は非推奨となっており、公式のサポートは終了しました。これらの GPU は公式には ROCm 4 ではサポートされており、ROCm 5 では非公式ですがサポートされています。ROCm 6 ではサポートされていません。 |
||
+ | |||
+ | ROCm 5.7.1 のインストールガイドは [[AMD Radeon Instinct MI25#ROCm]] を見てください。。 |
||
+ | |||
+ | ==== 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 のアクセラレーションがあるソフトウェア == |
||
− | ==GPGPU のアクセラレーションがあるソフトウェア== |
||
* [[Bitcoin]] |
* [[Bitcoin]] |
||
− | * [[Blender]] |
+ | * [[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]] |
+ | * [[GIMP]] – 実験段階 – 詳細は[http://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 |
+ | * {{AUR|lc0}} - ニューラルネットワークの検索に使います (tensorflow、OpenCL、CUDA、そして openblas に対応)。 |
* {{Pkg|opencv}} |
* {{Pkg|opencv}} |
||
− | * {{ |
+ | * {{AUR|pyrit}} |
− | * {{Pkg| |
+ | * {{Pkg|python-pytorch-cuda}} - CUDA バックエンドの PyTorch |
− | * {{ |
+ | * {{Pkg|tensorflow-cuda}} - TensorFlow の CUDA への移植 |
+ | * {{AUR|tensorflow-computecpp}} - TensorFlow の SYCL への移植 |
||
+ | * {{AUR|whisper.cpp-clblas}}、{{AUR|whisper.cpp-cublas}} - OpenCL と CUDA の最適化が施された、OpenAI の Whisper モデルの C/C++ の移植。 |
||
+ | * {{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 |
+ | * [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|2024-07-02|811512}} |
2024年9月3日 (火) 22:37時点における最新版
関連記事
GPGPU は General-purpose computing on graphics processing units; GPUによる汎用計算 の略です。
OpenCL
OpenCL (Open Computing Language) は、非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマがこの環境で呼び出せる C API について規定されています。
ランタイム
OpenCL を使用するプログラムを実行するには、互換性のあるハードウェアランタイムをインストールする必要があります。
AMD/ATI
- opencl-clover-mesa または opencl-rusticl-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 リリースから再パッケージングされた ROCm コンポーネント群。Ubuntu の amdgpu-install で
opencl=rocr,legacy
を指定することと等価です。 - amdapp-sdkAUR: AMD CPU ランタイム
NVIDIA
- opencl-clover-mesa または opencl-rusticl-mesa: clover と rusticl による mesa ドライバ向けの OpenCL サポート。
- opencl-nvidia: 公式の NVIDIA ランタイム
Intel
- intel-compute-runtime: またの名を Neo OpenCL ランタイム。第8世代 (Broadwell) 以降の Intel HD Graphics GPU 用のオープンソース実装です。
- opencl-clover-mesa または opencl-rusticl-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-gitAUR: 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-clover-mesa または lib32-opencl-rusticl-mesa: AMD/ATI 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 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
Rusticl は、Rust で記述された新しい OpenCL 実装で、opencl-rusticl-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
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-gitAUR と hipsycl-rocm-gitAUR: OpenCL の代わりに AMD の HIP を使用するフリー実装。AMD と NVIDIA の GPU で動作可能。
- 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
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
ディレクトリにインストールします。スクリプト /etc/profile.d/cuda.sh
によって、関連する環境変数が設定され、CUDA をサポートするビルドシステムが CUDA を見つけられるようになります。
インストールが成功したかどうかや、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: HIP バックエンドを用いる、AMD のオープンソースのディープラーニングライブラリ。
- 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
トラブルシューティング
まず、GPU が /opt/rocm/bin/rocminfo
ディレクトリに現れるか確認してください。現れない場合、ROCm はあなたの GPU をサポートしていないか、あなたの GPU のサポート無しでビルドされている可能性があります。
Vega10 GPU
MI25 (及びその他の gfx900 GPU) は非推奨となっており、公式のサポートは終了しました。これらの GPU は公式には ROCm 4 ではサポートされており、ROCm 5 では非公式ですがサポートされています。ROCm 6 ではサポートされていません。
ROCm 5.7.1 のインストールガイドは AMD Radeon Instinct MI25#ROCm を見てください。。
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 のアクセラレーションがあるソフトウェア
- 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 への移植
- whisper.cpp-clblasAUR、whisper.cpp-cublasAUR - OpenCL と CUDA の最適化が施された、OpenAI の Whisper モデルの C/C++ の移植。
- xmrig - High Perf CryptoNote CPU と GPU (OpenCL, CUDA) マイナー