Skip to content

Commit 0980665

Browse files
committed
Deduplicate max seeds per middle SP parameter
Currently, we have three seeding parameters which all control the maximum number of seeds per middle spacepoint. This is unnecessary and makes life much more complicated for everyone. Thus, this commit deduplicates those parameters, leaving a single parameter in the seed finder configuration.
1 parent 327189d commit 0980665

File tree

10 files changed

+60
-59
lines changed

10 files changed

+60
-59
lines changed

core/include/traccc/seeding/detail/seeding_config.hpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ struct seedfinder_config {
6262
float maxPtScattering = 10.f * unit<float>::GeV;
6363

6464
// for how many seeds can one SpacePoint be the middle SpacePoint?
65-
unsigned int maxSeedsPerSpM = 10;
65+
unsigned int maxSeedsPerSpM = 5;
6666

6767
float bFieldInZ = 1.99724f * unit<float>::T;
6868
// location of beam in x,y plane.
@@ -197,15 +197,9 @@ struct seedfilter_config {
197197
// minimum distance between compatible seeds to be considered for weight
198198
// boost
199199
float deltaRMin = 5.f * unit<float>::mm;
200-
// in dense environments many seeds may be found per middle space point.
201-
// only seeds with the highest weight will be kept if this limit is reached.
202-
unsigned int maxSeedsPerSpM = 20;
203200
// how often do you want to increase the weight of a seed for finding a
204201
// compatible seed?
205202
size_t compatSeedLimit = 2;
206-
// Tool to apply experiment specific cuts on collected middle space points
207-
208-
size_t max_triplets_per_spM = 5;
209203

210204
// seed weight increase
211205
float good_spB_min_radius = 150.f * unit<float>::mm;

core/src/seeding/seed_filtering.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@
1616

1717
namespace traccc::host::details {
1818

19-
seed_filtering::seed_filtering(const seedfilter_config& config,
19+
seed_filtering::seed_filtering(const seedfinder_config& finder_config,
20+
const seedfilter_config& filter_config,
2021
vecmem::memory_resource& mr,
2122
std::unique_ptr<const Logger> logger)
22-
: messaging(std::move(logger)), m_filter_config(config), m_mr{mr} {}
23+
: messaging(std::move(logger)),
24+
m_finder_config(finder_config),
25+
m_filter_config(filter_config),
26+
m_mr{mr} {}
2327

2428
void seed_filtering::operator()(
2529
const edm::spacepoint_collection::const_device& spacepoints,
@@ -89,7 +93,7 @@ void seed_filtering::operator()(
8993
// Consider only a maximum number of triplets for the final quality cut.
9094
const std::size_t itLength =
9195
std::min(triplets_passing_single_seed_cuts.size(),
92-
m_filter_config.max_triplets_per_spM);
96+
static_cast<std::size_t>(m_finder_config.maxSeedsPerSpM));
9397
for (std::size_t i = 1; i < itLength; ++i) {
9498
if (seed_selecting_helper::cut_per_middle_sp(
9599
m_filter_config, spacepoints, sp_grid_data,
@@ -103,7 +107,7 @@ void seed_filtering::operator()(
103107
// Add the best remaining seeds to the output collection.
104108
for (std::size_t i = 0;
105109
const triplet& triplet : triplets_passing_final_cuts) {
106-
if (i++ >= m_filter_config.maxSeedsPerSpM) {
110+
if (i++ >= m_finder_config.maxSeedsPerSpM) {
107111
break;
108112
}
109113
seeds.push_back({sp_grid.bin(triplet.sp1.bin_idx)[triplet.sp1.sp_idx],

core/src/seeding/seed_filtering.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ class seed_filtering : public messaging {
2929
public:
3030
/// Constructor with the seed filter configuration
3131
seed_filtering(
32-
const seedfilter_config& config, vecmem::memory_resource& mr,
32+
const seedfinder_config& finding_config,
33+
const seedfilter_config& filter_config, vecmem::memory_resource& mr,
3334
std::unique_ptr<const Logger> logger = getDummyLogger().clone());
3435

3536
/// Callable operator for the seed filtering
@@ -46,6 +47,8 @@ class seed_filtering : public messaging {
4647
edm::seed_collection::host& seeds) const;
4748

4849
private:
50+
/// Seed finder configuration
51+
seedfinder_config m_finder_config;
4952
/// Seed filter configuration
5053
seedfilter_config m_filter_config;
5154
/// The memory resource to use

core/src/seeding/seed_finding.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ struct seed_finding::impl {
2525
logger->cloneWithSuffix("MidTopAlg")),
2626
m_triplet_finding(finder_config, filter_config, mr,
2727
logger->cloneWithSuffix("TripletAlg")),
28-
m_seed_filtering(filter_config, mr,
28+
m_seed_filtering(finder_config, filter_config, mr,
2929
logger->cloneWithSuffix("FilterAlg")),
3030
m_mr{mr} {}
3131

device/alpaka/src/seeding/seed_finding.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ struct UpdateTripletWeights {
160160
struct SelectSeeds {
161161
template <typename TAcc>
162162
ALPAKA_FN_ACC void operator()(
163-
TAcc const& acc, seedfilter_config filter_config,
163+
TAcc const& acc, seedfinder_config finder_config,
164+
seedfilter_config filter_config,
164165
edm::spacepoint_collection::const_view spacepoints,
165166
traccc::details::spacepoint_grid_types::const_view sp_view,
166167
device::triplet_counter_spM_collection_types::const_view spM_tc,
@@ -176,13 +177,12 @@ struct SelectSeeds {
176177
// triplets within weight updating kernel
177178
triplet* const data = ::alpaka::getDynSharedMem<triplet>(acc);
178179

179-
// Each thread uses max_triplets_per_spM elements of the array
180-
triplet* dataPos =
181-
&data[localThreadIdx * filter_config.max_triplets_per_spM];
180+
// Each thread uses maxSeedsPerSpM elements of the array
181+
triplet* dataPos = &data[localThreadIdx * finder_config.maxSeedsPerSpM];
182182

183-
device::select_seeds(globalThreadIdx, filter_config, spacepoints,
184-
sp_view, spM_tc, midBot_tc, triplet_view, dataPos,
185-
seed_view);
183+
device::select_seeds(globalThreadIdx, finder_config, filter_config,
184+
spacepoints, sp_view, spM_tc, midBot_tc,
185+
triplet_view, dataPos, seed_view);
186186
}
187187
};
188188

@@ -379,8 +379,9 @@ edm::seed_collection::buffer seed_finding::operator()(
379379

380380
// Create seeds out of selected triplets
381381
::alpaka::exec<Acc>(
382-
queue, workDiv, kernels::SelectSeeds{}, m_seedfilter_config,
383-
spacepoints_view, g2_view, vecmem::get_data(triplet_counter_spM_buffer),
382+
queue, workDiv, kernels::SelectSeeds{}, m_seedfinder_config,
383+
m_seedfilter_config, spacepoints_view, g2_view,
384+
vecmem::get_data(triplet_counter_spM_buffer),
384385
vecmem::get_data(triplet_counter_midBot_buffer),
385386
vecmem::get_data(triplet_buffer), vecmem::get_data(seed_buffer));
386387

@@ -414,9 +415,9 @@ struct BlockSharedMemDynSizeBytes<traccc::alpaka::kernels::SelectSeeds, TAcc> {
414415
ALPAKA_FN_HOST_ACC static auto getBlockSharedMemDynSizeBytes(
415416
traccc::alpaka::kernels::SelectSeeds const& /* kernel */,
416417
TVec const& blockThreadExtent, TVec const& /* threadElemExtent */,
417-
traccc::seedfilter_config filter_config, TArgs const&... /* args */
418+
traccc::seedfinder_config finder_config, TArgs const&... /* args */
418419
) -> std::size_t {
419-
return static_cast<std::size_t>(filter_config.max_triplets_per_spM *
420+
return static_cast<std::size_t>(finder_config.maxSeedsPerSpM *
420421
blockThreadExtent.prod()) *
421422
sizeof(traccc::triplet);
422423
}

device/common/include/traccc/seeding/device/impl/select_seeds.ipp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ TRACCC_HOST_DEVICE void insertionSort(triplet* arr,
6060
// Select seeds kernel
6161
TRACCC_HOST_DEVICE
6262
inline void select_seeds(
63-
const global_index_t globalIndex, const seedfilter_config& filter_config,
63+
const global_index_t globalIndex, const seedfinder_config& finder_config,
64+
const seedfilter_config& filter_config,
6465
const edm::spacepoint_collection::const_view& spacepoints_view,
6566
const traccc::details::spacepoint_grid_types::const_view& sp_view,
6667
const triplet_counter_spM_collection_types::const_view& spM_tc_view,
@@ -123,10 +124,10 @@ inline void select_seeds(
123124

124125
// if the number of good triplets is larger than the threshold,
125126
// the triplet with the lowest weight is removed
126-
if (n_triplets_per_spM >= filter_config.max_triplets_per_spM) {
127+
if (n_triplets_per_spM >= finder_config.maxSeedsPerSpM) {
127128

128129
const std::size_t min_index =
129-
details::min_elem(data, 0, filter_config.max_triplets_per_spM,
130+
details::min_elem(data, 0, finder_config.maxSeedsPerSpM,
130131
[](const triplet lhs, const triplet rhs) {
131132
return lhs.weight > rhs.weight;
132133
});
@@ -142,7 +143,7 @@ inline void select_seeds(
142143

143144
// if the number of good triplets is below the threshold, add
144145
// the current triplet to the array
145-
else if (n_triplets_per_spM < filter_config.max_triplets_per_spM) {
146+
else if (n_triplets_per_spM < finder_config.maxSeedsPerSpM) {
146147
data[n_triplets_per_spM] = {spB_loc, spM_loc,
147148
spT_loc, aTriplet.curvature,
148149
aTriplet.weight, aTriplet.z_vertex};
@@ -165,7 +166,7 @@ inline void select_seeds(
165166
const sp_location& spT_loc = aTriplet.sp3;
166167

167168
// if the number of seeds reaches the threshold, break
168-
if (n_seeds_per_spM >= filter_config.maxSeedsPerSpM + 1) {
169+
if (n_seeds_per_spM >= finder_config.maxSeedsPerSpM + 1) {
169170
break;
170171
}
171172

device/common/include/traccc/seeding/device/select_seeds.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ namespace traccc::device {
3535
///
3636
TRACCC_HOST_DEVICE
3737
inline void select_seeds(
38-
global_index_t globalIndex, const seedfilter_config& filter_config,
38+
global_index_t globalIndex, const seedfinder_config& finder_config,
39+
const seedfilter_config& filter_config,
3940
const edm::spacepoint_collection::const_view& spacepoints_view,
4041
const traccc::details::spacepoint_grid_types::const_view& sp_grid_view,
4142
const triplet_counter_spM_collection_types::const_view& spM_tc_view,

device/cuda/src/seeding/seed_finding.cu

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ __global__ void update_triplet_weights(
129129

130130
/// CUDA kernel for running @c traccc::device::select_seeds
131131
__global__ void select_seeds(
132-
seedfilter_config filter_config,
132+
seedfinder_config finder_config, seedfilter_config filter_config,
133133
edm::spacepoint_collection::const_view spacepoints,
134134
traccc::details::spacepoint_grid_types::const_view sp_view,
135135
device::triplet_counter_spM_collection_types::const_view spM_tc,
@@ -140,12 +140,12 @@ __global__ void select_seeds(
140140
// Array for temporary storage of triplets for comparing within seed
141141
// selecting kernel
142142
extern __shared__ triplet data2[];
143-
// Each thread uses max_triplets_per_spM elements of the array
144-
triplet* dataPos = &data2[threadIdx.x * filter_config.max_triplets_per_spM];
143+
// Each thread uses maxSeedsPerSpM elements of the array
144+
triplet* dataPos = &data2[threadIdx.x * finder_config.maxSeedsPerSpM];
145145

146-
device::select_seeds(details::global_index1(), filter_config, spacepoints,
147-
sp_view, spM_tc, midBot_tc, triplet_view, dataPos,
148-
seed_view);
146+
device::select_seeds(details::global_index1(), finder_config, filter_config,
147+
spacepoints, sp_view, spM_tc, midBot_tc, triplet_view,
148+
dataPos, seed_view);
149149
}
150150

151151
} // namespace kernels
@@ -355,14 +355,14 @@ edm::seed_collection::buffer seed_finding::operator()(
355355
nSeedSelectingThreads;
356356

357357
// Create seeds out of selected triplets
358-
kernels::select_seeds<<<nSeedSelectingBlocks, nSeedSelectingThreads,
359-
sizeof(triplet) *
360-
m_seedfilter_config.max_triplets_per_spM *
361-
nSeedSelectingThreads,
362-
stream>>>(m_seedfilter_config, spacepoints_view,
363-
g2_view, triplet_counter_spM_buffer,
364-
triplet_counter_midBot_buffer,
365-
triplet_buffer, seed_buffer);
358+
kernels::
359+
select_seeds<<<nSeedSelectingBlocks, nSeedSelectingThreads,
360+
sizeof(triplet) * m_seedfinder_config.maxSeedsPerSpM *
361+
nSeedSelectingThreads,
362+
stream>>>(
363+
m_seedfinder_config, m_seedfilter_config, spacepoints_view, g2_view,
364+
triplet_counter_spM_buffer, triplet_counter_midBot_buffer,
365+
triplet_buffer, seed_buffer);
366366
TRACCC_CUDA_ERROR_CHECK(cudaGetLastError());
367367

368368
return seed_buffer;

device/sycl/src/seeding/seed_finding.sycl

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ edm::seed_collection::buffer seed_finding::operator()(
338338
update_weights_kernel.wait_and_throw();
339339

340340
// Check if device is capable of allocating sufficient local memory
341-
assert(sizeof(triplet) * m_seedfilter_config.max_triplets_per_spM *
341+
assert(sizeof(triplet) * m_seedfinder_config.maxSeedsPerSpM *
342342
seedSelectingLocalSize <
343343
details::get_queue(m_queue)
344344
.get_device()
@@ -350,25 +350,23 @@ edm::seed_collection::buffer seed_finding::operator()(
350350
// Array for temporary storage of triplets for comparing within
351351
// kernel
352352
vecmem::sycl::local_accessor<triplet> local_mem(
353-
m_seedfilter_config.max_triplets_per_spM *
354-
seedSelectingLocalSize,
355-
h);
353+
m_seedfinder_config.maxSeedsPerSpM * seedSelectingLocalSize, h);
356354

357355
h.parallel_for<kernels::select_seeds>(
358356
seedSelectingRange,
359-
[filter_config = m_seedfilter_config, spacepoints_view, g2_view,
357+
[finder_config = m_seedfinder_config,
358+
filter_config = m_seedfilter_config, spacepoints_view, g2_view,
360359
triplet_counter_spM_view, triplet_counter_midBot_view,
361360
triplet_view, local_mem, seed_view](::sycl::nd_item<1> item) {
362361
// Each thread uses compatSeedLimit elements of the array
363-
triplet* dataPos =
364-
&local_mem[item.get_local_id() *
365-
filter_config.max_triplets_per_spM];
366-
367-
device::select_seeds(details::global_index(item),
368-
filter_config, spacepoints_view,
369-
g2_view, triplet_counter_spM_view,
370-
triplet_counter_midBot_view,
371-
triplet_view, dataPos, seed_view);
362+
triplet* dataPos = &local_mem[item.get_local_id() *
363+
finder_config.maxSeedsPerSpM];
364+
365+
device::select_seeds(
366+
details::global_index(item), finder_config,
367+
filter_config, spacepoints_view, g2_view,
368+
triplet_counter_spM_view, triplet_counter_midBot_view,
369+
triplet_view, dataPos, seed_view);
372370
});
373371
})
374372
.wait_and_throw();

tests/cpu/compare_with_acts_seeding.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@ TEST_P(CompareWithActsSeedingTests, Run) {
164164

165165
// Start creating Seed filter object
166166
Acts::SeedFilterConfig sfconf;
167-
sfconf.maxSeedsPerSpM = traccc::seedfilter_config().maxSeedsPerSpM;
168167
// there are a lot more variables here tbh
169168

170169
// We also need some atlas-specific cut

0 commit comments

Comments
 (0)