並列計算とは
並列計算では、多数の計算を同時に実行できます。多くの場合、大規模な問題は小規模な問題に分割でき、小規模な問題は同時に解決されます。
並列計算の使用を検討する主な理由は次のとおりです。
タスクを分散して同時実行することで時間を節約
データを分散してビッグ データの問題を解決
デスクトップ コンピューターのリソースを利用してクラスターおよびクラウド コンピューティングにスケール アップ
Parallel Computing Toolbox™ では、以下ができます。
parfor
やparfeval
などの対話型並列計算ツールを使用してコードを高速化distributed
、tall
、datastore
、mapreduce
などの対話型ビッグ データ処理ツールを使用して計算をスケール アップgpuArray
を使用してコンピューターの GPU で計算を高速化batch
を使用して計算をコンピューター クラスターまたはクラウド コンピューティング機能にオフロード
次に示す並列計算の概念を覚えておくと便利です。
ノード: 1 つ以上の CPU/GPU を含むスタンドアロン コンピューター。ノードはネットワーク化されてクラスターまたはスーパーコンピューターを形成します
スレッド: スケジューラで個別に管理できる最小の一連の命令。GPU、マルチプロセッサまたはマルチコア システムでは、複数のスレッドを同時に実行できます (マルチスレッド)
バッチ: 関数スクリプトの実行をオフロードしてバックグランドで実行
スケーラビリティ: リソースの追加による並列実行速度の上昇
MATLAB® および Parallel Computing Toolbox が提供するツールには以下のものがあります。
"MATLAB ワーカー": グラフィカル デスクトップなしでバックグラウンドで実行される MATLAB 計算エンジン。関数を Parallel Computing Toolbox で使用すると、タスクが自動的に分割され、そのタスクがこれらのワーカーに割り当てられて、計算が並列実行されます。ローカル ワーカーを実行すると、マルチコア デスクトップ コンピューターのすべてのコアを活用できます。また、MATLAB Parallel Server™ を使用してスケール アップし、マシンのクラスターでワーカーを実行することもできます。操作する MATLAB セッションは "MATLAB クライアント" と呼ばれています。このクライアントは並列言語関数を使用してワーカーに指示します。
並列プール:
parpool
または自動並列サポートがある関数を使用して作成された MATLAB ワーカーの並列プール。既定では、並列言語関数は必要に応じて自動的に並列プールを作成します。詳細については、並列プールでのコードの実行を参照してください。既定のローカル プロファイルでは、シングルの計算スレッドを使用する物理 CPU コアごとの既定のワーカー数は 1 つです。これは、各物理コアが複数の仮想コアをもつことができる一方で、仮想コアが共有浮動小数点単位 (FPU) などの一部のリソースを共有していることが原因です。MATLAB での計算の大部分は倍精度浮動小数点なので、この単位が使用されます。物理コアごとのワーカー数を 1 つに制限すると、各ワーカーは浮動小数点単位に排他的にアクセスすることになるため、通常は計算コードのパフォーマンスが最適化されます。コードの計算量が多くない場合、たとえば入出力 (I/O) が多い場合は、物理コアごとに最大 2 つのワーカーを使用することを検討してください。少なすぎるリソースで多すぎるワーカーを実行すると、マシンのパフォーマンスと安定性に影響が生じる可能性があります。
高速化: コードを複数の MATLAB ワーカーまたは GPU で、たとえば
parfor
、parfeval
、gpuArray
を使用して実行し、コードを高速化します。データのスケール アップ: 複数の MATLAB ワーカーにまたがるビッグ データを、tall 配列と分散配列を使用して分割します。詳細については、ビッグ データの処理を参照してください。
非同期処理:
parfeval
を使用して、完了を待たずに計算タスクをバックグラウンドで実行します。クラスターおよびクラウドへのスケール アップ計算タスクがローカル コンピューターにとって大きすぎるまたは遅すぎる場合は、MATLAB Parallel Server を使用して、計算をオンサイトのクラスターまたはクラウドにオフロードできます。詳細については、クラスターとクラウドを参照してください。