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

Ниже приведен полный пример использования MATLAB® Интерфейс пользовательских данных во время выполнения как механизм для задания профиля для приложений 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® упаковать и использовать 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.

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

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

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 опция.

Шаг 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 

Похожие темы