|
SOLUTIONS
|
OPENCLLINK シンボル
OpenCLFunctionLoad
ソースコード prog から fun をロードし,OpenCLFunctionを返して Mathematica で使えるようにする.
![]()
ソースファイル progfile から fun をロードし,OpenCLFunctionを返して Mathematica で使えるようにする.
詳細詳細
- OpenCLLink アプリケーションは,Needs["OpenCLLink`"]を使ってロードしなければならない.
- progfile がダイナミックライブラリである場合には,ダイナミックライブラリ関数 fun がロードされる.
- 使用できる引数と戻り値の型,および対応するOpenCLの型:
-
_Integer mint Mathematica 整数 "Integer32" int 32ビット整数 "Integer64" long/long long 64ビット整数 _Real Real_t GPUの実数型 "Double" double 機械倍数 "Float" float 機械浮動小数 {base, rank, io} CUDAMemory 特定の基底型,階数,入出力オプションのメモリ "Local" | "Shared" mint ローカルメモリあるいは共有メモリのパラメータ {"Local" | "Shared", type} mint ローカルメモリあるいは共有メモリのパラメータ - 有効な io は,
,
,
である.
が渡されると,
がデフォルトで使用される.
が渡されると,
が使用される.- 階数は,
あるいは
を使って省略することができる. - 使用可能な基底型:
-
_Integer _Real _Complex "Byte" "Bit16" "Integer32" "Byte[2]" "Bit16[2]" "Integer32[2]" "Byte[4]" "Bit16[4]" "Integer32[4]" "Byte[8]" "Bit16[8]" "Integer32[8]" "Byte[16]" "Bit16[16]" "Integer32[16]" "UnsignedByte" "UnsignedBit16" "UnsignedInteger" "UnsignedByte[2]" "UnsignedBit16[2]" "UnsignedInteger[2]" "UnsignedByte[4]" "UnsignedBit16[4]" "UnsignedInteger[4]" "UnsignedByte[8]" "UnsignedBit16[8]" "UnsignedInteger[8]" "UnsignedByte[16]" "UnsignedBit16[16]" "UnsignedInteger[16]" "Double" "Float" "Integer64" "Double[2]" "Float[2]" "Integer64[2]" "Double[4]" "Float[4]" "Integer64[4]" "Double[8]" "Float[8]" "Integer64[8]" "Double[16]" "Float[16]" "Integer64[16]"
は,異なる引数を使って2度以上呼び出すことができる.
でロードされた関数は,Mathematica カーネルと同じプロセスで実行される.- OpenCLFunctionLoadでロードされた関数は,Mathematica カーネルが終了する際にアンロードされる.
- ブロック次元はリストあるいは整数でよく,起動するのに各ブロックに対していくつのスレッドが必要であるかを表す.
- ブロック次元の最大サイズは,OpenCLInformationの
特性によって返される. - 起動時に,スレッドの数が(OpenCLFunctionの追加の引数として)指定されていない場合には,最大の階数と次元を持つ要素の次元が選ばれる.画像については,階数は2に設定される.
- 起動時に,スレッドの数がブロック次元の倍数ではない場合には,スレッド数はブロック次元の倍数になるようにインクリメントされる.
- 使用できるオプション:
-
"CompileOptions" {} 直接OpenCLコンパイラに渡されるコンパイルオプション "Defines" Automatic OpenCLプリプロセッサに渡される定義 "Device" $OpenCLDevice 計算に使用されるOpenCLデバイス "IncludeDirectories" {} コンパイルに含むディレクトリ "Platform" $OpenCLPlatform コンパイルに使用するOpenCLプラットフォーム "ShellCommandFunction" None コンパイルに使用するシェルコマンドで呼び出す関数 "ShellOutputFunction" None コンパイルコマンドを実行したシェル出力で呼び出す関数 "TargetPrecision" Automatic 計算に使用する精度 "WorkingDirectory" Automatic 一時的なファイルが生成されるディレクトリ
例題例題すべて開くすべて閉じる
例 (5)例 (5)
| In[1]:= |
| In[2]:= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| In[5]:= |
ArrayPlotを使って結果をプロットする:
| In[6]:= |
| Out[6]= | ![]() |
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
DLLを OpenCLLink にロードしてOpenCLFunctionとして使うことができる:
| In[1]:= |
| Out[1]= |
予めコンパイルされたライブラリの拡張子はオペレーティングシステムに依存するので,ファイルが存在することを確かめる:
| In[2]:= |
| Out[2]= |
| In[3]:= |
| In[4]:= |
| Out[4]= |
この例のソースコードは OpenCLLink に付いてくる:
| In[5]:= |
| Out[5]= |
OpenCLFunctionを呼び出す際に追加の引数を与えることができる.引数は,起動するスレッドの数(あるいは大域的な作業グループサイズ)を示す.上の例を使う:
| In[1]:= |
| Out[1]= |
32のスレッドで関数を呼び出す.これにより,vectorAddの最初の32個の値のみが計算される:
| In[3]:= |
| Out[3]= | ![]() |
Mathematica 9 is now available!
New to Mathematica?
Find your learning path »
Have a question?
Ask support »







