Используйте длинные массивы на параллельном пуле

Если у вас есть Parallel Computing Toolbox™, можно использовать длинные массивы на локальном сеансе MATLAB®, или на локальном параллельном пуле. Можно также выполнить вычисления длинного массива на кластере, если вам установили MATLAB Parallel Server™. Этот пример использует рабочих в локальном кластере на вашей машине. Можно разработать код локально, и затем масштабировать, чтобы использовать в своих интересах возможности, предлагаемые Parallel Computing Toolbox и MATLAB Parallel Server, не имея необходимость переписывать алгоритм. См. также Рабочий процесс Больших данных с использованием высоких массивов и хранилищ данных.

Создайте datastore и преобразуйте его в длинную таблицу.

ds = datastore('airlinesmall.csv');
varnames = {'ArrDelay', 'DepDelay'};
ds.SelectedVariableNames = varnames;
ds.TreatAsMissing = 'NA';

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

Примечание

Если вы хотите выключить автоматическое открытие параллельного пула, изменить ваши параллельные настройки. Если вы выключаете опцию Automatically create a parallel pool, то необходимо явным образом запустить пул, если вы хотите, чтобы функция tall использовала ее для параллельной обработки. Смотрите Задают Ваши Параллельные Настройки.

Если у вас есть Parallel Computing Toolbox, можно запустить тот же код как пример длинной таблицы MATLAB (MATLAB) и автоматически выполнить его параллельно на рабочих локальной машины.

Составьте длинную таблицу tt от datastore.

tt = tall(ds)
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

tt =

  M×2 tall table 

    ArrDelay    DepDelay
    ________    ________

     8          12      
     8           1      
    21          20      
    13          12      
     4          -1      
    59          63      
     3          -2      
    11          -1      
    :           :
    :           :

Отображение указывает, что количество строк, M, еще не известно. M является заполнителем, пока вычисление не завершается.

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

a = tt.ArrDelay;

Можно задать ряд операций на длинном массиве, которые не выполняются, пока вы не вызываете gather. Выполнение так позволяет вам обработать в пакетном режиме команды, которые могут занять много времени. Например, вычислите среднее и стандартное отклонение задержки прибытия. Используйте эти значения, чтобы создать верхние и более низкие пороги для задержек, которые являются в 1 стандартном отклонении среднего значения.

m = mean(a,'omitnan');
s = std(a,'omitnan');
one_sigma_bounds = [m-s m m+s];

Используйте gather, чтобы вычислить one_sigma_bounds и загрузить ответ в память.

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 4.5 sec
Evaluation completed in 6.3 sec

sig1 =

  -23.4572    7.1201   37.6975

Можно задать несколько вводов и выводов к gather, если вы хотите оценить несколько вещей целиком. Выполнение так быстрее, чем вызов gather отдельно на каждом длинном массиве. Как пример, вычислите минимальную и максимальную задержку прибытия.

[max_delay, min_delay] = gather(max(a),min(a))
max_delay =

        1014

min_delay =

   -64

Если вы хотите разработать в сериале и не использовать локальных рабочих или ваш заданный кластер, введите следующую команду.

mapreducer(0);
Если вы используете mapreducer, чтобы изменить среду выполнения после создания длинного массива, то длинный массив недопустим, и необходимо воссоздать его. Чтобы использовать локальных рабочих или ваш заданный кластер снова, введите следующую команду.
mapreducer(gcp);

Примечание

Одно из преимуществ разработки алгоритмов с длинными массивами - то, что только необходимо записать код однажды. Можно разработать код локально, и затем использовать mapreducer, чтобы масштабировать до кластера, не будучи должен переписать алгоритм. Для примера смотрите Длинные массивы Использования на Spark Enabled Кластер Hadoop.

Смотрите также

| | | | |

Связанные примеры

Больше о