はじめに

CUDALink を使うと,GPU(グラフィカルプロセッシングユニット)上のCUDA並列計算アーキテクチャが Mathematica から利用できるようになる.CUDALink にはCUDA対応のGPUを使って線形代数,金融シミュレーション,画像処理など多くの分野におけるパフォーマンスを向上させる関数を含んでいる.CUDALink はCUDAと既存の Mathematica 開発ツールを統合し,高度な自動化と制御を可能にする.

Getting Started

CUDALink 関数を使うには,アプリケーションをロードしておかなければならない.

In[1]:=
Click for copyable input

CUDAQはCUDAが利用できるデバイスが使用できるかどうかを示す.

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

CUDAQFalseを返す場合は,CUDALink は使えない.詳細は「CUDALink の設定」を参照のこと.

CUDAInformationはグラフィックスプロセッシングユニットについてのより詳しい情報を表示する.ここではGPUは96コアのQuadro FXユニットで,グラフィックスメモリは1GBである.

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

Mathematica では,RandomRealコマンドを使って実数の乱数行列を作ることができる.

In[4]:=
Click for copyable input

以下のように,行列をそれ自体と掛け合せる.

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

グラフィックスプロセッサを使い,CUDADotで掛け算を行う.

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

CUDAMemoryLoadでGPU上にデータをロードするとさらに速い.結果はCUDAMemory式となる.これはその後の計算で,データへのハンドルとして使うことができる.

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

CUDAMemoryCUDADotに渡す.これは結果をGUP上に保管し,新しいCUDAMemory式を返す.

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

グラフィックスプロセッサ常のデータはCUDAMemoryGetで取り出すことができる.以下では,結果の次元が想定どおりに示される.

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

CUDAと CUDALink

CUDAはNVIDIA GPU(グラフィックスプロセッシングユニット)のための計算エンジンとして使われる.CUDAは CUDALink を使った場合の Mathematica 等のソフトウェアアプリケーションによって呼び出すことができるプログラミングインターフェースを提供する.これによりCUDA GPUが並列計算に使用でき,多くの並行スレッドが実行できるようになる.以下のグラフは,CPUとGPUのパフォーマンスを示している.これは1秒あたりの10億回の浮動小数点演算の実行回数(GFLOP/s)で示されている.

1.gif

CUDALink を使うと Mathematica ユーザはCUDAプログラミングレイヤーを直接呼び出すことができるようになる.また,CUDALink は高性能コア線形代数やフーリエ変換等の分野での解法のための,多くのCUDAライブラリの高レベル関数を提供する.

CUDALink の適用分野

CUDALink は多くの分野のための関数を提供する.これらには注意深くチューニングされた線形代数,離散フーリエ変換,画像処理アルゴリズム等が含まれる.このセクションでは,この中からいくつかの適用分野を紹介する.

画像処理

CUDALink はGPU上で動作するように慎重にチューニングされた多くの画像処理アルゴリズムを提供する.この中には,画像の二項演算(CUDAImageAddCUDAImageSubtractCUDAImageMultiplyCUDAImageDivide),モルフォロジー演算(CUDAErosionCUDADilationCUDAOpeningCUDAClosing),画像のたたみ込み(CUDAImageConvolve)等が含まれる.

CUDALink の機能を使用するには,まず以下のように CUDALink アプリケーションをロードしなければならない.

In[1]:=
Click for copyable input

これでCUDAベースの画像処理機能が画像に直接適用できるようになった.次の例ではCUDAImageMultiplyを使って2つの入力画像のチャンネル上での積算を実行する.

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

CUDA関数は Mathematica 関数であるので,他の関数(Manipulate等)と併用することができる.次の例では線形補間を実行するが,補間パラメータを変化させるのにManipulateを使う.

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

CUDA関数は Mathematica の精選されたデータ,ImportExport,可視化関数と組み合せて使うこともできる.次の例ではコアとなる計算はCUDAで行われるが,他の関数については Mathematica を使う.

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

フーリエ解析

関数CUDAFourierおよびCUDAInverseFourierはCUDAを使ってフーリエ変換と逆フーリエ変換を実行する.

CUDALink の機能を使用するには,まず以下のように CUDALink アプリケーションをロードしなければならない.

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

CUDA関数への入力がCUDAMemoryハンドルなら,結果もCUDAMemoryハンドルとなる.

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

その後,CUDAMemoryGetを使ってGPUからデータを取り出すことができる.

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

この一般的な原理はすべての CUDALink 関数に当てはまる.これにより,GPU上にデータを保管しておくと,検証,開発,そしてその後の作業が行いやすくなり,効率が向上する.

CUDALink プログラミング

CUDALink の鍵となる機能は,新しいGPUプログラムの開発と,そのプログラムの Mathematica の作業への統合を行いやすくする方法である.これにはCコンパイラがインストールされていることが必要である.

CUDALink の機能を使用するには,まず以下のように CUDALink アプリケーションをロードしなければならない.

In[14]:=
Click for copyable input

簡単なCUDA関数をロードする.これは入力ベクトルを取り,各要素を2倍する.

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

CUDAFunctionLoadにはCコンパイラがインストールされていることが必要である.これが利用できない場合は,「Cコンパイラ」を参照されたい.

関数の呼出しに使われる入力ベクトルである.

In[16]:=
Click for copyable input

CUDAFunctionを呼び出す.

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

GPUにデータをロードし,データ上に関数を呼び出す.結果はCUDAMemory式である.

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

GPUから結果を取り出す.

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

以下に示すように,CUDAFunctionInformationで関数の情報を得ることができる.

In[18]:=
Click for copyable input
Out[18]=
New to Mathematica? Find your learning path »
Have a question? Ask support »