|
SOLUTIONS
|
CUDAFunctionLoad
scr からCUDAFunctionをロードし,fun を Mathematica で使えるようにする.
![]()
srcfile からCUDAFunctionをロードし,fun を Mathematica で使えるようにする.
![]()
libfile からCUDAFunctionをロードし,fun を Mathematica で使えるようにする.
詳細詳細
- CUDALink パッケージがNeeds["CUDALink`"]でロードされていなければならない.
- 使用可能な引数と戻り型,対応するCUDA言語の型:
-
_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[3]" "Bit16[3]" "Integer32[3]" "Byte[4]" "Bit16[4]" "Integer32[4]" "UnsignedByte" "UnsignedBit16" "UnsignedInteger" "UnsignedByte[2]" "UnsignedBit16[2]" "UnsignedInteger[2]" "UnsignedByte[3]" "UnsignedBit16[3]" "UnsignedInteger[3]" "UnsignedByte[4]" "UnsignedBit16[4]" "UnsignedInteger[4]" "Double" "Float" "Integer64" "Double[2]" "Float[2]" "Integer64[2]" "Double[3]" "Float[3]" "Integer64[3]" "Double[4]" "Float[4]" "Integer64[4]"
は別の引数で複数回呼び出すこともできる.
でロードされた関数は Mathematica カーネルと同じプロセスで実行される.
でロードされた関数 Mathematica カーネルが終了するときにアンロードされる.- ブロック次元には,1ブロックにつきいくつのスレッドを開始するかを表すリストまたは整数が使える.
- libfileがダイナミックライブラリなら,ダイナミックライブラリ関数 fun がロードされる.
- libfileにはCUDA PTX,CUDA CUBIN,ライブラリファイルが使える.
- ブロック次元の最大サイズはCUDAInformationの
特性で返される. - 開始するときに,(CUDAFunctionへの追加の引数として)スレッド数が指定されてなければ,階数と次元が最も大きい要素の次元が選ばれる.画像については階数は2に設定される.
- 開始するときに,スレッド数がブロック時限の倍数でなければ,ブロック次元の倍数に切り上げられる.
- 以下のオプションが与えられる:
-
"CleanIntermediate" Automatic 一時ファイルを削除するかどうか "CompileOptions" {} NVCCコンパイラに直接渡すオプション "CompilerInstallation" Automatic CUDAツールキットがインストールされている場所 "CreateCUBIN" True コードをCUDAバイナリにコンパイルするかどうか "CreatePTX" False コードをCUDAバイトコードにコンパイルするかどうか "CUDAArchitecture" Automatic CUDAコードをコンパイルする目的アーキテクチャ "Defines" {} NVCCプリプロセッサに渡された定義 "Device" $CUDADevice 計算で使用するCUDAデバイス "IncludeDirectories" {} コンパイルに含むディレクトリ "ShellCommandFunction" None コンパイルで使用するシェルコマンドで呼び出す関数 "ShellOutputFunction" None コンパイルコマンドの実行によるシェル出力で呼び出す関数 "SystemDefines" Automatic NVCCプリプロセッサに渡されたシステム定義 "TargetDirectory" Automatic CUDAファイルが生成されるディレクトリ "TargetPrecision" Automatic 計算に使用する精度 "WorkingDirectory" Automatic 一時ファイルが生成されるディレクトリ "XCompilerInstallation" Automatic CコンパイラがインストールされていることをNVCCが探すディレクトリ
例題例題すべて開くすべて閉じる
例 (7)例 (7)
| In[1]:= |
| In[2]:= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
入出力ベクトルを定義する.これらは Mathematica の通常のリストで,CUDAカーネルコードのシグネチャで定義した型と同じである:
| In[5]:= |
| In[6]:= |
| In[7]:= |
| Out[7]= |
CUDAファイルがを渡すことができる.CUDA関数ファイルへのパスを表示する:
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| Out[4]= | ![]() |
CUDAFunctionを呼び出すときは追加の引数を与えることができる.引数は開始するスレッド数(またはグリッド次元とブロック次元の積)を表す.CUDA実装を含むソースファイルを取得する:
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
32スレッドの関数を呼び出す.ベクトルの最初の32個の値の加算が計算される:
| In[3]:= |
| Out[3]= | ![]() |
CUDAバイナリを渡すことができる.NVCCCompilerを使ってCUDA関数をコンパイルしてバイナリにする.名前修飾を避けたい場合は
をTrueに設定しなければならない:
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
浮動小数点精度のサポートのために,ハードウェアと
に基づいて
が定義されている:
| In[1]:= |
オプションを与えないと,
はデバイスで使用できる最高の浮動小数点精度を使用する.この場合は倍精度である:
マクロ
と
がどのように定義されるかに注目されたい.検出を避けるために
または
オプションが渡せる.これは上のものと同じである:
目的精度に基づいて型
が検出される.指定の型の使用を強制するために,型として
または
を渡す:
CUDALink ライブラリがロードできる.CUDAライブラリの例へのパスを取得する:
| In[1]:= |
| Out[1]= |
コンパイル済みライブラリの開く調子はオペレーティングシステムに依存するので,ファイルが存在することを確認する:
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| Out[4]= |
この例の2つ目のコードのソースは CUDALink に含まれている:
| In[5]:= |
| Out[5]= |
を使ってコンパイルの失敗についての情報を得ることができる.ソースコードにシンタックスエラーがある:
| In[1]:= |
"ShellOutputFunction"->Printと設定すると,ビルドログが与えられる:













