Future

Запросите выполнение функции для работников параллельного пула или клиента 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
isequalTrue, если фьючерсы имеют одинаковый идентификатор
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