17
17
#include " ./kernels/find_tracks.hpp"
18
18
#include " ./kernels/make_barcode_sequence.hpp"
19
19
#include " ./kernels/propagate_to_next_surface.hpp"
20
- #include " ./kernels/prune_tracks.hpp"
21
20
#include " traccc/definitions/primitives.hpp"
22
21
#include " traccc/definitions/qualifiers.hpp"
23
22
#include " traccc/edm/device/sort_key.hpp"
@@ -219,6 +218,9 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
219
218
n_in_params * m_cfg.max_num_branches_per_surface , m_mr.main );
220
219
m_copy.setup (updated_liveness_buffer)->ignore ();
221
220
221
+ // Reset the number of tracks per seed
222
+ m_copy.memset (n_tracks_per_seed_buffer, 0 )->ignore ();
223
+
222
224
const unsigned int links_size = m_copy.get_size (links_buffer);
223
225
224
226
if (links_size + n_max_candidates > link_buffer_capacity) {
@@ -259,20 +261,22 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
259
261
::alpaka::allocBuf<PayloadType, Idx>(devHost, 1u );
260
262
PayloadType* payload = ::alpaka::getPtrNative (bufHost_payload);
261
263
262
- new (payload) PayloadType{
263
- .det_data = det_view,
264
- .measurements_view = measurements,
265
- .in_params_view = in_params_buffer,
266
- .in_params_liveness_view = param_liveness_buffer,
267
- .n_in_params = n_in_params,
268
- .barcodes_view = barcodes_buffer,
269
- .upper_bounds_view = upper_bounds_buffer,
270
- .links_view = links_buffer,
271
- .prev_links_idx = prev_link_idx,
272
- .curr_links_idx = step_to_link_idx_map[step],
273
- .step = step,
274
- .out_params_view = updated_params_buffer,
275
- .out_params_liveness_view = updated_liveness_buffer};
264
+ new (payload)
265
+ PayloadType{.det_data = det_view,
266
+ .measurements_view = measurements,
267
+ .in_params_view = in_params_buffer,
268
+ .in_params_liveness_view = param_liveness_buffer,
269
+ .n_in_params = n_in_params,
270
+ .barcodes_view = barcodes_buffer,
271
+ .upper_bounds_view = upper_bounds_buffer,
272
+ .links_view = links_buffer,
273
+ .prev_links_idx = prev_link_idx,
274
+ .curr_links_idx = step_to_link_idx_map[step],
275
+ .step = step,
276
+ .out_params_view = updated_params_buffer,
277
+ .out_params_liveness_view = updated_liveness_buffer,
278
+ .tips_view = tips_buffer,
279
+ .n_tracks_per_seed_view = n_tracks_per_seed_buffer};
276
280
277
281
auto bufAcc_payload =
278
282
::alpaka::allocBuf<PayloadType, Idx>(devAcc, 1u );
@@ -294,6 +298,10 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
294
298
::alpaka::wait (queue);
295
299
}
296
300
301
+ if (step == m_cfg.max_track_candidates_per_track - 1 ) {
302
+ break ;
303
+ }
304
+
297
305
if (n_candidates > 0 ) {
298
306
/* ****************************************************************
299
307
* Kernel4: Get key and value for parameter sorting
@@ -333,9 +341,6 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
333
341
*****************************************************************/
334
342
335
343
{
336
- // Reset the number of tracks per seed
337
- m_copy.memset (n_tracks_per_seed_buffer, 0 )->ignore ();
338
-
339
344
Idx blocksPerGrid =
340
345
(n_candidates + threadsPerBlock - 1 ) / threadsPerBlock;
341
346
auto workDiv = makeWorkDiv<Acc>(blocksPerGrid, threadsPerBlock);
@@ -348,18 +353,17 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
348
353
::alpaka::allocBuf<PayloadType, Idx>(devHost, 1u );
349
354
PayloadType* payload = ::alpaka::getPtrNative (bufHost_payload);
350
355
351
- new (payload) PayloadType{
352
- .det_data = det_view,
353
- .field_data = field_view,
354
- .params_view = in_params_buffer,
355
- .params_liveness_view = param_liveness_buffer,
356
- .param_ids_view = param_ids_buffer,
357
- .links_view = links_buffer,
358
- .prev_links_idx = step_to_link_idx_map[step],
359
- .step = step,
360
- .n_in_params = n_candidates,
361
- .tips_view = tips_buffer,
362
- .n_tracks_per_seed_view = n_tracks_per_seed_buffer};
356
+ new (payload)
357
+ PayloadType{.det_data = det_view,
358
+ .field_data = field_view,
359
+ .params_view = in_params_buffer,
360
+ .params_liveness_view = param_liveness_buffer,
361
+ .param_ids_view = param_ids_buffer,
362
+ .links_view = links_buffer,
363
+ .prev_links_idx = step_to_link_idx_map[step],
364
+ .step = step,
365
+ .n_in_params = n_candidates,
366
+ .tips_view = tips_buffer};
363
367
364
368
auto bufAcc_payload =
365
369
::alpaka::allocBuf<PayloadType, Idx>(devAcc, 1u );
@@ -403,65 +407,21 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
403
407
m_copy.setup (track_candidates_buffer.headers )->ignore ();
404
408
m_copy.setup (track_candidates_buffer.items )->ignore ();
405
409
406
- // Create buffer for valid indices
407
- vecmem::data::vector_buffer<unsigned int > valid_indices_buffer (n_tips_total,
408
- m_mr.main );
409
-
410
- // Count the number of valid tracks
411
- auto bufHost_n_valid_tracks =
412
- ::alpaka::allocBuf<unsigned int , Idx>(devHost, 1u );
413
- unsigned int * n_valid_tracks =
414
- ::alpaka::getPtrNative (bufHost_n_valid_tracks);
415
- ::alpaka::memset (queue, bufHost_n_valid_tracks, 0 );
416
- ::alpaka::wait (queue);
417
-
418
410
// @Note: nBlocks can be zero in case there is no tip. This happens when
419
411
// chi2_max config is set tightly and no tips are found
420
412
if (n_tips_total > 0 ) {
421
- auto n_valid_tracks_device =
422
- ::alpaka::allocBuf<unsigned int , Idx>(devAcc, 1u );
423
- ::alpaka::memset (queue, n_valid_tracks_device, 0 );
424
-
425
413
Idx blocksPerGrid =
426
414
(n_tips_total + threadsPerBlock - 1 ) / threadsPerBlock;
427
415
auto workDiv = makeWorkDiv<Acc>(blocksPerGrid, threadsPerBlock);
428
416
429
417
::alpaka::exec<Acc>(
430
- queue, workDiv, BuildTracksKernel{}, m_cfg,
431
- device::build_tracks_payload{
432
- measurements, seeds_view, links_buffer, tips_buffer,
433
- track_candidates_buffer, valid_indices_buffer,
434
- ::alpaka::getPtrNative (n_valid_tracks_device)});
435
- ::alpaka::wait (queue);
436
-
437
- // Global counter object: Device -> Host
438
- ::alpaka::memcpy (queue, bufHost_n_valid_tracks, n_valid_tracks_device);
439
- ::alpaka::wait (queue);
440
- }
441
-
442
- // Create pruned candidate buffer
443
- track_candidate_container_types::buffer prune_candidates_buffer{
444
- {*n_valid_tracks, m_mr.main },
445
- {std::vector<std::size_t >(*n_valid_tracks,
446
- m_cfg.max_track_candidates_per_track ),
447
- m_mr.main , m_mr.host , vecmem::data::buffer_type::resizable}};
448
-
449
- m_copy.setup (prune_candidates_buffer.headers )->ignore ();
450
- m_copy.setup (prune_candidates_buffer.items )->ignore ();
451
-
452
- if (*n_valid_tracks > 0 ) {
453
- Idx blocksPerGrid =
454
- (*n_valid_tracks + threadsPerBlock - 1 ) / threadsPerBlock;
455
- auto workDiv = makeWorkDiv<Acc>(blocksPerGrid, threadsPerBlock);
456
-
457
- ::alpaka::exec<Acc>(queue, workDiv, PruneTracksKernel{},
458
- device::prune_tracks_payload{
459
- track_candidates_buffer, valid_indices_buffer,
460
- prune_candidates_buffer});
418
+ queue, workDiv, BuildTracksKernel{},
419
+ device::build_tracks_payload{measurements, seeds_view, links_buffer,
420
+ tips_buffer, track_candidates_buffer});
461
421
::alpaka::wait (queue);
462
422
}
463
423
464
- return prune_candidates_buffer ;
424
+ return track_candidates_buffer ;
465
425
}
466
426
467
427
// Explicit template instantiation
0 commit comments