Skip to content

Commit 6276e79

Browse files
authored
Merge pull request #1089 from stephenswat/cleanup/max_seeds_per_spm
Deduplicate max seeds per middle SP parameter
2 parents 327189d + 0980665 commit 6276e79

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)