File indexing completed on 2026-05-27 07:24:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "algebra/vc_soa.hpp"
0012 #include "algebra/utils/data_generator.hpp"
0013 #include "detray/benchmarks/cpu/matrix_benchmark.hpp"
0014 #include "detray/benchmarks/cpu/transform_benchmark.hpp"
0015 #include "detray/benchmarks/cpu/vector_benchmark.hpp"
0016
0017 #include "detray/benchmarks/benchmark_utils.hpp"
0018
0019
0020 #include <benchmark/benchmark.h>
0021
0022
0023 #include <iostream>
0024
0025 using namespace detray::benchmarks;
0026 using namespace detray::algebra;
0027
0028
0029 int main(int argc, char** argv) {
0030 constexpr std::size_t n_samples{100000};
0031
0032
0033
0034
0035 detray::benchmarks::configuration cfg_s{};
0036
0037
0038 cfg_s.n_samples(n_samples / Vc::float_v::Size);
0039
0040 cfg_s.do_warmup(false);
0041
0042
0043 detray::benchmarks::configuration cfg_d{cfg_s};
0044 cfg_d.n_samples(n_samples / Vc::double_v::Size);
0045
0046 cfg_d.do_warmup(false);
0047
0048 using trf_f_t = transform3_bm<vc_soa::transform3<float>>;
0049 using trf_d_t = transform3_bm<vc_soa::transform3<double>>;
0050
0051 using mat44_transp_f_t = matrix_unaryOP_bm<vc_soa::matrix_type<float, 4, 4>,
0052 bench_op::matrix::transpose>;
0053 using mat44_transp_d_t = matrix_unaryOP_bm<vc_soa::matrix_type<double, 4, 4>,
0054 bench_op::matrix::transpose>;
0055 using mat66_transp_f_t = matrix_unaryOP_bm<vc_soa::matrix_type<float, 6, 6>,
0056 bench_op::matrix::transpose>;
0057 using mat66_transp_d_t = matrix_unaryOP_bm<vc_soa::matrix_type<double, 6, 6>,
0058 bench_op::matrix::transpose>;
0059 using mat88_transp_f_t = matrix_unaryOP_bm<vc_soa::matrix_type<float, 8, 8>,
0060 bench_op::matrix::transpose>;
0061 using mat88_transp_d_t = matrix_unaryOP_bm<vc_soa::matrix_type<double, 8, 8>,
0062 bench_op::matrix::transpose>;
0063
0064 using mat44_add_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 4, 4>,
0065 bench_op::matrix::add>;
0066 using mat44_add_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 4, 4>,
0067 bench_op::matrix::add>;
0068 using mat66_add_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 6, 6>,
0069 bench_op::matrix::add>;
0070 using mat66_add_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 6, 6>,
0071 bench_op::matrix::add>;
0072 using mat88_add_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 8, 8>,
0073 bench_op::matrix::add>;
0074 using mat88_add_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 8, 8>,
0075 bench_op::matrix::add>;
0076
0077 using mat44_mul_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 4, 4>,
0078 bench_op::matrix::mul>;
0079 using mat44_mul_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 4, 4>,
0080 bench_op::matrix::mul>;
0081 using mat66_mul_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 6, 6>,
0082 bench_op::matrix::mul>;
0083 using mat66_mul_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 6, 6>,
0084 bench_op::matrix::mul>;
0085 using mat88_mul_f_t = matrix_binaryOP_bm<vc_soa::matrix_type<float, 8, 8>,
0086 bench_op::matrix::mul>;
0087 using mat88_mul_d_t = matrix_binaryOP_bm<vc_soa::matrix_type<double, 8, 8>,
0088 bench_op::matrix::mul>;
0089
0090 using mat44_vec_f_t = matrix_vector_bm<vc_soa::matrix_type<float, 4, 4>,
0091 vc_soa::vector_type<float, 4>>;
0092 using mat44_vec_d_t = matrix_vector_bm<vc_soa::matrix_type<double, 4, 4>,
0093 vc_soa::vector_type<double, 4>>;
0094 using mat66_vec_f_t = matrix_vector_bm<vc_soa::matrix_type<float, 6, 6>,
0095 vc_soa::vector_type<float, 6>>;
0096 using mat66_vec_d_t = matrix_vector_bm<vc_soa::matrix_type<double, 6, 6>,
0097 vc_soa::vector_type<double, 6>>;
0098 using mat88_vec_f_t = matrix_vector_bm<vc_soa::matrix_type<float, 8, 8>,
0099 vc_soa::vector_type<float, 8>>;
0100 using mat88_vec_d_t = matrix_vector_bm<vc_soa::matrix_type<double, 8, 8>,
0101 vc_soa::vector_type<double, 8>>;
0102
0103 std::cout << "-----------------------------------------------\n"
0104 << "Detray linear algebra benchmark (Vc SoA)\n"
0105 << "-----------------------------------------------\n\n"
0106 << "(single)\n"
0107 << cfg_s << "(double)\n"
0108 << cfg_d;
0109
0110
0111
0112
0113
0114
0115 DETRAY_DEFINE_VECTOR_BENCH(vc_soa)
0116 DETRAY_REGISTER_VECTOR_BENCH(cfg_s, cfg_d)
0117
0118
0119 detray::benchmarks::register_benchmark<trf_f_t>(cfg_s, "_SINGLE");
0120 detray::benchmarks::register_benchmark<trf_d_t>(cfg_d, "_DOUBLE");
0121
0122
0123 detray::benchmarks::register_benchmark<mat44_transp_f_t>(cfg_s,
0124 "_4x4_SINGLE");
0125 detray::benchmarks::register_benchmark<mat44_transp_d_t>(cfg_d,
0126 "_4x4_DOUBLE");
0127 detray::benchmarks::register_benchmark<mat66_transp_f_t>(cfg_s,
0128 "_6x6_SINGLE");
0129 detray::benchmarks::register_benchmark<mat66_transp_d_t>(cfg_d,
0130 "_6x6_DOUBLE");
0131 detray::benchmarks::register_benchmark<mat88_transp_f_t>(cfg_s,
0132 "_8x8_SINGLE");
0133 detray::benchmarks::register_benchmark<mat88_transp_d_t>(cfg_d,
0134 "_8x8_DOUBLE");
0135
0136 detray::benchmarks::register_benchmark<mat44_add_f_t>(cfg_s, "_4x4_SINGLE");
0137 detray::benchmarks::register_benchmark<mat44_add_d_t>(cfg_d, "_4x4_DOUBLE");
0138 detray::benchmarks::register_benchmark<mat66_add_f_t>(cfg_s, "_6x6_SINGLE");
0139 detray::benchmarks::register_benchmark<mat66_add_d_t>(cfg_d, "_6x6_DOUBLE");
0140 detray::benchmarks::register_benchmark<mat88_add_f_t>(cfg_s, "_8x8_SINGLE");
0141 detray::benchmarks::register_benchmark<mat88_add_d_t>(cfg_d, "_8x8_DOUBLE");
0142
0143 detray::benchmarks::register_benchmark<mat44_mul_f_t>(cfg_s, "_4x4_SINGLE");
0144 detray::benchmarks::register_benchmark<mat44_mul_d_t>(cfg_d, "_4x4_DOUBLE");
0145 detray::benchmarks::register_benchmark<mat66_mul_f_t>(cfg_s, "_6x6_SINGLE");
0146 detray::benchmarks::register_benchmark<mat66_mul_d_t>(cfg_d, "_6x6_DOUBLE");
0147 detray::benchmarks::register_benchmark<mat88_mul_f_t>(cfg_s, "_8x8_SINGLE");
0148 detray::benchmarks::register_benchmark<mat88_mul_d_t>(cfg_d, "_8x8_DOUBLE");
0149
0150 detray::benchmarks::register_benchmark<mat44_vec_f_t>(cfg_s, "_4x4_SINGLE");
0151 detray::benchmarks::register_benchmark<mat44_vec_d_t>(cfg_d, "_4x4_DOUBLE");
0152 detray::benchmarks::register_benchmark<mat66_vec_f_t>(cfg_s, "_6x6_SINGLE");
0153 detray::benchmarks::register_benchmark<mat66_vec_d_t>(cfg_d, "_6x6_DOUBLE");
0154 detray::benchmarks::register_benchmark<mat88_vec_f_t>(cfg_s, "_8x8_SINGLE");
0155 detray::benchmarks::register_benchmark<mat88_vec_d_t>(cfg_d, "_8x8_DOUBLE");
0156
0157 ::benchmark::Initialize(&argc, argv);
0158 ::benchmark::RunSpecifiedBenchmarks();
0159 ::benchmark::Shutdown();
0160 }