Ниже приведен полный пример использования интерфейса пользовательских данных MATLAB ® Runtime в качестве механизма определения профиля для приложений 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™ параллельных вычислений, mcruserdata должен быть установлен непосредственно из MATLAB. Нет API Java, доступного для доступа к MCRUserdata как и для приложений C и C++, построенных с помощью MATLAB Compiler SDK™.
Для установки mcruserdata из MATLAB создайте init функция в классе Java. Это отдельная функция MATLAB, которая использует setmcruserdata для однократной установки профиля панели инструментов параллельных вычислений. Затем вы вызываете другие свои функции, чтобы использовать функции 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 методы. Дополнительные сведения см. в документации панели инструментов для параллельных вычислений.
Можно скомпилировать функцию из командной строки, введя следующее:
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
Примечание
При использовании функции графического процессора панели инструментов Parallel Computing Toolbox необходимо вручную добавить файлы PTX и CU.
При использовании приложения компилятора библиотеки щелкните Добавить файлы/каталоги на вкладке Сборка.
При использовании 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