exponenta event banner

Будущее

Запрос выполнения функции для работников параллельного пула или клиента MATLAB

Описание

A Future объект представляет функцию, которая должна выполняться для работников параллельного пула или клиента MATLAB ®.

Создание

Существует несколько способов создания Future объект:

  • Укажите функцию для выполнения на работнике в параллельном пуле с помощью parfeval. parfeval функция создает FevalFuture объект для представления выполнения функции и сохранения результатов. Создание нескольких FevalFutures, звонок parfeval многократно; например, можно создать вектор из FevalFutures в for-луп.

  • Укажите функцию, выполняемую для каждого работника в параллельном пуле с помощью parfevalOnAll. parfevalOnAll функция создает FevalOnAllFuture объект для представления выполнения функции и сохранения результатов.

  • Укажите функцию для выполнения в клиенте MATLAB Future объекты завершены с использованием afterAll. afterAll функция создает AfterAllFuture объект для представления выполнения функции и сохранения результатов.

  • Укажите функцию, которая будет выполняться на клиенте MATLAB после каждого Future объект завершен с помощью afterEach. afterEach функция создает AfterEachFuture объект для представления выполнения функции и сохранения результатов.

Таким образом, в следующей таблице описаны доступные типы будущих объектов.

Будущий объектОписание
FevalFutureОдинок parfeval Будущий экземпляр
FevalOnAllFutureparfevalOnAll Будущий экземпляр
AfterAllFutureafterAll Будущий экземпляр
AfterEachFutureafterEach Будущий экземпляр

Future объекты являются локальными объектами и доступны только в созданном сеансе MATLAB.

Свойства

развернуть все

Общие параметры

Это свойство доступно только для чтения.

Дата и время создания этого будущего, указанного как datetime объект.

Типы данных: datetime

Это свойство доступно только для чтения.

Сведения об ошибке, указанные как исключение. Если Future завершается без ошибок, то это поле пустое.

Это свойство доступно только для чтения.

Дата и время завершения работы этого будущего, указанного как datetime объект.

Типы данных: datetime

Это свойство доступно только для чтения.

Вычисляемая функция, заданная как дескриптор функции.

Пример: @rand

Типы данных: function_handle

Это свойство доступно только для чтения.

Числовой идентификатор будущего, заданный как целое число.

Типы данных: double

Это свойство доступно только для чтения.

Входные аргументы выполняемой функции, указанные как массив ячеек.

Пример: {[1]}

Пример: {[1,2], [2,1]}

Типы данных: cell

Это свойство доступно только для чтения.

Число аргументов, возвращаемых выполняемой функцией, указанное как целое число.

Типы данных: double

Это свойство доступно только для чтения.

Выходные аргументы, заданные как массив ячеек результатов выполнения функции после ее завершения. Если Future завершается с ошибками, поле пустое. Чтобы увидеть ошибку, проверьте Error собственность.

Пример: {[3.14]}

Типы данных: cell

Это свойство доступно только для чтения.

Дата и время запуска этого будущего, указанного как datetime объект.

Типы данных: datetime

Это свойство доступно только для чтения.

Текущее состояние будущего, указанное как одно из следующих значений: 'pending', 'queued', 'running', 'finished', 'failed', или 'unavailable'.

Типы данных: char

Варианты FevalFuture

Это свойство доступно только для чтения.

Текст, полученный при выполнении функции, указанный как char массив.

Типы данных: char

Это свойство доступно только для чтения.

Очередь из Future объекты, содержащие это Future, указано как FevalQueue. Проверьте эту очередь, чтобы определить количество Future запущенные или поставленные в очередь объекты.

Типы данных: FevalQueue

Это свойство доступно только для чтения.

Индикация считывания выходных сигналов fetchNext или fetchOutputs, указано как логическое.

Типы данных: logical

Опции FevalOnAllFuture

Это свойство доступно только для чтения.

Текст, полученный при выполнении функции, указанный как массив ячеек символьных массивов, который содержит текст для каждого работника.

Типы данных: cell

Это свойство доступно только для чтения.

Очередь из Future объекты, содержащие это Future, указано как FevalQueue. Проверьте эту очередь, чтобы определить количество Future запущенные или поставленные в очередь объекты.

Типы данных: FevalQueue

Функции объекта

развернуть все

afterAllУкажите функцию для вызова после всех параллельных. Фьючерсы завершены
afterEachУкажите функцию для вызова после каждой параллели. Будущее завершено
cancelОтмена очереди или запуска в будущем
fetchOutputsПолучение всех выходных аргументов из Future
isequalИстина, если у фьючерса тот же идентификатор
waitДождаться завершения фьючерсов
fetchNextПолучение следующих доступных непрочитанных выходных данных FevalFuture

Примеры

свернуть все

Можно комбинировать afterEach и afterAll для автоматического вызова дополнительных функций по результатам фьючерсов. Оба afterEach и afterAll генерировать будущие переменные, которые могут быть снова использованы в afterEach и afterAll.

Использовать parfeval для вычисления случайных векторов в рабочих. С настройками по умолчанию, parfeval создает parpool автоматически, если он еще не создан.

for idx= 1:10
    f(idx) = parfeval(@rand, 1, 1000, 1);
end
Starting parallel pool (parpool) using the 'local' profile ...
connected to 8 workers.

Вычислите наибольший элемент в каждом из этих векторов, когда они будут готовы. afterEach выполняет дескриптор функции для выходных данных каждого будущего, когда они становятся готовыми, и создает другое будущее для хранения результатов.

maxFuture = afterEach(f, @(r) max(r), 1);

Чтобы вычислить минимальное значение между ними, вызовите afterAll об этом новом будущем. afterAll выполняет функцию для объединенных выходных аргументов всех фьючерсов после их завершения. В этом случае afterAll выполняет функцию min о выходах maxFuture после завершения и создает другое будущее для удержания результата.

minFuture = afterAll(maxFuture, @(r) min(r), 1);

Получить результат можно с помощью fetchOutputs. fetchOutput ждет, пока будущее не завершится, чтобы собрать результаты.

fetchOutputs(minFuture)
ans = 0.9973

Вы можете проверить результат afterEach путем вызова fetchOutputs на его будущей переменной.

fetchOutputs(maxFuture)
ans = 10×1

    0.9996
    0.9989
    0.9994
    0.9973
    1.0000
    1.0000
    0.9989
    0.9994
    0.9998
    0.9999

Представлен в R2013b