codistributor
Create codistributor object for codistributed arrays
Syntax
codist = codistributor()
codist = codistributor('1d')
codist = codistributor('1d',dim)
codist = codistributor('1d',dim,part)
codist = codistributor('2dbc')
codist = codistributor('2dbc',lbgrid)
codist = codistributor('2dbc',lbgrid,blksize)
Description
There are two schemes for distributing arrays. The scheme denoted by the character vector '1d' distributes an array along a single specified subscript, the distribution dimension, in a noncyclic, partitioned manner. The scheme denoted by '2dbc', employed by the parallel matrix computation software ScaLAPACK, applies only to two-dimensional arrays, and varies both subscripts over a rectangular computational grid of labs (workers) in a blocked, cyclic manner.
codist = codistributor(), with no arguments, returns a default codistributor object with zero-valued or empty parameters, which can then be used as an argument to other functions to indicate that the function is to create a codistributed array if possible with default distribution. For example,
Z = zeros(..., codistributor()) R = randn(..., codistributor())
codist = codistributor('1d') is the same as codist = codistributor().
codist = codistributor('1d',dim) also forms a codistributor object with codist.Dimension = dim and default partition.
codist = codistributor('1d',dim,part) also forms a codistributor object with codist.Dimension = dim and codist.Partition = part.
codist = codistributor('2dbc') forms a 2-D block-cyclic codistributor object. For more information about '2dbc' distribution, see 2-Dimensional Distribution.
codist = codistributor('2dbc',lbgrid) forms a 2-D block-cyclic codistributor object with the lab grid defined by lbgrid and with default block size.
codist = codistributor('2dbc',lbgrid,blksize) forms a 2-D block-cyclic codistributor object with the lab grid defined by lbgrid and with a block size defined by blksize.
codist = getCodistributor(D) returns the codistributor object of codistributed array D.
Examples
On four workers, create a 3-dimensional, 2-by-6-by-4 array with distribution along the second dimension, and partition scheme [1 2 1 2]. In other words, worker 1 contains a 2-by-1-by-4 segment, worker 2 a 2-by-2-by-4 segment, etc.
spmd dim = 2; % distribution dimension codist = codistributor('1d',dim,[1 2 1 2],[2 6 4]); if mod(spmdIndex,2) L = rand(2,1,4); else L = rand(2,2,4); end A = codistributed.build(L,codist) end A
On four workers, create a 20-by-5 codistributed array A, distributed by rows (over its first dimension) with a uniform partition scheme.
spmd dim = 1; % distribution dimension partn = codistributor1d.defaultPartition(20); codist = codistributor('1d',dim,partn,[20 5]); L = magic(5) + spmdIndex; A = codistributed.build(L,codist) end A
Version History
Introduced in R2008b
See Also
codistributed | codistributor1d | codistributor2dbc | getCodistributor | getLocalPart | redistribute