「GPGPU」の版間の差分
(同期) |
(同期) |
||
9行目: | 9行目: | ||
==OpenCL== |
==OpenCL== |
||
+ | |||
− | ===概要=== |
||
OpenCL (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。 |
OpenCL (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。 |
||
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマーがこの環境で呼び出せる C API が書かれています。 |
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマーがこの環境で呼び出せる C API が書かれています。 |
||
+ | ===OpenCL ランタイム=== |
||
− | Arch Linux では複数のパッケージを用意しています。 |
||
+ | OpenCL を使用するプログラムを実行するには、ハードウェアに対応したランタイムをインストールする必要があります。 |
||
+ | ====AMD/ATI==== |
||
− | OpenCL を使用するプログラムを実行するには、あなたのハードウェアに対応しているランタイムをインストールする必要があります: |
||
− | * {{Pkg|opencl- |
+ | * {{Pkg|opencl-mesa}}: [[AMDGPU]] と [[Radeon]] 用のフリーなランタイム。 |
+ | * {{AUR|opencl-amd}}: [[AMDGPU]] 用のプロプライエタリなスタンドアロンのランタイム。 |
||
− | * {{Pkg|opencl-mesa}}: AMD の GPU で mesa ドライバーを使って実行 (開発中、効果のほどは保証できません) |
||
− | * {{AUR| |
+ | * {{AUR|amdgpu-pro-opencl}}: [[AMDGPU PRO]] 用のプロプライエタリなランタイム。 |
− | * {{AUR| |
+ | * {{AUR|opencl-catalyst}}: AMD のプロプライエタリなランタイム。[[AMDGPU]] に取って代わられる予定です。 |
− | * {{AUR| |
+ | * {{AUR|amdapp-sdk}}: AMD CPU ランタイム。 |
− | * {{AUR|pocl}}: CPU で実行 (LLVM ベースの OpenCL 実装) |
||
+ | ====NVIDIA==== |
||
− | OpenCL を使って開発したい場合、他にもパッケージをインストールする必要があります: |
||
+ | * {{Pkg|opencl-nvidia}}: 公式 [[NVIDIA]] ランタイム。 |
||
− | * {{Pkg|ocl-icd}}: OpenCL ICD ローダーの実装、最新の OpenCL の仕様に沿っています。 |
||
− | * {{Pkg|opencl-headers}}: OpenCL C/C++ API ヘッダー。 |
||
+ | ====Intel==== |
||
− | ベンダーの SDK には様々なツールやサポートライブラリが含まれています: |
||
− | * {{AUR|intel-opencl- |
+ | * {{AUR|intel-opencl-runtime}}: 公式 Intel CPU ランタイム。Intel 以外の CPU もサポートしています。 |
+ | * {{pkg|beignet}}: Intel IvyBridge 以上の iGPU 用のオープンソース実装。 |
||
− | * {{AUR|amdapp-sdk}}: AMD の OpenCL SDK |
||
+ | |||
− | * {{Pkg|cuda}}: NVidia の GPU SDK、OpenCL 1.1 のサポートを含んでいます。 |
||
+ | ====その他==== |
||
+ | * {{AUR|pocl}}: LLVM ベースの OpenCL 実装。 |
||
===OpenCL ICD ローダー (libOpenCL.so)=== |
===OpenCL ICD ローダー (libOpenCL.so)=== |
||
− | OpenCL 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 ローダー |
+ | 他の 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|2=<nowiki> |
||
47行目: | 48行目: | ||
* {{Pkg|ocl-icd}}: 推奨、基本的に最新です。 |
* {{Pkg|ocl-icd}}: 推奨、基本的に最新です。 |
||
* AMD による {{AUR|libopencl}}: OpenCL のバージョン 2.0 を提供します。目下 AMD によって制限的なライセンスで配布されているため、公式リポジトリに入れることはできません。 |
* AMD による {{AUR|libopencl}}: OpenCL のバージョン 2.0 を提供します。目下 AMD によって制限的なライセンスで配布されているため、公式リポジトリに入れることはできません。 |
||
− | * Intel による {{AUR|intel-opencl-runtime}}: OpenCL |
+ | * Intel による {{AUR|intel-opencl-runtime}}: OpenCL 2.0 を提供します。 |
{{Note|ICD ローダーのベンダーの名前が出るのはローダーを識別する必要があるときだけです。他の場合、ベンダーの名前は関係ありません。ICD ローダーはベンダーに依存しないため (正しく実装されてさえいれば) 相互に交換して使うことができます。}} |
{{Note|ICD ローダーのベンダーの名前が出るのはローダーを識別する必要があるときだけです。他の場合、ベンダーの名前は関係ありません。ICD ローダーはベンダーに依存しないため (正しく実装されてさえいれば) 相互に交換して使うことができます。}} |
||
+ | |||
+ | ===OpenCL 開発=== |
||
+ | OpenCL を使用して開発をしたい場合、最低でも以下のパッケージが必要になります: |
||
+ | * {{Pkg|ocl-icd}}: OpenCL ICD ローダーの実装、最新の OpenCL の仕様に沿っています。 |
||
+ | * {{Pkg|opencl-headers}}: OpenCL C/C++ API ヘッダー。 |
||
+ | |||
+ | ベンダーの SDK には様々なツールやサポートライブラリが含まれています: |
||
+ | * {{AUR|intel-opencl-sdk}}: [http://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 のサポートを含んでいます。 |
||
===実装=== |
===実装=== |
||
あなたの環境で有効になっている OpenCL 実装を確認するには、次のコマンドを使います: |
あなたの環境で有効になっている OpenCL 実装を確認するには、次のコマンドを使います: |
||
$ ls /etc/OpenCL/vendors |
$ ls /etc/OpenCL/vendors |
||
− | |||
− | ====AMD==== |
||
− | AMD の OpenCL 実装は [http://developer.amd.com/sdks/AMDAPPSDK/Pages/default.aspx AMD APP SDK] として知られています。以前は AMD Stream SDK または ATi Stream とも呼ばれていました。 |
||
− | |||
− | Arch Linux では、現在 AMD APP SDK は AUR の {{AUR|amdapp-sdk}} としてインストールすることができます。このパッケージは {{ic|/opt/AMDAPP}} にインストールされ、SDK ファイルとは別に、多数のサンプルコードも含まれています ({{ic|/opt/AMDAPP/SDK/samples/}})。システム上の OpenCL プラットフォームやデバイスをリストアップして、それぞれの詳しい情報を表示する {{ic|clinfo}} ユーティリティも入っています。 |
||
− | |||
− | AMD APP SDK 自体にも CPU の OpenCL ドライバーが含まれているため、(ベンダーの如何を問わず) CPU デバイスで OpenCL を実行するのに追加のドライバーは必要ありません。GPU の OpenCL ドライバーは (任意の依存パッケージである) {{AUR|catalyst}} パッケージに入っています。 |
||
− | |||
− | コードは (依存パッケージになっている) {{Pkg|llvm}} を使ってコンパイルされます。 |
||
− | |||
− | ====Mesa (Gallium)==== |
||
− | Mesa の OpenCL サポートは開発中です (http://www.x.org/wiki/GalliumStatus/ を参照)。AMD Radeon カードは r600g ドライバーによってサポートされています。 |
||
− | |||
− | Arch Linux では OpenCL のサポートは別のパッケージになっています: {{Pkg|opencl-mesa}}。使い方は http://dri.freedesktop.org/wiki/GalliumCompute/ を見てください。 |
||
− | |||
− | ====NVIDIA==== |
||
− | NVIDIA の実装は[[公式リポジトリ]]の {{Pkg|opencl-nvidia}} からインストールできます。{{Pkg|nvidia}} カーネルモジュールが動作する NVIDIA GPU のみをサポートしています (nouveau はまだ OpenCL をサポートしていません)。 |
||
− | |||
− | ====Intel==== |
||
− | Intel の実装は、シンプルに [http://software.intel.com/en-us/articles/opencl-sdk/ Intel OpenCL SDK] という名前が付けられており、Intel の CPU (主に Core と Xeon) と GPU だけに最適化された OpenCL パフォーマンスを発揮します。パッケージは [[AUR]] からインストールできます: {{AUR|intel-opencl-sdk}}。ランタイムは別のパッケージとして [[AUR]] にあります: {{AUR|intel-opencl-runtime}}。Ivy Bridge 以降の新しいハードウェアに搭載されている統合グラフィックハードウェアのための OpenCL は AUR の {{AUR|beignet}} から入手できます。 |
||
− | |||
− | ====POCL==== |
||
− | CPU で動作する LLVM ベースの実装です。{{AUR|pocl}} でインストールできます。 |
||
− | |||
− | ===開発=== |
||
− | OpenCL 開発に必要なパッケージは[[#概要|概要]]セクションに記載しています。完全な SDK のインストールは任意です (ランタイム実装によります、大抵はベンダーの SDK の一部として含まれています)。あなたのアプリケーションを {{ic|libOpenCL.so}} にリンクしてください。 |
||
====言語バインディング==== |
====言語バインディング==== |
||
130行目: | 115行目: | ||
==OpenCL と CUDA のアクセラレーションがあるソフトウェア== |
==OpenCL と CUDA のアクセラレーションがあるソフトウェア== |
||
* [[Bitcoin]] |
* [[Bitcoin]] |
||
+ | * [[HandBrake]] |
||
* [[GIMP]] (実験段階 - [http://www.h-online.com/open/news/item/GIMP-2-8-RC-1-arrives-with-GPU-acceleration-1518417.html] を参照) |
* [[GIMP]] (実験段階 - [http://www.h-online.com/open/news/item/GIMP-2-8-RC-1-arrives-with-GPU-acceleration-1518417.html] を参照) |
||
* {{Pkg|opencv}} |
* {{Pkg|opencv}} |
2017年4月13日 (木) 21:12時点における版
関連記事
GPGPU は General-purpose computing on graphics processing units の略で GPU による汎目的計算を意味します。Linux では、現在2つの GPGPU フレームワークが存在します: OpenCL と CUDA。
目次
OpenCL
OpenCL (Open Computing Language) は非営利団体である Khronos グループによって開発されている、オープンでロイヤルティフリーの並列プログラミングフレームワークです。
OpenCL の仕様書には一般環境として必要なプログラミング言語と、プログラマーがこの環境で呼び出せる C API が書かれています。
OpenCL ランタイム
OpenCL を使用するプログラムを実行するには、ハードウェアに対応したランタイムをインストールする必要があります。
AMD/ATI
- opencl-mesa: AMDGPU と Radeon 用のフリーなランタイム。
- opencl-amdAUR: AMDGPU 用のプロプライエタリなスタンドアロンのランタイム。
- amdgpu-pro-openclAUR: AMDGPU PRO 用のプロプライエタリなランタイム。
- opencl-catalystAUR: AMD のプロプライエタリなランタイム。AMDGPU に取って代わられる予定です。
- amdapp-sdkAUR: AMD CPU ランタイム。
NVIDIA
- opencl-nvidia: 公式 NVIDIA ランタイム。
Intel
- intel-opencl-runtimeAUR: 公式 Intel CPU ランタイム。Intel 以外の CPU もサポートしています。
- beignet: Intel IvyBridge 以上の iGPU 用のオープンソース実装。
その他
- poclAUR: LLVM ベースの OpenCL 実装。
OpenCL 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: 推奨、基本的に最新です。
- AMD による libopenclAUR: OpenCL のバージョン 2.0 を提供します。目下 AMD によって制限的なライセンスで配布されているため、公式リポジトリに入れることはできません。
- Intel による intel-opencl-runtimeAUR: OpenCL 2.0 を提供します。
OpenCL 開発
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
ユーティリティが含まれています。AMD APP SDK には CPU OpenCL ドライバーが含まれているため、CPU デバイスで OpenCL を実行するのに追加のドライバーは必要ありません (AMD 製じゃなくても動作します)。GPU の OpenCL ドライバーは catalystAUR パッケージに入っています。 - cuda: NVidia の GPU SDK、OpenCL 1.1 のサポートを含んでいます。
実装
あなたの環境で有効になっている OpenCL 実装を確認するには、次のコマンドを使います:
$ ls /etc/OpenCL/vendors
言語バインディング
- C++: Khronos によるバインディングが公式の仕様書 (バージョン 1.2) に存在します。opencl-headers に含まれています。
- C++/Qt: Qt Labs に QtOpenCL という名前の実験的なバインディングがあります - 詳しくは ブログエントリ を参照
- JavaScript/HTML5: WebCL
- Python: PyOpenCL という同じ名前を持った2つのバインディングが存在します。片方は [extra] に入っています: python-pyopencl。もう片方については sourceforge を見て下さい。
- D: cl4d
- Haskell: OpenCLRaw パッケージを AUR からインストールできます: haskell-openclraw-gitAUR
- Java: JOCL (JogAmp の一部)
- Mono/.NET: Open Toolkit
- Go: OpenCL bindings for Go
- Racket: raco でインストールすることができるネイティブインターフェイスが PLaneT にあります。
CUDA
CUDA (Compute Unified Device Architecture) は NVIDIA による、プロプライエタリでクローズドソースの並列計算アーキテクチャ・フレームワークです。NVIDIA の GPU を必要とします。CUDA は複数のコンポーネントから構成されます:
- 必須:
- プロプライエタリの NVIDIA カーネルモジュール
- CUDA "driver" と "runtime" ライブラリ
- 任意:
- 追加ライブラリ: CUBLAS, CUFFT, CUSPARSE など。
- CUDA ツールキット。
nvcc
コンパイラが含まれています。 - CUDA SDK。CUDA と OpenCL のプログラムの多数のサンプルやコードが含まれています。
カーネルモジュールと CUDA の "driver" ライブラリは nvidia と opencl-nvidia に入っています。"runtime" ライブラリと CUDA ツールキットは cuda パッケージでインストール可能です。このライブラリは64ビット版だけが存在します。cuda-gdb
を使うには ncurses5-compat-libsAUR のインストールが必要です。FS#46598 を参照。
開発
cuda パッケージは全てのコンポーネントを /opt/cuda
ディレクトリにインストールします。CUDA のコードをコンパイルするときはコンパイラのインクルードパスに /opt/cuda/include
を追加してください。例えばコンパイラのフラグやオプションに -I/opt/cuda/include
を加えることで追加できます。NVIDIA による gcc
ラッパーである nvcc
を使うには、/opt/cuda/bin
をパスに追加してください。
/opt/cuda/samples
にインストールされたサンプルをコンパイルしてコンパイルされたサンプルを実行することで、インストールが成功したこと、CUDA が動作していることを確認できます (サンプルディレクトリで make
を実行するだけでコンパイルできます、ただし、コンパイルする前に /opt/cuda/samples
ディレクトリをホームディレクトリにコピーしておいた方が良いでしょう)。インストールが問題ないことを確認するときは deviceQuery
と呼ばれるサンプルのどれかを実行するのがふさわしいと思われます。
言語バインディング
- Fortran: PGI CUDA Fortran Compiler
- Haskell: accelerate パッケージ に CUDA バックエンドがあります
- Java: JCuda
- Mathematica: CUDAlink
- Mono/.NET: CUDA.NET, CUDAfy.NET
- Perl: Kappa, CUDA-Minimal
- Python: python-pycuda または Kappa
- Ruby, Lua: Kappa
ドライバーの問題
複数の GPU が載っている環境で CUDA プログラムを実行する場合、パーミッション問題を解決するためにレガシーなドライバー nvidia-304xx または nvidia-304xx-lts を使う必要があるかもしれません。
OpenCL と CUDA のアクセラレーションがあるソフトウェア
- Bitcoin
- HandBrake
- GIMP (実験段階 - [1] を参照)
- opencv
- pyrit
- darktable - OpenCL 機能を使うには GPU に最低でも 1GB のメモリが搭載されていて Image support が必要です (clinfo コマンドの出力で確認できます)。
- aircrack-ng
- cuda_memtestAUR - GPU memtest。名前とは裏腹に、CUDA と OpenCL の両方をサポートしています。
- Blender - Nvidia GPU 向けの CUDA のサポートと AMD GPU 向けの OpenCL のサポート。詳細はこちら。