exponenta event banner

Предоставление информации о профиле времени выполнения для приложений панели инструментов параллельных вычислений

Ниже приведен полный пример использования интерфейса пользовательских данных MATLAB ® Runtime в качестве механизма определения профиля для приложений Parallel Computing Toolbox.

Шаг 1: Напишите код набора инструментов для параллельных вычислений

  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: Настройка профиля панели инструментов параллельных вычислений

Для компиляции кода 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 методы. Дополнительные сведения см. в документации панели инструментов для параллельных вычислений.

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

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

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 вариант.

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

Связанные темы