Следующее является полным примером того, как можно использовать MATLAB® Пользовательский Интерфейс Данных во время выполнения как механизм, чтобы задать профиль для приложений 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