Skip to content

Commit e4ec871

Browse files
committed
Remove unused cell links from CCL kernel
This commit removes the `cell_links` vector from the CCL kernels. This vector is never used for any meaningful output, so it's just unnecessary memory accesses.
1 parent 9f3387b commit e4ec871

11 files changed

Lines changed: 25 additions & 50 deletions

File tree

device/alpaka/src/clusterization/clusterization_algorithm.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ struct ccl_kernel {
4242
uint32_t* backup_mutex_ptr,
4343
vecmem::data::vector_view<unsigned int> disjoint_set_view,
4444
vecmem::data::vector_view<unsigned int> cluster_size_view,
45-
edm::measurement_collection::view measurements_view,
46-
vecmem::data::vector_view<unsigned int> cell_links) const {
45+
edm::measurement_collection::view measurements_view) const {
4746

4847
details::thread_id1 thread_id(acc);
4948

@@ -69,7 +68,7 @@ struct ccl_kernel {
6968
f_view, gf_view, f_backup_view, gf_backup_view,
7069
adjc_backup_view, adjv_backup_view, backup_mutex,
7170
disjoint_set_view, cluster_size_view, barry_r,
72-
measurements_view, cell_links);
71+
measurements_view);
7372
}
7473

7574
}; // struct ccl_kernel
@@ -120,7 +119,7 @@ void clusterization_algorithm::ccl_kernel(
120119
payload.config, payload.cells, payload.det_descr, payload.det_cond,
121120
payload.f_backup, payload.gf_backup, payload.adjc_backup,
122121
payload.adjv_backup, payload.backup_mutex, payload.disjoint_set,
123-
payload.cluster_sizes, payload.measurements, payload.cell_links);
122+
payload.cluster_sizes, payload.measurements);
124123
}
125124

