Следующее является полным примером того, как можно использовать MATLAB® Runtime User Data Interface в качестве механизма, чтобы задать профиль для приложений Parallel Computing Toolbox.
Скомпилируйте sample_pct.m
в MATLAB.
Этот пример кода использует кластер, заданный в профиле по умолчанию.
Выход принимает, что профилем по умолчанию является local
.
function speedup = sample_pct (n) warning off all; tic if(ischar(n)) n=str2double(n); end for ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time1 =toc; parpool; tic parfor ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time2 =toc; disp(['Normal loop times: ' num2str(time1) ... ',parallel loop time: ' num2str(time2) ]); disp(['parallel speedup: ' num2str(1/(time2/time1)) ... ' times faster than normal']); delete(gcp); disp('done'); speedup = (time1/time2);
Запустите код можно следующим образом после изменения профиля по умолчанию к local
, в случае необходимости.
a = sample_pct(200)
Проверьте, что вы получаете следующие результаты:
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers. Normal loop times: 0.7587,parallel loop time: 2.9988 parallel speedup: 0.253 times faster than normal Parallel pool using the 'local' profile is shutting down. done a = 0.2530
Для того, чтобы скомпилировать код MATLAB к пакету Java® и использовать Parallel Computing Toolbox™, mcruserdata
должен быть установлен непосредственно из MATLAB. Нет никакого API Java, доступного, чтобы получить доступ к MCRUserdata
как существует для C и приложений C++, созданных с MATLAB Compiler SDK™.
Установить mcruserdata
из MATLAB создайте init
функционируйте в своем классе Java. Это - отдельная функция MATLAB, которая использует setmcruserdata
установить профиль Parallel Computing Toolbox однажды. Вы затем вызываете свои другие функции, чтобы использовать функции Parallel Computing Toolbox.
Создайте следующий init
функция:
function init_sample_pct % Set the Parallel Profile: if(isdeployed) [profile, profpath] = uigetfile('*.settings'); % let the USER select file setmcruserdata('ParallelProfile', fullfile(profpath, profile)); end
Если необходимо изменить профиль в приложении, используйте parallel.importProfile
и parallel.defaultClusterProfile
методы. См. документацию Parallel Computing Toolbox для получения дополнительной информации.
Можно скомпилировать функцию из командной строки путем ввода следующего:
mcc -S -W 'java:parallelComponent,PctClass' init_sample_pct.m sample_pct.m
Для примера о том, как создать пакет Java с помощью приложения Library Compiler, смотрите, Генерируют Пакет Java и Сборку приложение Java.
Используйте следующую информацию в своем проекте:
Название проекта | parallelComponent |
ClassName | PctClass |
Файл, чтобы скомпилировать | pct_sample.m и init_pct_sample.m |
Когда компиляция заканчивается, новая папка с тем же именем, как проект создается. Эта папка содержит следующие подпапки:
for_redistribution
for_redistribution_files_only
for_testing
Если вы используете функцию графического процессора Parallel Computing Toolbox, необходимо вручную добавить файлы CU и PTX.
Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.
Если вы используете mcc
команда, используйте -a
опция.
Запишите следующее приложение драйвера Java, чтобы использовать сгенерированный пакет, можно следующим образом, с помощью совместимого с Java IDE, такого как Eclipse™:
import com.mathworks.toolbox.javabuilder.*; import parallelComponent.*; public class JavaParallelClass { public static void main(String[] args) { MWArray A = null; PctClass C = null; Object[] B = null; try { C = new PctClass(); /* Set up the runtime with Parallel Data */ C.init_sample_pct(); A = new MWNumericArray(200); B = C.sample_pct(1, A); System.out.println(" The Speed Up was:" + B[0]); } catch (Exception e) { System.out.println("The error is " + e.toString()); } finally { MWArray.disposeArray(A); C.dispose(); } } }
Выход следующие:
(UIGETFILE brings up the window to select the PROFILE file) Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers. Normal loop times: 0.7587,parallel loop time: 2.9988 parallel speedup: 0.253 times faster than normal Parallel pool using the 'local' profile is shutting down. done The Speed Up was:2.1198
Если вы не используете IDE, компилируете приложение с помощью Java командной строки, можно следующим образом:
Введите эти команды в одну строку, с помощью точки с запятой в качестве разделителя.
javac -classpath .;C:\pct_compile\javaApp\parallelComponent.jar; matlabroot/toolbox/javabuilder/jar/javabuilder.jar JavaParallelClass.java
Запустите приложение от командной строки, можно следующим образом:
java -classpath .;C:\pct_compile\javaApp\parallelComponent.jar; matlabroot/toolbox/javabuilder/jar/javabuilder.jar JavaParallelClass