BeamScatterTask

BeamScatterTask allows to split a single stream of data into multiple streams distributing data by beam. The beam space is sliced as evenly as possible between all available (or configured) ranks to handle output streams. If the number of such ranks is larger than the number of beams available, each output stream will contain data for just one beam (and therefore will result in one beam per file, if data are written as part of the downstream processing). The diagram below illustrates the operation.

../../_images/beamscatter_overview.png

By default, the task uses service ranks to handle the output if possible. However, if the number of available service ranks is insufficient to cover all output streams, ranks receiving data will be reused starting from those which are inactive (i.e. not sending data to this particular task) in the order of the global rank number. It is currently the requirement that the rank providing input data stream is also one of the ranks handing the output.

Configuration Parameters

The program requires a configuration file be provided on the command line. This section describes the valid parameters. In addition to mandatory parameters which are always required, individual tasks often have specific parameters which need to be defined only if a particular task is used. As for all tasks, parameters are taken from keys with tasks.name.params prefix (not shown in the table below) where name is an arbitrary name assigned to this task and used in tasklist (this allows us to run the same task more than once with different parameters). The type of the task defined by tasks.name.type should be set to BeamScatterTask.

Parameter Type Default Description
nstreams unsigned int All service ranks The number of data streams to produce (by default, all available service ranks). The beam space is split as uniformly as possible between output streams. If the number of beams in the input stream is smaller than the chosen number of output streams, then only required number of output streams will be used, starting with the rank with smaller number.

Example

########################## ChannelMergeTask ##############################

tasks.tasklist = [MergedSource, Merge, CalcUVWTask, BeamScatterTask, MSSink]


# number of ranks to merge, 12 cards correspond to 48 MHz of bandwidth
task.Merge.params.ranks2merge = 12
# type of the task
tasks.Merge.type = ChannelMergeTask

tasks.BeamScatterTask.type = BeamScatterTask