File indexing completed on 2026-05-27 07:24:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "detray/navigation/caching_navigator.hpp"
0011 #include "detray/propagator/actors.hpp"
0012 #include "detray/propagator/actors/parameter_updater.hpp"
0013 #include "detray/propagator/rk_stepper.hpp"
0014 #include "detray/tracks/tracks.hpp"
0015
0016
0017 #include "detray/benchmarks/cpu/propagation_benchmark.hpp"
0018 #include "detray/benchmarks/types.hpp"
0019
0020
0021 #include "detray/test/common/bfield.hpp"
0022 #include "detray/test/common/build_toy_detector.hpp"
0023 #include "detray/test/common/build_wire_chamber.hpp"
0024 #include "detray/test/common/track_generators.hpp"
0025
0026
0027 #include <vecmem/memory/host_memory_resource.hpp>
0028
0029
0030 #include <iostream>
0031 #include <string>
0032
0033 using namespace detray;
0034
0035 int main(int argc, char** argv) {
0036 using toy_detector_t = detector<benchmarks::toy_metadata>;
0037 using bench_algebra = typename toy_detector_t::algebra_type;
0038 using scalar = dscalar<bench_algebra>;
0039 using vector3 = dvector3D<bench_algebra>;
0040
0041 using free_track_parameters_t = free_track_parameters<bench_algebra>;
0042 using uniform_gen_t =
0043 detail::random_numbers<scalar, std::uniform_real_distribution<scalar>>;
0044 using track_generator_t =
0045 random_track_generator<free_track_parameters_t, uniform_gen_t>;
0046
0047 using field_t = bfield::const_field_t<scalar>;
0048 using stepper_t = rk_stepper<typename field_t::view_t, bench_algebra>;
0049 using empty_chain_t = actor_chain<>;
0050 using default_chain = actor_chain<actor::parameter_updater<
0051 bench_algebra, actor::pointwise_material_interactor<bench_algebra>>>;
0052
0053 vecmem::host_memory_resource host_mr;
0054
0055
0056
0057
0058
0059
0060 vector3 B{static_cast<scalar>(0.f), static_cast<scalar>(0.f),
0061 2.f * unit<scalar>::T};
0062
0063
0064 toy_det_config<scalar> toy_cfg{};
0065 toy_cfg.use_material_maps(false).n_brl_layers(4u).n_edc_layers(7u);
0066
0067 std::clog << toy_cfg << std::endl;
0068
0069
0070 wire_chamber_config<scalar> wire_chamber_cfg{};
0071 wire_chamber_cfg.half_z(500.f * unit<scalar>::mm);
0072
0073 std::clog << wire_chamber_cfg << std::endl;
0074
0075
0076 propagation::config prop_cfg{};
0077 prop_cfg.navigation.search_window = {3u, 3u};
0078
0079 prop_cfg.navigation.estimate_scattering_noise = false;
0080
0081 std::clog << prop_cfg << std::endl;
0082
0083
0084 detray::benchmarks::benchmark_base::configuration bench_cfg{};
0085
0086 std::vector<int> n_tracks{8 * 8, 16 * 16, 32 * 32, 64 * 64,
0087 128 * 128, 256 * 256, 512 * 512};
0088
0089 auto trk_cfg =
0090 detray::benchmarks::get_default_trk_gen_config<track_generator_t>(
0091 n_tracks);
0092
0093
0094 trk_cfg.seed(detail::random_numbers<scalar>::default_seed());
0095
0096
0097 bench_cfg.n_warmup(static_cast<int>(
0098 std::ceil(0.1f * static_cast<float>(trk_cfg.n_tracks()))));
0099 bench_cfg.do_warmup(true);
0100
0101
0102
0103
0104 auto track_samples =
0105 detray::benchmarks::generate_track_samples<track_generator_t>(
0106 &host_mr, n_tracks, trk_cfg);
0107
0108 const auto [toy_det, names] =
0109 build_toy_detector<bench_algebra>(host_mr, toy_cfg);
0110 const auto [wire_chamber, _] =
0111 build_wire_chamber<bench_algebra>(host_mr, wire_chamber_cfg);
0112
0113 auto bfield = create_const_field<scalar>(B);
0114
0115 dtuple<> empty_state{};
0116
0117 actor::parameter_updater_state<bench_algebra> updater_state{prop_cfg};
0118 actor::pointwise_material_interactor<bench_algebra>::state interactor_state{};
0119
0120 auto actor_states =
0121 detail::make_tuple<dtuple>(updater_state, interactor_state);
0122
0123
0124
0125
0126 std::clog << "Propagation Benchmarks\n"
0127 << "----------------------\n\n";
0128
0129 prop_cfg.stepping.do_covariance_transport = true;
0130 detray::benchmarks::register_benchmark<
0131 detray::benchmarks::host_propagation_bm, stepper_t, default_chain>(
0132 "TOY_DETECTOR_W_COV_TRANSPORT", bench_cfg, prop_cfg, toy_det, bfield,
0133 &actor_states, track_samples, n_tracks);
0134
0135 prop_cfg.stepping.do_covariance_transport = false;
0136 detray::benchmarks::register_benchmark<
0137 detray::benchmarks::host_propagation_bm, stepper_t, empty_chain_t>(
0138 "TOY_DETECTOR", bench_cfg, prop_cfg, toy_det, bfield, &empty_state,
0139 track_samples, n_tracks);
0140
0141 prop_cfg.stepping.do_covariance_transport = true;
0142 detray::benchmarks::register_benchmark<
0143 detray::benchmarks::host_propagation_bm, stepper_t, default_chain>(
0144 "WIRE_CHAMBER_W_COV_TRANSPORT", bench_cfg, prop_cfg, wire_chamber, bfield,
0145 &actor_states, track_samples, n_tracks);
0146
0147 prop_cfg.stepping.do_covariance_transport = false;
0148 detray::benchmarks::register_benchmark<
0149 detray::benchmarks::host_propagation_bm, stepper_t, empty_chain_t>(
0150 "WIRE_CHAMBER", bench_cfg, prop_cfg, wire_chamber, bfield, &empty_state,
0151 track_samples, n_tracks);
0152
0153
0154 ::benchmark::Initialize(&argc, argv);
0155 ::benchmark::RunSpecifiedBenchmarks();
0156 ::benchmark::Shutdown();
0157 }