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

Если у вас есть 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, и автоматически выполнить его параллельно на рабочих местах вашей локальной машины.

Создайте длинную таблицу 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 масштабирование до кластера, без необходимости переписывать алгоритм. Для получения примера смотрите Использование Длинных массивов на кластере Hadoop с поддержкой Spark.

См. также

| | | | |

Похожие примеры

Подробнее о