- Mathworks / Parallel Computing Toolbox
- mynavi / 2010-11-29: 【レポート】【MATLAB EXPO2010】3行書くだけでGPUコンピューティングの利用が可能に
- TSUBAME計算サービス / MATLAB 利用の手引き / 4. Parallel Computing Toolbox の利用
以下に解説があるが MATLAB 単体の行列演算については R2007a で multithread 対応済み。
つまり Parallel Computing Toolbox を導入していない環境でも行列演算に限定すれば実はマルチコアの恩恵は既に十分に得られている。
2013-07-23 現在の最新バージョンである R2013a では maxNumCompThreads で設定した値に関わらず、計算スレッドの最大数は、使用しているマシン上の計算コア数が上限となる。
このため Hyper Threading 対応の環境では CPU 負荷は 50% までしか使い切れないが、仮に Hyper Threading が利用出来た場合でもパフォーマンス上昇は通常 3 割程度がせいぜいある。
parfor を用いる場合 NumWorkers はデフォルトで物理コア数が採用される。このため Hyper Threading 環境で標準設定のまま使うと CPU 負荷は 50% までしか使い切れない。
Hyper Threading 環境で CPU 負荷を 100% まで使い切るには Cluster Profiles を編集して NumWorkers に Hyper Threading による仮想コア数を設定すれば良い。
ただし parfor による並列化は比較的オーバーヘッドが大きくなる点には注意が必要。
parfor 内の演算が行列演算主体である場合、既に物理コアによるリソースはほぼ使い切っているため Hyper Threading によるメリットよりもオーバーヘッドによるペナルティのほうが顕著となるため、パフォーマンスはかえって悪化する可能性が高い。Hyper Threading の無い環境に至っては、オーバーヘッドによるペナルティしか生じない。
結論として parfor でパフォーマンスが向上可能なケースというのは parfor 内の処理が行列演算主体でない場合、もしくはクラスターを組んでいる場合に限定される。
クラスターを使うには MATLAB Distributed Computing Server も必要らしい。
2013-07-23 現在の最新バージョンである R2013a では maxNumCompThreads で設定した値に関わらず、計算スレッドの最大数は、使用しているマシン上の計算コア数が上限となる。
このため Hyper Threading 対応の環境では CPU 負荷は 50% までしか使い切れないが、仮に Hyper Threading が利用出来た場合でもパフォーマンス上昇は通常 3 割程度がせいぜいある。
parfor を用いる場合 NumWorkers はデフォルトで物理コア数が採用される。このため Hyper Threading 環境で標準設定のまま使うと CPU 負荷は 50% までしか使い切れない。
Hyper Threading 環境で CPU 負荷を 100% まで使い切るには Cluster Profiles を編集して NumWorkers に Hyper Threading による仮想コア数を設定すれば良い。
ただし parfor による並列化は比較的オーバーヘッドが大きくなる点には注意が必要。
parfor 内の演算が行列演算主体である場合、既に物理コアによるリソースはほぼ使い切っているため Hyper Threading によるメリットよりもオーバーヘッドによるペナルティのほうが顕著となるため、パフォーマンスはかえって悪化する可能性が高い。Hyper Threading の無い環境に至っては、オーバーヘッドによるペナルティしか生じない。
結論として parfor でパフォーマンスが向上可能なケースというのは parfor 内の処理が行列演算主体でない場合、もしくはクラスターを組んでいる場合に限定される。
クラスターを使うには MATLAB Distributed Computing Server も必要らしい。
parfor が上記のような状況なので Parallel Computing Toolbox の本命は実はこっちなんじゃないかって気がしてる。
以下の記事によると R2010b の Parallel Computing Toolbox から GPU Computing が利用可能になった模様。
上記の記事のサンプルを引用すると以下の3ステップで完結する。
GPU Computing に必要な GPU の要件については以下に記述がある。
残念ながら現時点では OpenCL には非対応らしい。
CUDA 対応 GPU の Compute Capability については以下に情報がある。
Tesla が利用できる場合はあまり問題にならないが GeForce しか利用出来ない場合、倍精度浮動小数点演算に著しい機能制限が施されているので注意。
単精度で問題ない場合は gpuArray の classUnderlying を single に統一しておくと良い。
以下の記事によると R2010b の Parallel Computing Toolbox から GPU Computing が利用可能になった模様。
- mynavi / 2010-11-29: 【レポート】【MATLAB EXPO2010】3行書くだけでGPUコンピューティングの利用が可能に
上記の記事のサンプルを引用すると以下の3ステップで完結する。
GX = gupArray(X); % GPUメモリに送信 GY = fft2(GX); % fft2をGPU 上で実行 Y = gather(GY); % 結果をメインメモリへ回収
GPU Computing に必要な GPU の要件については以下に記述がある。
- System Requirements and Platform Availability by Product # Parallel Computing Toolbox / Requirements for GPU Computing
残念ながら現時点では OpenCL には非対応らしい。
CUDA 対応 GPU の Compute Capability については以下に情報がある。
- NVIDIA Developer Zone / CUDA GPUs
Tesla が利用できる場合はあまり問題にならないが GeForce しか利用出来ない場合、倍精度浮動小数点演算に著しい機能制限が施されているので注意。
単精度で問題ない場合は gpuArray の classUnderlying を single に統一しておくと良い。
少なくとも R2013a においては sparse matrix が double 限定みたいな状況で single が使えない。
と言うことで、sparse matrix 使ってる場合 gpuArray に持って行っても double じゃないと計算出来ないということになるので、Kepler 世代の倍精度ペナルティーをもろにかぶってしまう模様。
うわ、使えねー。
と言うことで、sparse matrix 使ってる場合 gpuArray に持って行っても double じゃないと計算出来ないということになるので、Kepler 世代の倍精度ペナルティーをもろにかぶってしまう模様。
うわ、使えねー。
タグ
コメントをかく