Создайте 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);