Skip to content

Code Skeleton #1

@crtrott

Description

@crtrott
// Loop over batch of events and their 24 sectors with teams (Cuda: blocks) 
parallel_for(TeamPolicy<>(num_sector x num_events, team_size, 32), [] (...) {

  // Loop over all Rows with threads in team (threadIdx.y in CUDA speak)
  parallel_for(TeamThreadRange(team,num_rows), [&] (int row) {
    // Loop until Blob ideas are all assigned and don't change
    while(not_done) {
      // First do uneven then even pads, to avoid write conflicts
      for(uneven=0; uneven<=1; uneven++) {
        // Do a vector loop over pads (Cuda: threads in warp)
        parallel_for(ThreadVectorRange(team, num_pads(row)/2), [] (int pad_half) {
          pad = uneven+pad_half*2
          for(sig_pad = 0; sig_pad < num_signals(event,sector,row,pad)) {
            for(sig_pad2 = 0; sig_pad2 < num_signals(event,sector,row,pad+1)) {
              //Mark Neighbors
            }
          }
        });
      }
    }
    // Loop over signals to find unique number of blobs
    parallel_for(ThreadVectorRange(team, num_signals), [&] (int signal) {
      ...
    });
    // Build Signal to Blob Map
    parallel_for(ThreadVectorRange(team, num_signals), [&] (int signal) {
      blob_id(signal) = blob_id(blob_id(signal));
    });
  });
});
// Loop over batch of events with teams (Cuda: blocks) 
parallel_for(TeamPolicy<>(num_events, team_size, 32), [] (...) {

  // Build blob to signal map
  parallel_for(TeamThreadRange(team,num_blobs(event)), [&] (int blob) {});
  parallel_for(TeamThreadRange(team,num_signals(event)), [&] (int signal) {});

  //Compute Properties of blobs
  parallel_for(TeamThreadRange(team,num_blobs(event)), [&] (int blob) {
    for(int iSignal =0; iSignal<num_signals(blob)){}
  });
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions