3.1. 検証環境

本書で例示するソースコードは以下の3つのコンパイラ、ビルドツールで検証しました。

また検証で使ったOSは以下の一つに限定されます。

JDKについては以下のバージョンがインストールされています。

$ java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

JDKのインストールディレクトリは以下のフォルダとなります。

$ which java
/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/bin/java

Javaのホームパス($JAVA_HOME)については以下のようになっています。

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home

Linux/UnixでのJDKインストールディレクトリは確認していませんが、一番単純な方法は以下のコマンドです。但しこの方式は「原則」として「JDK」が見つかるという点に留意ください。(無論、JDKがシステムにインストールされていることは不可欠です。)

$ cd /
$ find . -name 'javac'

ディスク内検索に時間をかけたくない場合は、以下のいずれかにインストールされている可能性が濃厚なので、探してみると良いかもしれません。

/usr/local/
/usr/lib/jvm/

3.1.1. OpenCLのインストール

OpenCLにはベンダーが提供する2つのソフトウェアが必要です。

  • OpenCL Runtimeライブラリ
  • OpenCL デバイスドライバ

このうちRuntimeライブラリは、SDKやフレームワークと呼ばれるものです。

デバイスドライバについては、各プラットフォームで事情が異なります。プラットフォームのサポートをベンダー別で以下にまとめました。

Apple
Mac OS Xに標準でインストールされています。(*開発環境としてXCodeはインストールしてください。)
Intel
Windowsでは無償で提供。過去Linuxでは有償のMedia Studioに附属(無償のBeignetもあります)していたが、2016年現在は第5〜6世代コアプロセッサのドライバは無償で提供している。
AMD
Windows/Linuxで無償提供。公式HPからダウンロードしてください。

この中でIntelのLinuxが有償な点は悪いニュースですが、無償でIntelデバイスのLinuxドライバを提供してるBeignetがあります。また第5〜6世代CPUについては無償のデバイスドライバのダウンロードもできます。

Beignet(OSS)
Intelの技術者がオープンソースで開発したLinux-Intel無償ドライバ。

Beignetは2016年時点で以下のプロセッサをサポートしてるとのことです。

  • 3rd Generation Intel Core Processors
  • Intel “Bay Trail” platforms with Intel HD Graphics
  • 4th Generation Intel Core Processors "Haswell"(要パッチ)
  • 5th Generation Intel Core Processors "Broadwell".

第3〜4世代のプロセッサで開発する場合にはBeignetを使えますが、バグがあるので公式ページでパッチを入手するようにしてください。

AMD Linux(Ubuntu)

警告

参考までの掲載ですので未検証です。必ず「AMD APP SDK Installation Notes」(AMDのダウンロードサイトにあるAMD_APP_SDK_Installation_Notes.pdf)を確認するようにしてください。

  1. root権限のあるアカウントがあることを確認します。
  2. 過去にインストールしたAPP SDKを削除します。
  3. AMD APP SDKをダウンロードして、tarファイルを解凍します。
  4. Install-AMD-APP.shスクリプトを実行します。
  5. /opt/AMPAPP/にバイナリがインストールされたことを確認します。
  6. AMDAPPSDKROOTとLD_LIBRARY_PATHが正しい値に設定されているか確認します。

SDKはダウンロードしなくてもapt-get経由でも入手できます。

sudo apt-get install amd-opencl-dev

NVIDIA Linux

警告

参考までの掲載ですので未検証です。NVIDIA公式サイトにある「OpenCL_Release_Notes.txt」等で確認してください。

NVIDIA CUDA Toolkitまたはドライバを公式サイトからダウンロード、または下記のようにリポジトリからインストールする必要があります。

Redhat/Centos
rpmでリポジトリのメタデータを取得して、yum経由でインストールします。
$ sudo rpm --install cuda-repo-<distro>-<version>.<architecture>.rpm
$ sudo yum clean expire-cache
$ sudo yum install cuda
Ubuntu
リポジトリのメタデータを取得して、apt経由でインストールします。
$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
$ sudo apt-get update
$ sudo apt-get install cuda

Intel Linux(Ubuntu)

警告

参考までの掲載ですので未検証です。必ず「Intel® SDK for OpenCL Applications 2016 release notes」で確認ください。

SDKについては「Intel® SDK for OpenCL™ Applications for Ubuntu」が用意されているので、インテル公式ページからダウンロードしてください。SDKには第5〜6世代のIntel Coreプロセッサと、Iris Pro、HD Graphicsのスタンドアローンドライバが含まれています。

ドライバについて以前IntelではMedia Server Studioという有償アプリケーションのライセンスを購入する必要がありましたが2016年現在では以下のドライバをダウンロードできるようになっています。

  • OpenCL™ 1.2 Driver for Intel® HD, Iris™, and Iris™ Pro Graphics for Linux* (64-bit)
  • OpenCL™ Driver for Intel® Iris™ and Intel® HD Graphics on Windows* (64-bit and 32-bit)

