Skip to content

Commit 1577722

Browse files
authored
The CUDA navigator test is failing in single precision, which has not been picked up by the CI. (acts-project#649)
Turns out the test does not configure the grids correctly, which can lead to the track hitting empty bins even in straight line navigation. Also sets the CI CUDA test to single precision.
1 parent 8dddba4 commit 1577722

4 files changed

Lines changed: 15 additions & 14 deletions

File tree

.gitlab-ci.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ build_cuda:
1616
- >
1717
cmake -S src -B build
1818
-DCMAKE_BUILD_TYPE=Release
19-
-DBUILD_TESTING=ON
19+
-DDETRAY_CUSTOM_SCALARTYPE=float
20+
-DBUILD_TESTING=ON
2021
-DDETRAY_BUILD_TESTING=ON
2122
-DDETRAY_BUILD_CUDA=ON
2223
-DDETRAY_VC_PLUGIN=OFF
@@ -58,6 +59,7 @@ build_sycl:
5859
- >
5960
cmake -S src -B build
6061
-DCMAKE_BUILD_TYPE=Release
62+
-DDETRAY_CUSTOM_SCALARTYPE=float
6163
-DDETRAY_BUILD_CUDA=OFF
6264
-DDETRAY_BUILD_SYCL=ON
6365
-DBUILD_TESTING=ON

tests/unit_tests/device/cuda/navigator_cuda.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ TEST(navigator_cuda, navigator) {
3131

3232
// Create navigator
3333
navigator_host_t nav;
34+
navigation::config cfg{};
35+
cfg.search_window = {1u, 1u};
3436

3537
// Create the vector of initial track parameters
3638
vecmem::vector<free_track_parameters<transform3>> tracks_host(&mng_mr);
@@ -60,21 +62,22 @@ TEST(navigator_cuda, navigator) {
6062
auto& track = tracks_host[i];
6163
stepper_t stepper;
6264

65+
// Propagator is built from the stepper and navigator
6366
prop_state<navigator_host_t::state> propagation{
6467
stepper_t::state{track}, navigator_host_t::state(det, mng_mr)};
6568

6669
navigator_host_t::state& navigation = propagation._navigation;
6770
stepper_t::state& stepping = propagation._stepping;
6871

6972
// Start propagation and record volume IDs
70-
bool heartbeat = nav.init(propagation);
73+
bool heartbeat = nav.init(propagation, cfg);
7174
while (heartbeat) {
7275

7376
heartbeat &= stepper.step(propagation);
7477

7578
navigation.set_high_trust();
7679

77-
heartbeat &= nav.update(propagation);
80+
heartbeat &= nav.update(propagation, cfg);
7881

7982
// Record volume
8083
volume_records_host[i].push_back(navigation.volume());
@@ -116,7 +119,7 @@ TEST(navigator_cuda, navigator) {
116119
copy.setup(candidates_buffer);
117120

118121
// Run navigator test
119-
navigator_test(det_data, tracks_data, candidates_buffer,
122+
navigator_test(det_data, cfg, tracks_data, candidates_buffer,
120123
volume_records_buffer, position_records_buffer);
121124

122125
// Copy volume record buffer into volume & position records device

tests/unit_tests/device/cuda/navigator_cuda_kernel.cu

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
namespace detray {
1212

1313
__global__ void navigator_test_kernel(
14-
typename detector_host_t::view_type det_data,
14+
typename detector_host_t::view_type det_data, navigation::config cfg,
1515
vecmem::data::vector_view<free_track_parameters<transform3>> tracks_data,
1616
vecmem::data::jagged_vector_view<intersection_t> candidates_data,
1717
vecmem::data::jagged_vector_view<dindex> volume_records_data,
@@ -47,14 +47,14 @@ __global__ void navigator_test_kernel(
4747
navigation.set_volume(0u);
4848

4949
// Start propagation and record volume IDs
50-
bool heartbeat = nav.init(propagation);
50+
bool heartbeat = nav.init(propagation, cfg);
5151
while (heartbeat) {
5252

5353
heartbeat &= stepper.step(propagation);
5454

5555
navigation.set_high_trust();
5656

57-
heartbeat = nav.update(propagation);
57+
heartbeat = nav.update(propagation, cfg);
5858

5959
// Record volume
6060
volume_records[gid].push_back(navigation.volume());
@@ -63,7 +63,7 @@ __global__ void navigator_test_kernel(
6363
}
6464

6565
void navigator_test(
66-
typename detector_host_t::view_type det_data,
66+
typename detector_host_t::view_type det_data, navigation::config& cfg,
6767
vecmem::data::vector_view<free_track_parameters<transform3>>& tracks_data,
6868
vecmem::data::jagged_vector_view<intersection_t>& candidates_data,
6969
vecmem::data::jagged_vector_view<dindex>& volume_records_data,
@@ -74,7 +74,7 @@ void navigator_test(
7474

7575
// run the test kernel
7676
navigator_test_kernel<<<block_dim, thread_dim>>>(
77-
det_data, tracks_data, candidates_data, volume_records_data,
77+
det_data, cfg, tracks_data, candidates_data, volume_records_data,
7878
position_records_data);
7979

8080
// cuda error check

tests/unit_tests/device/cuda/navigator_cuda_kernel.hpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,19 @@ constexpr unsigned int theta_steps{100u};
4040
constexpr unsigned int phi_steps{100u};
4141

4242
constexpr scalar pos_diff_tolerance{1e-3f};
43-
constexpr scalar overstep_tolerance{-1e-4f};
4443

4544
// dummy propagator state
4645
template <typename navigation_t>
4746
struct prop_state {
4847
stepper_t::state _stepping;
4948
navigation_t _navigation;
50-
51-
DETRAY_HOST_DEVICE
52-
scalar mask_tolerance() const { return 15.f * unit<scalar>::um; }
5349
};
5450

5551
namespace detray {
5652

5753
/// test function for navigator with single state
5854
void navigator_test(
59-
typename detector_host_t::view_type det_data,
55+
typename detector_host_t::view_type det_data, navigation::config& cfg,
6056
vecmem::data::vector_view<free_track_parameters<transform3>>& tracks_data,
6157
vecmem::data::jagged_vector_view<intersection_t>& candidates_data,
6258
vecmem::data::jagged_vector_view<dindex>& volume_records_data,

0 commit comments

Comments
 (0)