exponenta event banner

numpartitions

Класс: matlab.io.datastore.Partitionable
Пакет: matlab.io.datastore

Количество разделов по умолчанию

Синтаксис

n = numpartitions(ds)
n = numpartitions(ds,pool)

Описание

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

n = numpartitions(ds,pool) возвращает разумное количество разделов для параллелизма доступа к хранилищу данных по параллельному пулу, указанному pool. Для параллельного доступа к хранилищу данных необходимо установить Toolbox™ Parallel Computing.

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

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

Хранилище входных данных, указанное как matlab.io.Datastore объект. Создание Datastore объект, см. matlab.io.Datastore.

Параллельный пул, указанный как объект параллельного пула.

Пример: gcp

Признаки

Sealedtrue
Abstractfalse

Сведения об атрибутах методов см. в разделе Атрибуты метода.

Примеры

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

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

Создать .m файл определения класса, содержащий код, реализующий пользовательское хранилище данных. Этот файл необходимо сохранить в рабочей папке или в папке по пути MATLAB ®. Имя .m файл должен совпадать с именем функции конструктора объекта. Например, если необходимо, чтобы функция конструктора имела имя MyDatasturePar, то имя .m файл должен быть MyDatastorePar.m. .m файл определения класса должен содержать следующие шаги:

  • Шаг 1. Наследование из классов хранилища данных.

  • Шаг 2: Определение конструктора и требуемых методов.

  • Шаг 3: Определите пользовательскую функцию чтения файлов.

В дополнение к этим шагам определите любые другие свойства или методы, необходимые для обработки и анализа данных.

%% STEP 1: INHERIT FROM DATASTORE CLASSES
classdef MyDatastorePar < matlab.io.Datastore & ...
        matlab.io.datastore.Partitionable
   
    properties(Access = private)
        CurrentFileIndex double
        FileSet matlab.io.datastore.DsFileSet
    end
    
    % Property to support saving, loading, and processing of
    % datastore on different file system machines or clusters.
    % In addition, define the methods get.AlternateFileSystemRoots()
    % and set.AlternateFileSystemRoots() in the methods section. 
    properties(Dependent)
        AlternateFileSystemRoots
    end
    
%% STEP 2: DEFINE THE CONSTRUCTOR AND THE REQUIRED METHODS
    methods
        % Define your datastore constructor
        function myds = MyDatastorePar(location,altRoots)
            myds.FileSet = matlab.io.datastore.DsFileSet(location,...
                'FileExtensions','.bin', ...
                'FileSplitSize',8*1024);
            myds.CurrentFileIndex = 1;
             
            if nargin == 2
                 myds.AlternateFileSystemRoots = altRoots;
            end
            
            reset(myds);
        end
        
        % Define the hasdata method
        function tf = hasdata(myds)
            % Return true if more data is available
            tf = hasfile(myds.FileSet);
        end
        
        % Define the read method
        function [data,info] = read(myds)
            % Read data and information about the extracted data
            % See also: MyFileReader()
            if ~hasdata(myds)
                msgII = ['Use the reset method to reset the datastore ',... 
                         'to the start of the data.']; 
                msgIII = ['Before calling the read method, ',...
                          'check if data is available to read ',...
                          'by using the hasdata method.'];
                error('No more data to read.\n%s\n%s',msgII,msgIII);
            end
            
            fileInfoTbl = nextfile(myds.FileSet);
            data = MyFileReader(fileInfoTbl);
            info.Size = size(data);
            info.FileName = fileInfoTbl.FileName;
            info.Offset = fileInfoTbl.Offset;
            
            % Update CurrentFileIndex for tracking progress
            if fileInfoTbl.Offset + fileInfoTbl.SplitSize >= ...
                    fileInfoTbl.FileSize
                myds.CurrentFileIndex = myds.CurrentFileIndex + 1 ;
            end
        end
        
        % Define the reset method
        function reset(myds)
            % Reset to the start of the data
            reset(myds.FileSet);
            myds.CurrentFileIndex = 1;
        end

        % Define the partition method
        function subds = partition(myds,n,ii)
            subds = copy(myds);
            subds.FileSet = partition(myds.FileSet,n,ii);
            reset(subds);
        end
        
        % Getter for AlternateFileSystemRoots property
        function altRoots = get.AlternateFileSystemRoots(myds)
            altRoots = myds.FileSet.AlternateFileSystemRoots;
        end

        % Setter for AlternateFileSystemRoots property
        function set.AlternateFileSystemRoots(myds,altRoots)
            try
              % The DsFileSet object manages AlternateFileSystemRoots
              % for your datastore
              myds.FileSet.AlternateFileSystemRoots = altRoots;

              % Reset the datastore
              reset(myds);  
            catch ME
              throw(ME);
            end
        end
      
    end
    
    methods (Hidden = true)          
        % Define the progress method
        function frac = progress(myds)
            % Determine percentage of data read from datastore
            if hasdata(myds) 
               frac = (myds.CurrentFileIndex-1)/...
                             myds.FileSet.NumFiles; 
            else 
               frac = 1;  
            end 
        end
    end
    
    methods(Access = protected)
        % If you use the  FileSet property in the datastore,
        % then you must define the copyElement method. The
        % copyElement method allows methods such as readall
        % and preview to remain stateless 
        function dscopy = copyElement(ds)
            dscopy = copyElement@matlab.mixin.Copyable(ds);
            dscopy.FileSet = copy(ds.FileSet);
        end
        
        % Define the maxpartitions method
        function n = maxpartitions(myds)
            n = maxpartitions(myds.FileSet);
        end
    end
end

%% STEP 3: IMPLEMENT YOUR CUSTOM FILE READING FUNCTION
function data = MyFileReader(fileInfoTbl)
% create a reader object using FileName
reader = matlab.io.datastore.DsFileReader(fileInfoTbl.FileName);

% seek to the offset
seek(reader,fileInfoTbl.Offset,'Origin','start-of-file');

% read fileInfoTbl.SplitSize amount of data
data = read(reader,fileInfoTbl.SplitSize);

end

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

Совет

  • Для пользовательской реализации хранилища данных рекомендуется не внедрять numpartitions способ.

Алгоритмы

В реализации по умолчанию количество разделов, n, выбирается в качестве минимума между этими двумя значениями:

  • Значение, возвращенное maxpartitions в объекте хранилища данных.

  • В три раза больше числа работников.

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