Data transfer list limitations

Data transfer information is used to describe the five types data movement operations for one work block as defined by ALF_BUF_TYPE_T. The ALF implementation on Cell BE has the following internal constraints:

  1. Data transfer information for a single work block can consist of up to eight data transfer lists for each type of transfer as defined by ALF_BUF_TYPE_T. For programmers the limitation is that alf_wb_dtl_begin can only be called no more than eight times for each type of ALF_BUF_TYPE_T for each work block. An ALF_ERR_NOBUFS is returned in this case. Due to limitation items 2, 3 and 4 in this list, it is possible that the limitation can be reached without explicitly calling alf_wb_dtl_begin by eight times.
  2. Each data transfer list consists of up to 2048 data transfer entries. The alf_wb_dtl_entry_add call automatically creates a new data transfer list of the same type when this limitation is reached. Limitation item 1 in this list still applies in this case.
  3. Each entry can describe up to 16 KB of data transfer between the contiguous area in host memory and accelerator memory. The alf_wb_dtl_entry_add call automatically breaks an entry larger than 16 KB to multiple entries. Limitation items 1 and 2 in this list still apply in this case.
  4. All of the entries within the same data transfer list share the same high 32 bits effective address. This means that when a data transfer entry goes across 4 GB address boundary, it must be broken up and put into two different data transfer lists. In addition, two succeeding entries use different high 32 bit addresses, they need to be put into two lists. The alf_wb_dtl_entry_add call automatically creates a new data transfer list in the above two situations. Limitation items 1, 2 and 3 in this list still apply in this case.
  5. The local store area described by each entry within the same data transfer list must be contiguous. You can use the local buffer offset parameter "offset_to_accel_buf" to address with in the local buffer when alf_wb_dtl_begin is called to create a new list.
  6. The transfer size and the low 32 bits of the effective address for each data transfer entry must be 16 bytes aligned. The alf_wb_dtl_entry_add call does NOT help you to automatically deal with alignment issues. An ALF_ERR_INVAL error is returned if there is an unaligned address. The same limitation also applies to the offset_to_accel_buf parameter of alf_wb_dtl_begin.