7

私はMATLABでの並列コンピューティングについては初めてです。分類器(SVM)を作成する関数があり、いくつかのデータセットでテストしたいと思います。2コアのワークステーションを持っているので、テストを並行して実行したいと思います。誰かが私に違いを説明できますか?

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 spmd
      my_function(dataset(labindex));
 end

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 parfor i:1=2
      my_function(dataset(i));
 end
4

1 に答える 1

12

spmd は並列領域ですが、parfor は並列 for ループです。違いは、spmd 領域では、並行して実行できるタスクに関してはるかに大きな柔軟性があることです。for ループを記述したり、分散配列やベクトルを操作したりできます。通常、複数のループで構成されるワークフロー全体をプログラムできます。これには代償が伴います。スレッド間での作業とデータの分散について詳しく知る必要があります。たとえば、ループを並列化するには、ワーカー間でループ インデックス範囲を明示的に分割する必要があり ( labindexを使用してコードで行った)、場合によっては分散配列を作成する必要があります。

一方、parfor はこれだけを行います - 並列化された for ループ。自動的に並列化、追加できるので、作業は MATLAB によってワーカー間で分割されます。

1 つのループのみを並行して実行し、後でローカル クライアントで結果を処理する場合は、parfor を使用する必要があります。MATLAB プログラム全体を並列化する場合は、spmd と作業分散の複雑さに対処する必要があります。

于 2012-09-12T14:03:39.503 に答える