Предоставьте информацию профиля времени выполнения для приложений Parallel Computing Toolbox

Следующее является полным примером того, как можно использовать MATLAB® Runtime User Data Interface в качестве механизма, чтобы задать профиль для приложений Parallel Computing Toolbox.

Шаг 1: запишите свой код Parallel Computing Toolbox

  1. Скомпилируйте 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);
    
  2. Запустите код можно следующим образом после изменения профиля по умолчанию к local в случае необходимости.

    a = sample_pct(200)

  3. Проверьте, что вы получаете следующие результаты:

    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

Шаг 2: установите профиль Parallel Computing Toolbox

В порядке скомпилировать код 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.defaultClusterProfile и parallel.importProfile. См. документацию Parallel Computing Toolbox для получения дополнительной информации.

Шаг 3: скомпилируйте свою функцию с приложением Library Compiler или компилятором командной строки

Можно скомпилировать функцию из командной строки путем ввода следующего:

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.

Шаг 4: запишите приложение драйвера Java

Запишите следующее приложение драйвера 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

Если вы не используете 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 

Похожие темы