OpenCLFunctionLoad
This feature is not supported on the Wolfram Cloud.


ソースコード prog から fun をロードし,OpenCLFunctionを返して Mathematica で使えるようにする.


ソースファイル progfile から fun をロードし,OpenCLFunctionを返して Mathematica で使えるようにする.

詳細詳細

  • OpenCLLink アプリケーションは,Needs["OpenCLLink`"]を使ってロードしなければならない.
  • progfile がダイナミックライブラリである場合には,ダイナミックライブラリ関数 fun がロードされる.
  • 使用できる引数と戻り値の型,および対応するOpenCLの型:
  • _IntegermintWolfram言語整数
    "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[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度以上呼び出すことができる.
  • でロードされた関数は,Wolfram言語カーネルと同じプロセスで実行される.
  • OpenCLFunctionLoadでロードされた関数は,Wolfram言語カーネルが終了する際にアンロードされる.
  • ブロック次元はリストあるいは整数でよく,起動するのに各ブロックに対していくつのスレッドが必要であるかを表す.
  • ブロック次元の最大サイズは,OpenCLInformation 特性によって返される.
  • 起動時に,スレッドの数が(OpenCLFunctionの追加の引数として)指定されていない場合には,最大の階数と次元を持つ要素の次元が選ばれる.画像については,階数は2に設定される.
  • 起動時に,スレッドの数がブロック次元の倍数ではない場合には,スレッド数はブロック次元の倍数になるようにインクリメントされる.
  • 使用できるオプション:
  • "CompileOptions"{}直接OpenCLコンパイラに渡されるコンパイルオプション
    "Defines"AutomaticOpenCLプリプロセッサに渡される定義
    "Device"$OpenCLDevice計算に使用されるOpenCLデバイス
    "IncludeDirectories"{}コンパイルに含むディレクトリ
    "Platform"$OpenCLPlatformコンパイルに使用するOpenCLプラットフォーム
    "ShellCommandFunction"Noneコンパイルに使用するシェルコマンドで呼び出す関数
    "ShellOutputFunction"Noneコンパイルコマンドを実行したシェル出力で呼び出す関数
    "TargetPrecision"Automatic計算に使用する精度
    "WorkingDirectory"Automatic一時的なファイルが生成されるディレクトリ

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

  (5)  (5)

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

In[1]:=
Click for copyable input

ロードするOpenCLソースコードを定義する:

In[2]:=
Click for copyable input

OpenCL関数をロードする:

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

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

In[4]:=
Click for copyable input

引数を持つ関数を呼び出す:

In[5]:=
Click for copyable input

ArrayPlotを使って結果をプロットする:

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

SupportFilesディレクトリからOpenCLソースファイルを得る:

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

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

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

関数を呼び出す:

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

DLLを OpenCLLink にロードしてOpenCLFunctionとして使うことができる:

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

予めコンパイルされたライブラリの拡張子はオペレーティングシステムに依存するので,ファイルが存在することを確かめる:

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

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

In[3]:=
Click for copyable input

関数は2つを入力リストに加える:

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

この例のソースコードは OpenCLLink に付いてくる:

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

OpenCLFunctionを呼び出す際に追加の引数を与えることができる.引数は,起動するスレッドの数(あるいは大域的な作業グループサイズ)を示す.上の例を使う:

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

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

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

32のスレッドで関数を呼び出す.これにより,vectorAddの最初の32個の値のみが計算される:

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

コードに構文エラーがあると,"compilation failed(コンパイルの失敗)"というエラーが返される:

オプションを使ってビルドログを表示することができる:

上のエラーは,コード中にタイポ(コード中のの後に)があることを示す:

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