data.memory.bank.schedule


template <auto Banks, typename Address, auto Addresses>
inline 
count_t<Addresses>[Banks]
read_requests_per_bank(
    Address[Addresses] addresses,
    (Address) -> index_t<Banks> address_to_bank_index
    ) §source

Count the number of unique read requests for each bank. More than 1 request per bank indicates conflict.

Parameters

  • auto Banks
    
  • typename Address
    
  • auto Addresses
    

    Number of addresses processed per call.

Arguments

  • Address[Addresses] addresses
    

    Input addresses, duplicates allowed.

  • (Address) -> index_t<Banks> address_to_bank_index
    

    Map Address to bank index.

template <auto Banks, typename Address, auto Addresses>
inline 
count_t<Addresses>[Banks]
write_requests_per_bank(
    optional<Address>[Addresses] addresses,
    (Address) -> index_t<Banks> address_to_bank_index
    ) §source

Count the number of write requests for each bank. More than 1 request per bank indicates conflict.

Parameters

  • auto Banks
    
  • typename Address
    
  • auto Addresses
    

    Number of addresses processed per call.

Arguments

  • optional<Address>[Addresses] addresses
    

    Input addresses, valid duplicates not allowed.

  • (Address) -> index_t<Banks> address_to_bank_index
    

    Map Address to bank index.

template <auto Banks, typename Address, auto Addresses>
inline 
pair<optional<index_t<Addresses>>[Banks], optional<index_t<Banks>>[Addresses]>
schedule_read_requests(
    Address[Addresses] addresses,
    (Address) -> index_t<Banks> address_to_bank_index,
    index_t<Addresses> iteration
    ) §source

For each iteration, calculate the pair:

  1. The optional address indices for each bank.
  2. The optional bank index for each address.

Parameters

  • auto Banks
    
  • typename Address
    
  • auto Addresses
    

    Number of addresses processed per call.

Arguments

  • Address[Addresses] addresses
    

    Input addresses, duplicates allowed.

  • (Address) -> index_t<Banks> address_to_bank_index
    

    Map Address to bank index.

  • index_t<Addresses> iteration
    

    Index of bank requests to retrieve from schedule.

template <auto Banks, typename Address, auto Addresses>
inline 
optional<index_t<Addresses>>[Banks]
schedule_write_requests(
    optional<Address>[Addresses] addresses,
    (Address) -> index_t<Banks> address_to_bank_index,
    index_t<Addresses> iteration
    ) §source

Calculate the optional address indices for each bank at specific iteration.

Parameters

  • auto Banks
    
  • typename Address
    
  • auto Addresses
    

    Number of addresses processed per call.

Arguments

  • optional<Address>[Addresses] addresses
    

    Input addresses, valid duplicates not allowed.

  • (Address) -> index_t<Banks> address_to_bank_index
    

    Map Address to bank index.

  • index_t<Addresses> iteration
    

    Index of bank requests to retrieve from schedule.