Ниже приведен полный пример использования 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® упаковать и использовать Toolbox™ Parallel Computing, mcruserdata
должен быть установлен непосредственно из MATLAB. Нет доступного Java API для доступа к 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 |
Имя класса | PctClass |
Файл для компиляции | pct_sample.m и init_pct_sample.m |
Когда компиляция заканчивается, создается новая папка с таким же именем, как и проект. Эта папка содержит следующие подпапки:
for_redistribution
for_redistribution_files_only
for_testing
Примечание
Если вы используете функцию GPU Parallel Computing Toolbox, необходимо вручную добавить файлы PTX и CU.
Если вы используете приложение 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