CUDAFunctionLoad


scr からCUDAFunctionをロードし,funMathematica で使えるようにする.


srcfile からCUDAFunctionをロードし,funMathematica で使えるようにする.


libfile からCUDAFunctionをロードし,funMathematica で使えるようにする.

詳細詳細

  • CUDALink パッケージがNeeds["CUDALink`"]でロードされていなければならない.
  • 使用可能な引数と戻り型,対応するCUDA言語の型:
  • _IntegermintMathematica 整数
    "Integer32"int32ビット整数
    "Integer64"long/long long64ビット整数
    _RealReal_tGPU実数型
    "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"AutomaticCUDAツールキットがインストールされている場所
    "CreateCUBIN"TrueコードをCUDAバイナリにコンパイルするかどうか
    "CreatePTX"FalseコードをCUDAバイトコードにコンパイルするかどうか
    "CUDAArchitecture"AutomaticCUDAコードをコンパイルする目的アーキテクチャ
    "Defines"{}NVCCプリプロセッサに渡された定義
    "Device"$CUDADevice計算で使用するCUDAデバイス
    "IncludeDirectories"{}コンパイルに含むディレクトリ
    "ShellCommandFunction"Noneコンパイルで使用するシェルコマンドで呼び出す関数
    "ShellOutputFunction"Noneコンパイルコマンドの実行によるシェル出力で呼び出す関数
    "SystemDefines"AutomaticNVCCプリプロセッサに渡されたシステム定義
    "TargetDirectory"AutomaticCUDAファイルが生成されるディレクトリ
    "TargetPrecision"Automatic計算に使用する精度
    "WorkingDirectory"Automatic一時ファイルが生成されるディレクトリ
    "XCompilerInstallation"AutomaticCコンパイラがインストールされていることをNVCCが探すディレクトリ

例題例題すべて開くすべて閉じる

例 (7)例 (7)

まず CUDALink アプリケーションをロードする:

In[1]:=
Click for copyable input

与えられた2つのベクトルを足す:

In[2]:=
Click for copyable input

上で定義したCUDAコードをコンパイルして実行する:

In[3]:=
Click for copyable input
Out[3]=

出力リストの長さを定義する:

In[4]:=
Click for copyable input

入出力ベクトルを定義する.これらは Mathematica の通常のリストで,CUDAカーネルコードのシグネチャで定義した型と同じである:

In[5]:=
Click for copyable input

指定の入力で関数を実行する:

In[6]:=
Click for copyable input

結果の最初の20個の値を表示する:

In[7]:=
Click for copyable input
Out[7]=

CUDAファイルがを渡すことができる.CUDA関数ファイルへのパスを表示する:

In[1]:=
Click for copyable input
Out[1]=

ファイル名はリストに収められる:

In[2]:=
Click for copyable input
Out[2]=

入力パラメータを定義する:

In[3]:=
Click for copyable input
Out[3]=

関数を呼び出す:

In[4]:=
Click for copyable input
Out[4]=

CUDAFunctionを呼び出すときは追加の引数を与えることができる.引数は開始するスレッド数(またはグリッド次元とブロック次元の積)を表す.CUDA実装を含むソースファイルを取得する:

In[1]:=
Click for copyable input
Out[1]=

ファイルからCUDA関数をロードする:

In[2]:=
Click for copyable input
Out[2]=

32スレッドの関数を呼び出す.ベクトルの最初の32個の値の加算が計算される:

In[3]:=
Click for copyable input
Out[3]=

CUDAバイナリを渡すことができる.NVCCCompilerを使ってCUDA関数をコンパイルしてバイナリにする.名前修飾を避けたい場合はTrueに設定しなければならない:

In[1]:=
Click for copyable input
Out[1]=
In[2]:=
Click for copyable input
Out[2]=

浮動小数点精度のサポートのために,ハードウェアとに基づいてが定義されている:

In[1]:=
Click for copyable input

オプションを与えないと,はデバイスで使用できる最高の浮動小数点精度を使用する.この場合は倍精度である:

In[2]:=
Click for copyable input
Out[2]=

マクロがどのように定義されるかに注目されたい.検出を避けるためにまたはオプションが渡せる.これは上のものと同じである:

In[3]:=
Click for copyable input
Out[3]=

単精度の利用を強制するためには値を渡す:

In[4]:=
Click for copyable input
Out[4]=

目的精度に基づいて型が検出される.指定の型の使用を強制するために,型としてまたはを渡す:

In[5]:=
Click for copyable input
Out[5]=

CUDALink ライブラリがロードできる.CUDAライブラリの例へのパスを取得する:

In[1]:=
Click for copyable input
Out[1]=

コンパイル済みライブラリの開く調子はオペレーティングシステムに依存するので,ファイルが存在することを確認する:

In[2]:=
Click for copyable input
Out[2]=

を使ってライブラリをロードする:

In[3]:=
Click for copyable input
Out[3]=

入力リストに2を加える:

In[4]:=
Click for copyable input
Out[4]=

この例の2つ目のコードのソースは CUDALink に含まれている:

In[5]:=
Click for copyable input
Out[5]=

を使ってコンパイルの失敗についての情報を得ることができる.ソースコードにシンタックスエラーがある:

In[1]:=
Click for copyable input

関数をロードする:

"ShellOutputFunction"->Printと設定すると,ビルドログが与えられる:

この場合,変数のスペルが間違っていた.

New to Mathematica? Find your learning path »
Have a question? Ask support »