Пользовательский интерфейс данных MATLAB Runtime

Эта функция позволяет данным быть совместно использованными MATLAB® Экземпляр во время выполнения, код MATLAB, работающий, что экземпляр MATLAB Runtime и код обертки, который создал экземпляр MATLAB Runtime. Через вызовы API интерфейса MATLAB Runtime User Data вы получаете доступ к данным MATLAB Runtime путем создания ассоциативного массива на экземпляр mxArrays, состоя из отображения от строковых ключей до mxArray значения. Причины того, чтобы сделать это включают, но не ограничиваются:

  • Необходимо предоставить информацию профиля MATLAB Runtime клиенту, запускающему приложение, созданное с программным обеспечением Parallel Computing Toolbox™. Профили могут быть предоставлены (и изменены) на базисе на выполнение. Например, два экземпляра того же приложения могут запуститься одновременно с различными профилями.

  • Вы хотите инициализировать MATLAB Runtime постоянными значениями, к которым могут получить доступ все ваши приложения MATLAB.

  • Вы хотите настроить глобальную рабочую область — глобальная переменная или переменные, к которым могут получить доступ MATLAB и ваш клиент.

  • Вы хотите сохранить состояние любой переменной или группу переменных.

Программное обеспечение MATLAB Compiler SDK™ поддерживает доступ к состоянию экземпляра НА MATLAB RUNTIME через объектно-ориентированный API. Доступ к состоянию на экземпляр является дополнительным. Можно получить доступ к этому состоянию путем добавления setmcruserdata.m и getmcruserdata.m к вашему проекту развертывания или путем определения их на командной строке. В качестве альтернативы можно использовать функцию помощника, чтобы вызвать эти методы как показано в Предоставлении Кластерных Профилей для Приложений Parallel Computing Toolbox.

Для получения дополнительной информации смотрите Используя Пользовательский Интерфейс Данных MATLAB Runtime.

Предоставление кластерных профилей для приложений Parallel Computing Toolbox

Следующее является полным примером того, как можно использовать Пользовательский Интерфейс Данных MATLAB Runtime в качестве механизма, чтобы задать кластерный профиль для приложений 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 к компоненту.NET и использовать Parallel Computing Toolbox, mcruserdata должен быть установлен непосредственно из MATLAB. Нет никакого API.NET, доступного, чтобы получить доступ к MCRUserdata как существует для 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

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

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

mcc -W 'dotnet:netPctComp,NetPctClass' 
          init_sample_pct.m sample_pct.m -T link:lib

Альтернативно, можно использовать приложение Library Compiler можно следующим образом:

  1. Выполните шаги в, Генерируют блок.NET и Создают Приложение.NET, чтобы скомпилировать ваше приложение. Когда компиляция заканчивается, новая папка (с тем же именем как проект) создается. Эта папка содержит две подпапки: distrib и src.

    Имя библиотекиnetPctComp
    ClassName NetPctClass
    Файлы, чтобы скомпилировать sample_pct.m и init_sample_pct.m

    Примечание

    Если вы используете функцию графического процессора Parallel Computing Toolbox, необходимо вручную добавить файлы CU и PTX.

    Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.

    Если вы используете mcc команда, используйте -a опция.

  2. Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only папка, которая содержит следующее вашим конечным пользователям.

    Примечание

    Целевая машина конечного пользователя должна иметь доступ к кластеру.

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

После добавляющих ссылок на ваш компонент и на MWArray в вашей Microsoft® Visual Studio® проект, запишите следующее приложение драйвера.NET, чтобы использовать компонент, можно следующим образом. Смотрите Интегрируют Простую функцию MATLAB В.NET Applicationfor больше информации.

Примечание

Этот пример кода был записан с помощью 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);
            }
 
        }
    }
}

Выход следующие: