Эта функция позволяет совместно использовать данные между MATLAB® Образец среды выполнения, код MATLAB, выполняемый на этом образце MATLAB Runtime, и код оболочки, который создал MATLAB Runtime. Посредством вызовов API интерфейса пользовательских данных MATLAB Runtime, вы получаете доступ к данным MATLAB Runtime путем создания ассоциативного массива mxArray
по экземплярамs, состоящий из отображения из строковых ключей в
mxArray
значения. Причины для этого включают, но не ограничиваются:
Вы должны предоставить информацию о профиле MATLAB Runtime клиенту, выполняющему приложение, созданное с помощью программного обеспечения Parallel Computing Toolbox™. Профили могут поставляться (и изменяться) по базису выполнения. Например, два образцов одного и того же приложения могут запускаться одновременно с различными профилями.
Вы хотите инициализировать MATLAB Runtime с постоянными значениями, которые могут быть доступны всем вашим приложениям MATLAB.
Вы хотите настроить глобальную рабочую область - глобальную переменную или переменные, к которым могут получить доступ MATLAB и ваш клиент.
Вы хотите сохранить состояние любой переменной или группы переменных.
MATLAB Compiler SDK™ поддерживает доступ к образцу по MATLAB во время выполнения через объектно-ориентированный API. Доступ к состоянию экземпляра является необязательным. Вы можете получить доступ к этому состоянию, добавив setmcruserdata.m
и getmcruserdata.m
в проект развертывания или путем указания их в командной строке. Кроме того, можно использовать вспомогательную функцию для вызова этих методов, как показано на рисунке «Поставка профилей кластера для приложений Parallel Computing Toolbox».
Для получения дополнительной информации смотрите Использование интерфейса пользовательских данных MATLAB Runtime.
Ниже приведен полный пример использования интерфейса пользовательских данных 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 в компонент .NET и использовать Parallel Computing Toolbox, mcruserdata
должен быть установлен непосредственно из MATLAB. Для доступа к MCRUserdata
отсутствует API .NET как и для приложений C и C++, созданных с MATLAB Compiler SDK.
Чтобы задать mcruserdata
из MATLAB создайте init
в классе .NET. Это отдельная функция MATLAB, которая использует setmcruserdata
чтобы установить профиль Parallel Computing Toolbox один раз. Затем вы вызываете свои другие функции, чтобы использовать функции Parallel Computing Toolbox.
Создайте следующую init
функция:
function init_sample_pct % Set the Parallel Profile: if(isdeployed) [profile] = uigetfile('*.settings'); % let the USER select file setmcruserdata('ParallelProfile', [profile]); end
Можно скомпилировать функцию из командной строки, введя следующее:
mcc -W 'dotnet:netPctComp,NetPctClass' init_sample_pct.m sample_pct.m -T link:lib
Также можно использовать приложение Library Compiler следующим образом:
Чтобы скомпилировать приложение, выполните следующие действия в разделе «Создание сборки .NET» и «Создание приложения .NET». Когда компиляция заканчивается, создается новая папка (с тем же именем, что и проект). Эта папка содержит две подпапки: distrib
и src
.
Имя проекта | netPctComp |
Имя класса | NetPctClass |
Файл для компиляции | sample_pct.m и init_sample_pct.m |
Примечание
Если вы используете функцию GPU Parallel Computing Toolbox, необходимо вручную добавить файлы PTX и CU.
Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.
Если вы используете mcc
команда, используйте -a
опция.
Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only
папка, содержащая следующее, для конечных пользователей.
netPctComp.dll
MWArray.dll
Профиль кластера
Примечание
Конечный компьютер конечного пользователя должен иметь доступ к кластеру.
После добавления ссылок на ваш компонент и на MWArray
в вашей корпорации Майкрософт® Визуальная студия® напишите следующее приложение драйвера .NET для использования компонента следующим образом. См. раздел Интеграция простой функции MATLAB для получения дополнительной информации.
Примечание
Этот пример кода был написан с использованием Microsoft Visual Studio 2008.
using System; using MathWorks.MATLAB.NET.Utility; using MathWorks.MATLAB.NET.Arrays; using netPctComp; namespace PctNet { class Program { static void Main(string[] args) { try { NetPctClass A = new NetPctClass(); // Initialize the PCT set up A.init_sample_pct(); double var = 300; MWNumericArray out1; MWNumericArray in1 = new MWNumericArray(300); out1 = (MWNumericArray)A.sample_pct(in1); Console.WriteLine("The speedup is {0}", out1); Console.ReadLine(); // Wait for user to exit application } catch (Exception exception) { Console.WriteLine("Error: {0}", exception); } } } }
Выходные выходы следующие: