このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
クラスター ワーカーのベンチマーク
この例では、クラスター ワーカー上で MATLAB® ベンチマークを実行する方法を説明します。ベンチマークは、MATLAB の複数の計算の実行速度を測定します。これらの結果をプロットし、クライアントとワーカーのパフォーマンスを比較できます。
この例では、pbench
を使用します。これは、MATLAB ベンチマーク bench
のテストのサブセットを実行する関数です。このサブセットのテストには、LU、FFT、ODE およびスパースがあります。これらのテストの詳細については、bench
を参照してください。
MATLAB ベンチマークをクライアント上で実行します。
tClient = pbench
tClient = 1×4
0.0766 0.0725 0.0194 0.1311
関数 parpool
を使用して並列プール p
を作成します。既定で、parpool
は既定のクラスター上でワーカーの並列プールを起動します。既定のクラスターは、MATLAB の [ホーム] タブの [環境] 領域で、[並列]、[既定のクラスターの選択] で選択します。
p = parpool();
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
関数 parfevalOnAll
を使用して、ワーカー上で MATLAB ベンチマークを実行します。parfevalOnAll
は関数の実行をプール内のすべてのワーカーにオフロードし、結果が準備されると、それを parallel.FevalOnAllFuture
オブジェクトに格納して返します。ワーカーから結果を取得するには、Future オブジェクトに fetchOutputs
を使用します。
f = parfevalOnAll(@pbench,1); tWorkers = fetchOutputs(f);
クライアントとワーカーの結果を結合し、棒グラフを使用してそれらをプロットします。ワーカーとクライアントの相対的なパフォーマンスを比較します。
tClientAndWorkers = [tClient;tWorkers]; bar(tClientAndWorkers'); xticklabels({'LU','FFT','ODE','Sparse'}); xlabel("Benchmark type"); ylabel("Benchmark execution time (seconds)"); workerNames = strcat("Worker ",string(1:size(tWorkers,1))); legend(["Client",workerNames],'Location','bestoutside');
既定で、MATLAB クライアントはマルチスレッディングが有効になっています。マルチスレッディングにより、複数の計算スレッドを使用して、複数のコアで lu
、fft
などの MATLAB の数値関数を実行できます。各ワーカーは通常 1 つのコアに関連付けられているため、既定で各ワーカーは 1 つの計算スレッドを使用します。そのため、たとえば LU テストの実行速度は、MATLAB クライアントの方がワーカーより高くなります。ODE などの他の問題ではマルチスレッディングによるメリットが得られないため、MATLAB クライアントとワーカーでパフォーマンスは変わりません。parfor
などを使用して MATLAB 並列ワーカーに計算を分散するかどうかを決めるときには、この違いを考慮してください。詳細については、parfor を使用するタイミングの決定を参照してください。マルチスレッディングの詳細については、Run MATLAB on multicore and multiprocessor machines を参照してください。
参考
bench
| parpool
| fetchOutputs
| parfevalOnAll