codistributor1d

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

Синтаксис

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

Описание

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

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

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

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

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

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

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

Примеры

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

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

Используйте полностью заданный объект codistributor1d, чтобы создать тривиальное N-by- N codistributed 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);