exponenta event banner

codistributor1d

Создание объекта codistributor 1-D для распределенных по кодам массивов

Синтаксис

codist = codistributor1d()
codist = codistributor1d(dim)
codist = codistributor1d(dim,part)
codist = codistributor1d(dim,part,gsize)

Описание

1-D codistributor распределяет массивы вдоль одного заданного измерения распределения нециклическим, секционированным способом.

codist = codistributor1d() формирует codistributor1d с использованием измерения по умолчанию и секции. Измерение по умолчанию является последним несинглтоновым измерением распределенного по коду массива. Раздел по умолчанию распределяет массив вдоль размера по умолчанию максимально равномерно.

codist = codistributor1d(dim) формирует объект 1-D coddistributor для распределения по указанному измерению: 1 распределяет по строкам, 2 вдоль колонн и т.д.

codist = codistributor1d(dim,part) формирует объект 1-D codistributor для распределения в соответствии с вектором разбиения part. Например, C1 = codistributor1d(1,[1,2,3,4]) описывает схему распределения для массива из десяти строк, подлежащих кодовому распределению по его первому измерению (строкам), к четырем работникам, с 1 строкой к первому, 2 строками ко второму и т.д.

Результирующий распространитель любого из приведенных выше синтаксисов является неполным, так как его глобальный размер не указан. Codistributor, построенный таким образом, может использоваться в качестве аргумента для других функций в качестве шаблона codistributor при создании codistributed-массивов.

codist = codistributor1d(dim,part,gsize) формирует объект codistributor с измерением распределения dim, раздел распределения partи глобальный размер его совместно распределенных массивов gsize. Результирующий объект codistributor является полным и может использоваться для построения распределенного по коду массива из его локальных частей с помощью codistributed.build. Чтобы использовать размер по умолчанию, укажите codistributor1d.unsetDimension для этого аргумента; измерение распределения является производным от gsize и устанавливается в последний не-одиночный размер. Аналогично, чтобы использовать раздел по умолчанию, укажите codistributor1d.unsetPartition для этого аргумента; затем раздел определяется на основе значения по умолчанию для этого глобального измерения размера и распределения.

Локальная деталь на работнике labidx coddistributed-массива, использующего такой coddistributor, имеет размер gsize во всех измерениях, кроме dim, где размер part(labidx). Локальная часть имеет те же класс и атрибуты, что и общий распределенный массив. Концептуально, общий глобальный массив может быть восстановлен путем объединения различных локальных частей вдоль размерности dim.

Примеры

Используйте объект coddistributor1d для создания Nоколо-N матрица единиц, распределенная по строкам.

N = 1000;
spmd
    codistr = codistributor1d(1); % 1st dimension (rows)
    C = ones(N,codistr);
end

Использовать полностью указанный объект coddistributor1d для создания тривиала Nоколо-N codtulated matrix из своих локальных частей. Затем визуализируйте, какие элементы хранятся на работнике 2.

N = 1000;
spmd
    codistr = codistributor1d( ...
                    codistributor1d.unsetDimension, ...
                    codistributor1d.unsetPartition, ...
                    [N,N]);
    myLocalSize = [N,N]; % start with full size on each lab
    % then set myLocalSize to default part of whole array:
    myLocalSize(codistr.Dimension) = codistr.Partition(labindex);
    myLocalPart = labindex*ones(myLocalSize); % arbitrary values
    D = codistributed.build(myLocalPart,codistr);
end
spy(D==2);