はじめに
OpenCLLink は,Wolfram言語を使ってOpenCLのシステム情報についてのクエリを行い,Wolfram言語を使ってOpenCLプログラムを実行することを可能にする.このセクションでは,OpenCLLink の機能について簡単に述べる.
OpenCLとは
OpenCLLink パッケージは,Wolfram言語を通してOpenCLの機能を利用することを可能にする.ユーザは,OpenCLを使用できるデバイスのドライバとハードウェアをインストールしなければならない.現在 OpenCLは,多くの種類のNVIDIA,AMD/ATI,VIAのハードウェアでサポートされている.またAppleのMacOSX Snow Leopard 10.6でもネイティブサポートされている.
CPUとOpenCL
通常のCPUプログラムと違って,OpenCLではCPUあるいはビデオカード上のGPU(グラフィックスプロセッシングユニット)のいずれかで実行するコードを書くことができる.正しく行うと,性能を大きく高めることができる.
CUDAとOpenCL
CUDALink と違って,OpenCLLink ではGPUとCPU(CPUがそれをサポートするのであれば)の両方でプログラムを実行することができる.
システム情報
OpenCLLink パッケージを使うには,まずそれをロードする必要がある.
Needs["OpenCLLink`"]次に,システムサポートを OpenCLLink が検出するかどうかをチェックすることができる.これはOpenCLQを使って行う.
OpenCLQ[]サポートされるハードウェアについて詳しく知りたい場合は,SystemInformationかOpenCLInformationを使う.ここでは,SystemInformationを使う.
SystemInformation[]ユーザはOpenCLInformationを使って,基礎となるSystemInformationデータにアクセスすることもできる. OpenCLInformationからの結果はクエリを行うことができる.ここでは,最初のプラットフォームのデバイス名が表示されている.
MapIndexed[Replace["Name", First[#2] /. #1]&, OpenCLInformation[1, "Devices"]]OpenCLプログラミング
OpenCLLink の主な機能は,新しいGPUプログラムの開発を容易にし,これをWolfram言語の作業に組み込むことができるようにするということである.
OpenCLLink の機能を使うためには,まず OpenCLLink アプリケーションを以下のようにロードする必要がある.
Needs["OpenCLLink`"]簡単なOpenCL関数をロードする.これは入力ベクトルを取り,それぞれの要素を倍にする.
doubleFun = OpenCLFunctionLoad["
__kernel void doubleVec(__global mint * in, mint length) {
int index = get_global_id(0);
if (index < length)
in[index] = 2*in[index];
}", "doubleVec", {{_Integer}, _Integer}, 256]vec = Range[ 20];OpenCLFunctionを呼び出す.
doubleFun[vec, 20]以下のように,OpenCLFunctionInformationを使って関数の情報を得ることができる.
OpenCLFunctionInformation[doubleFun]