exponenta event banner

numpartitions

Оценка возврата для разумного количества разделов для параллельной обработки

Описание

пример

n = numpartitions(sds) возвращает количество разделов по умолчанию для хранилища данных сигнала sds.

пример

n = numpartitions(sds,pool) возвращает разумное число разделов для распараллеливания sds над параллельным пулом.

  • Если sds содержит данные файла, количество разделов зависит от количества работников в пуле и общего количества файлов.

  • Если sds содержит данные в памяти, количество разделов зависит от количества работников в пуле и общего числа членов.

Для параллельного доступа к хранилищу данных необходимо установить Toolbox™ Parallel Computing.

Примеры

свернуть все

Укажите путь к файлу для примерных сигналов, включенных в MATLAB ®. Создайте хранилище данных сигнала, указывающее на указанную папку.

folder = fullfile(matlabroot,'toolbox','matlab','audiovideo');
sds = signalDatastore(folder,'SampleRateVariableName','Fs');

Получение количества разделов по умолчанию для хранилища данных сигнала.

n = numpartitions(sds)
n = 7

Разбиение хранилища данных на разделы по умолчанию и возврат хранилища данных, соответствующего четвертому разделу.

subsds = partition(sds,n,4);

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

fName = extractAfter(subsds.Files,'audiovideo\')
fName = 1x1 cell array
    {0x0 char}

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

while hasdata(subsds)
    [data,info] = read(subsds);
    fs = info.SampleRate;
    f_res = 0.5*fs;
    ts = (0:length(data)-1)/fs;
    data_res = resample(data,1,2);
    t_res = (0:length(data_res)-1)/f_res;
    plot(ts,data,t_res,data_res,':')
    xlabel('Time (s)')
    ylabel('Signal')
    legend('Original','Resampled','Location','NorthWest')
end

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled.

Укажите путь к каталогу, содержащему примеры сигналов, включенных в MATLAB ®.

folder = fullfile(matlabroot,'toolbox','matlab','audiovideo');

Создайте хранилище данных сигнала, указывающее на указанную папку.

sds = signalDatastore(folder);

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

pool = gcp;
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
n = numpartitions(sds,pool)
n = 7

Разделите хранилище данных сигнала и считайте данные сигнала в каждой части.

parfor ii = 1:n
    subds = partition(sds,n,ii);
    while hasdata(subds)
        data = read(subds);
    end
end

Входные аргументы

свернуть все

Хранилище данных сигнала, указанное как signalDatastore объект.

Параллельный пул, заданный как параллельный

Выходные аргументы

свернуть все

Число разделов, по которым осуществляется параллельный доступ к хранилищу данных. По умолчанию количество разделов - min (Nobservations, 3Nworkers), где:

  • Nobservations - количество файлов в хранилище данных (в случае данных файла) или количество членов в хранилище данных (в случае данных в памяти).

  • Nworkers - количество работников в бассейне.

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