// 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)){}
});
}