もちろんSDKをダウンロードするだけで構いませんが、AMDのSDKを使ってIntelのSDKは使いたくない場合にはドライバ単体でダウンロードもできます。

Intel Windows

警告

参考までの掲載ですので未検証です。必ず「Intel® SDK for OpenCL Applications 2016 release notes」で確認ください。

  1. 管理権限を持つアカウント(Administrator)でログインします。
  2. 公式サイト(https://software.intel.com/en-us/intel-opencl)からSDKをダウンロードします。
  3. 過去にインストールしたSDKを削除します。
  4. パッケージを起動してインストーラーを実行します。

デフォルトのインストレーションフォルダは以下のようになります。

C:\Program Files (x86)\Intel\OpenCL SDK

AMD Linux(Windows)

警告

参考までの掲載ですので未検証です。必ず「AMD APP SDK Installation Notes」(AMDのダウンロードサイトにあるAMD_APP_SDK_Installation_Notes.pdf)を確認するようにしてください。

  1. 管理権限のあるアカウントがあることを確認します。
  2. APP SDKをダウンロードしてインストーラーを起動します。カスタムではなく、エキスプレスインストールを選択します。
  3. AMDAPPSDKROOTとAMDAPPSDKSAMPLESROOT環境変数が設定されます。※カスタムインストールでは手動で設定する必要があります。

Makefileを使う場合はLinux/Unix/Windows(32bit)で以下のように記述します。

CC=gcc //(1)
hellowolrd: basic_helloworld.c
   $(CC) -o $@ $^ -I$(AMDAPPSDKROOT)include -L$(AMDAPPSDKROOT)lib\x86 -lOpenCL

(1)

MinGWの場合は「mingw32-gcc」。

NVIDIA Windows

警告

参考までの掲載ですので未検証です。

NVIDIAの公式サイトのウィザードから適切なGPUドライバまたはCUDA Toolkit 7.5以降をダウンロードしてインストールしてください。インストール後には、NVSDKCOMPUTE_ROOT が設定されているかを確認してください。

OpenCL-1.2のサポートは、CUDA Toolkit 7.0以前ではされていませんので、注意してください。

下記は公式サイトの情報を参考にしたMakefileです。

CC=gcc //(1)
hellowolrd: basic_helloworld.c
   $(CC) -o $@ $^ -I$(NVSDKCOMPUTE_ROOT)\OpenCL\common\inc -L$(NVSDKCOMPUTE_ROOT)\OpenCL\common\lib\Win32 -lOpenCL

(1)

MinGWの場合は「mingw32-gcc」。

3.1.2. JOCLがサポートするSDK

JOCLは以下のSDKをサポートします。

  • AMD OpenCL 2.0ドライバ
  • NVIDIA OpenCL 1.2ドライバ
  • Intel OpenCL SDK
  • OpenCL for Max OS X

Intel SDKインストール手順(Ubuntu)

警告

参考までの掲載ですので本項目は未検証です。「 「Intel Linux(Ubuntu)」 」のインストールをすれば以下の手順は不要となるはずです。

以下の手順は JOCL 公式 HP に掲載されているものです。

  • 「http://software.intel.com/en-us/articles/download-intel-opencl-sdk/」からrpmパッケージをダウンロード。
  • 以下のコマンドでrpmパッケージをインストール。(パッケージファイル名は環境に応じて変更してください。)
$ sudo apt-get install rpm alien
$ fakeroot alien --to-deb <intelのrpmパッケージのファイル名>
$ sudo dpkg -i intel-ocl-sdk-suse+11.1_1.1-2_amd64.deb
$ sudo apt-get install libnuma1
$ sudo echo "/usr/lib64/OpenCL/vendors/intel/libintelocl.so" > /etc/OpenCL/vendors/intelocl64.icd」
  • /usr/include/CLにOpenCLヘッダーを配置
  • libOpenCL.soが/usr/lib64に配置されていることを確認します。他のOpenCLプラットフォームがインストールされていない場合は、/lib/lib64にバイナリを移動して、「sudo ldconfig」をします。

Intelの公式サイトの手順「Installing Intel® SDK for OpenCL Applications on Linux」)では以下の手順としています。

  1. Intel® SDK for OpenCL Applications 2012 installer for Linux operating systemsをダウンロードし、TGZファイル形式から解凍(tar xvf等)します。
  2. rpm -i <rpmファイル名>

ちなみに Ubuntu では「 OpenCL ヘッダー」を自動でインストールできます。

$ sudo apt-get install ocl-icd-opencl-dev

Copyright 2018-2019, by Masaki Komatsu