126125
void clusterization_algorithm::cluster_maker_kernel(

device/common/include/traccc/clusterization/device/aggregate_cluster.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ TRACCC_HOST_DEVICE inline void aggregate_cluster(
4949
const detector_conditions_description::const_device& det_cond,
5050
const vecmem::device_vector<index_t>& f, unsigned int start,
5151
unsigned int end, unsigned int cid,
52-
edm::measurement_collection::device::proxy_type out,
53-
vecmem::data::vector_view<unsigned int> cell_links, unsigned int link,
52+
edm::measurement_collection::device::proxy_type out, unsigned int link,
5453
vecmem::device_vector<unsigned int>& disjoint_set,
5554
std::optional<std::reference_wrapper<unsigned int>> cluster_size);
5655

device/common/include/traccc/clusterization/device/ccl_kernel.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ namespace traccc::device {
6060
/// corresponding measurement.
6161
/// @param barrier A generic object for block-wide synchronisation
6262
/// @param[out] measurements_view collection of measurements
63-
/// @param[out] cell_links collection of links to measurements each cell is
64-
/// put into
6563
template <device::concepts::barrier barrier_t,
6664
device::concepts::thread_id1 thread_id_t>
6765
TRACCC_HOST_DEVICE inline void ccl_kernel(
@@ -80,8 +78,7 @@ TRACCC_HOST_DEVICE inline void ccl_kernel(
8078
vecmem::data::vector_view<unsigned int> disjoint_set_view,
8179
vecmem::data::vector_view<unsigned int> cluster_size_view,
8280
const barrier_t& barrier,
83-
edm::measurement_collection::view measurements_view,
84-
vecmem::data::vector_view<unsigned int> cell_links);
81+
edm::measurement_collection::view measurements_view);
8582

8683
} // namespace traccc::device
8784

device/common/include/traccc/clusterization/device/clusterization_algorithm.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ class clusterization_algorithm
131131
const detector_conditions_description::const_view& det_cond;
132132
/// The measurement collection to fill
133133
edm::measurement_collection::view& measurements;
134-
/// Buffer for linking cells to measurements
135-
vecmem::data::vector_view<unsigned int>& cell_links;
136134
/// Buffer for backup of the first element links
137135
vecmem::data::vector_view<details::fallback_index_t>& f_backup;
138136
/// Buffer for backup of the group first element links

device/common/include/traccc/clusterization/device/impl/aggregate_cluster.ipp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ TRACCC_HOST_DEVICE inline void aggregate_cluster(
2323
const vecmem::device_vector<index_t>& fll, const unsigned int start,
2424
const unsigned int end, const unsigned int cid,
2525
edm::measurement_collection::device::proxy_type out,
26-
vecmem::data::vector_view<unsigned int> cell_links, const unsigned int link,
27-
vecmem::device_vector<unsigned int>& disjoint_set,
26+
const unsigned int link, vecmem::device_vector<unsigned int>& disjoint_set,
2827
std::optional<std::reference_wrapper<unsigned int>> cluster_size) {
29-
vecmem::device_vector<unsigned int> cell_links_device(cell_links);
3028

3129
/*
3230
* Now, we iterate over all other cells to check if they belong to our
@@ -110,7 +108,6 @@ TRACCC_HOST_DEVICE inline void aggregate_cluster(
110108
var[1] = (1.f - weight_factor) * var[1] +
111109
weight_factor * (diff_old[1] * diff_new[1]);
112110

113-
cell_links_device.at(pos) = link;
114111
tmp_cluster_size++;
115112

116113
if (disjoint_set.capacity()) {

device/common/include/traccc/clusterization/device/impl/ccl_kernel.ipp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ TRACCC_HOST_DEVICE inline void ccl_core(
147147
const clustering_config& cfg, const thread_id_t& thread_id,
148148
std::size_t& partition_start, std::size_t& partition_end,
149149
vecmem::device_vector<index_t> f, vecmem::device_vector<index_t> gf,
150-
vecmem::data::vector_view<unsigned int> cell_links, index_t* adjv,
151-
unsigned char* adjc,
150+
index_t* adjv, unsigned char* adjc,
152151
const edm::silicon_cell_collection::const_device& cells_device,
153152
const detector_design_description::const_device& det_desc,
154153
const detector_conditions_description::const_device& det_cond,
@@ -267,8 +266,7 @@ TRACCC_HOST_DEVICE inline void ccl_core(
267266
cfg, cells_device, det_desc, det_cond, gf,
268267
static_cast<unsigned int>(partition_start),
269268
static_cast<unsigned int>(partition_end), cid,
270-
measurements_device.at(meas_pos), cell_links, meas_pos,
271-
disjoint_set,
269+
measurements_device.at(meas_pos), meas_pos, disjoint_set,
272270
(cluster_size.capacity()
273271
? std::optional<std::reference_wrapper<
274272
unsigned int>>{cluster_size.at(meas_pos)}
@@ -295,8 +293,7 @@ TRACCC_HOST_DEVICE inline void ccl_kernel(
295293
vecmem::data::vector_view<unsigned int> disjoint_set_view,
296294
vecmem::data::vector_view<unsigned int> cluster_size_view,
297295
const barrier_t& barrier,
298-
edm::measurement_collection::view measurements_view,
299-
vecmem::data::vector_view<unsigned int> cell_links) {
296+
edm::measurement_collection::view measurements_view) {
300297

301298
// Construct device containers around the views.
302299
const edm::silicon_cell_collection::const_device cells_device(cells_view);
@@ -404,9 +401,8 @@ TRACCC_HOST_DEVICE inline void ccl_kernel(
404401
(thread_id.getLocalThreadIdX() * 4 * cfg.max_cells_per_thread *
405402
cfg.backup_size_multiplier);
406403
ccl_core(cfg, thread_id, partition_start, partition_end, f_backup,
407-
gf_backup, cell_links, adjv, adjc, cells_device, det_desc,
408-
det_cond, measurements_device, barrier, disjoint_set,
409-
cluster_size);
404+
gf_backup, adjv, adjc, cells_device, det_desc, det_cond,
405+
measurements_device, barrier, disjoint_set, cluster_size);
410406
} else {
411407
/*
412408
* Vector of indices of the adjacent cells.
@@ -422,9 +418,8 @@ TRACCC_HOST_DEVICE inline void ccl_kernel(
422418
unsigned char adjc[details::CELLS_PER_THREAD_STACK_LIMIT];
423419

424420
ccl_core(cfg, thread_id, partition_start, partition_end, f_primary,
425-
gf_primary, cell_links, adjv, adjc, cells_device, det_desc,
426-
det_cond, measurements_device, barrier, disjoint_set,
427-
cluster_size);
421+
gf_primary, adjv, adjc, cells_device, det_desc, det_cond,
422+
measurements_device, barrier, disjoint_set, cluster_size);
428423
}
429424

430425
barrier.blockBarrier();

device/common/src/clusterization/clusterization_algorithm.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,6 @@ clusterization_algorithm::execute_impl(
115115
num_cells, mr().main, vecmem::data::buffer_type::resizable};
116116
copy().setup(measurements)->ignore();
117117

118-
// Create buffer for linking cells to their measurements.
119-
vecmem::data::vector_buffer<unsigned int> cell_links(num_cells, mr().main);
120-
copy().setup(cell_links)->ignore();
121-
122118
// Ensure that the chosen maximum cell count is compatible with the maximum
123119
// stack size.
124120
assert(m_config.max_cells_per_thread <=
@@ -134,9 +130,8 @@ clusterization_algorithm::execute_impl(
134130

135131
// Launch the CCL kernel.
136132
ccl_kernel({num_cells, m_config, cells, det_descr, det_cond, measurements,
137-
cell_links, m_f_backup, m_gf_backup, m_adjc_backup,
138-
m_adjv_backup, m_backup_mutex.get(), disjoint_set,
139-
cluster_sizes});
133+
m_f_backup, m_gf_backup, m_adjc_backup, m_adjv_backup,
134+
m_backup_mutex.get(), disjoint_set, cluster_sizes});
140135

141136
std::optional<edm::silicon_cluster_collection::buffer> cluster_data =
142137
std::nullopt;

device/cuda/src/clusterization/clusterization_algorithm.cu

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ void clusterization_algorithm::ccl_kernel(
4949
sizeof(device::details::index_t),
5050
details::get_stream(stream())>>>(
5151
payload.config, payload.cells, payload.det_descr, payload.det_cond,
52-
payload.measurements, payload.cell_links, payload.f_backup,
53-
payload.gf_backup, payload.adjc_backup, payload.adjv_backup,
54-
payload.backup_mutex, payload.disjoint_set, payload.cluster_sizes);
52+
payload.measurements, payload.f_backup, payload.gf_backup,
53+
payload.adjc_backup, payload.adjv_backup, payload.backup_mutex,
54+
payload.disjoint_set, payload.cluster_sizes);
5555
TRACCC_CUDA_ERROR_CHECK(cudaGetLastError());
5656
}
5757

device/cuda/src/clusterization/kernels/ccl_kernel.cu

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ __global__ void ccl_kernel(
2424
const detector_design_description::const_view det_desc_view,
2525
const detector_conditions_description::const_view det_cond_view,
2626
edm::measurement_collection::view measurements_view,
27-
vecmem::data::vector_view<unsigned int> cell_links,
2827
vecmem::data::vector_view<device::details::fallback_index_t> f_backup_view,
2928
vecmem::data::vector_view<device::details::fallback_index_t> gf_backup_view,
3029
vecmem::data::vector_view<unsigned char> adjc_backup_view,
@@ -54,7 +53,6 @@ __global__ void ccl_kernel(
5453
partition_start, partition_end, outi, f_view, gf_view,
5554
f_backup_view, gf_backup_view, adjc_backup_view,
5655
adjv_backup_view, backup_mutex, disjoint_set_view,
57-
cluster_size_view, barry_r, measurements_view,
58-
cell_links);
56+
cluster_size_view, barry_r, measurements_view);
5957
}
6058
} // namespace traccc::cuda::kernels

device/cuda/src/clusterization/kernels/ccl_kernel.cuh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ __global__ void ccl_kernel(
2727
const detector_design_description::const_view det_descr_view,
2828
const detector_conditions_description::const_view det_cond_view,
2929
edm::measurement_collection::view measurements_view,
30-
vecmem::data::vector_view<unsigned int> cell_links,
3130
vecmem::data::vector_view<device::details::fallback_index_t> f_backup_view,
3231
vecmem::data::vector_view<device::details::fallback_index_t> gf_backup_view,
3332
vecmem::data::vector_view<unsigned char> adjc_backup_view,

0 commit comments

Comments
 (0)