Data Transfer Entries
The partitions will be eventually turned into a series of data transfer entries.
After partitioning, each buffer/array must have an equal number of data transfer entries.
The number of data transfer (DT) entries for a buffer is computed as follows:
- One dimensional: # DT = (dimension_size_x / distribution_size_x)
- Two dimensional: # DT = (dimension_size_x / distribution_size_x) * (dimension_size_y / distribution_size_y)
- Three dimensional: # DT = (dimension_size_x / distribution_size_x) * (dimension_size_y / distribution_size_y) * (dimension_size_z / distribution_size_z)
The following examples illustrate some valid and invalid data distributions for the arrays: A[1024][512] and B[512][128].
- (CYCLIC(512), CYCLIC(16)) onto A, and (CYCLIC(128), CYCLIC(8)) onto B is valid, because the number of DT entries for these two distributions
are equal. (For A, the number of DT entries are (1024 / 512) * (512 / 16), and for B, the number of DT entries are (512 / 128) * (128 / 8))
- (*, CYCLIC(16)) onto A, and (CYCLIC(128), CYCLIC(16)) onto B is valid, because the number of DT entries for these distributions are equal (32).
- (CYCLIC(512), CYCLIC(16)) onto A, and (CYCLIC(128), CYCLIC(16)) onto B is invalid, because the number of DT entries for these two distributions is not equal.