Этот пример показывает, как запустить сравнительный тест MATLAB на ваших кластерных рабочих. Сравнительный тест измеряет скорость выполнения нескольких вычислений MATLAB. Можно построить эти результаты и сравнить производительность клиента и рабочих.
Этот пример использует pbench
, функцию, которая запускает подмножество тестов в bench
, сравнительном тесте MATLAB. Тесты в этом подмножестве являются LU, БПФ, ОДУ, и Разреженный. Для получения дополнительной информации на этих тестах, смотрите bench
.
Запустите сравнительный тест MATLAB на клиенте.
tClient = pbench
tClient = 1×4
0.1590 0.1599 0.0939 0.1673
Создайте параллельный пул с помощью функции parpool
. По умолчанию parpool
запускает параллельный пул с рабочих на вашем кластере по умолчанию. Выберите свой кластер по умолчанию на вкладке MATLAB Home в области Environment, параллельно> Выбирают Default Cluster.
parpool();
Starting parallel pool (parpool) using the 'MyCluster' profile ... Connected to the parallel pool (number of workers: 4).
Запустите сравнительный тест MATLAB на рабочих, использующих функцию parfevalOnAll
. parfevalOnAll
разгружает выполнение функции всем рабочим в пуле и возвращает объект parallel.FevalOnAllFuture
содержать результаты, когда они готовы. Чтобы получить результаты рабочих, используйте fetchOutputs
на будущем объекте.
f = parfevalOnAll(@pbench,1); tWorkers = fetchOutputs(f);
Объедините результаты клиента и рабочих, и постройте их использующий столбиковую диаграмму. Сравните относительную производительность рабочих и клиента.
tClientAndWorkers = [tClient;tWorkers]; ax = axes; bar(tClientAndWorkers'); ax.XTickLabel = ["LU","FFT","ODE","Sparse"]; xlabel("Benchmark type"); ylabel("Benchmark execution time (seconds)"); workerNames = strcat("Worker ",string(1:size(tWorkers,1))); legend(["Client",workerNames]);
По умолчанию клиенту MATLAB включают для многопоточности. Многопоточность включает MATLAB числовые функции, такие как lu
или fft
, чтобы работать на нескольких ядрах с помощью нескольких вычислительных потоков. Рабочие используют один вычислительный поток по умолчанию, потому что они обычно сопоставляются с одноядерным. Поэтому тест LU, например, запускается быстрее на клиенте MATLAB, чем на рабочих. Другие проблемы, такие как ОДУ, не могут извлечь выгоду из многопоточности, таким образом, они выполняют то же самое на клиенте MATLAB и рабочих. Рассмотрите это различие при решении, распределить ли вычисления рабочим параллели MATLAB, такой как с parfor
. Для получения дополнительной информации смотрите Решение, Когда Использовать parfor. Для получения дополнительной информации о многопоточности смотрите Выполнение MATLAB на многожильных и многопроцессорных машинах.
bench
| fetchOutputs (FevalFuture)
| parfevalOnAll
| parpool