Skip to content

Commit 5b94d91

Browse files
add sam to ram conversion benchmark
Signed-off-by: AdityaPandeyCN <[email protected]>
1 parent 73e0569 commit 5b94d91

File tree

3 files changed

+90
-5
lines changed

3 files changed

+90
-5
lines changed

benchmark/CMakeLists.txt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
22
include(GoogleBenchmark)
33

4-
add_library(sam_generator STATIC
4+
add_library(sam_generator STATIC
55
generate_sam_benchmark.cxx
66
)
77

@@ -10,6 +10,7 @@ target_include_directories(sam_generator PUBLIC
1010
)
1111

1212
target_link_libraries(sam_generator PRIVATE benchmark::benchmark)
13+
target_compile_definitions(sam_generator PRIVATE LIBRARY_BUILD)
1314
add_dependencies(sam_generator benchmark::benchmark)
1415

1516
ROOT_EXECUTABLE(generate_sam_benchmark
@@ -18,13 +19,22 @@ ROOT_EXECUTABLE(generate_sam_benchmark
1819
benchmark::benchmark
1920
)
2021

21-
install(TARGETS generate_sam_benchmark
22+
ROOT_EXECUTABLE(sam_to_ram_benchmark
23+
sam_to_ram_benchmark.cxx
24+
LIBRARIES
25+
benchmark::benchmark
26+
ramcore
27+
sam_generator
28+
)
29+
30+
install(TARGETS generate_sam_benchmark sam_to_ram_benchmark
2231
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2332
)
2433

2534
add_custom_target(benchmark
26-
COMMAND generate_sam_benchmark
27-
DEPENDS generate_sam_benchmark
35+
COMMAND sam_to_ram_benchmark
36+
DEPENDS sam_to_ram_benchmark
2837
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
29-
COMMENT "Running SAM generation benchmarks"
38+
COMMENT "Running SAM to RAM conversion benchmark"
3039
)
40+

benchmark/generate_sam_benchmark.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ static void BM_GenerateSAM(benchmark::State& state) {
9393
num_reads * 200, benchmark::Counter::kIsRate);
9494
}
9595

96+
#ifndef LIBRARY_BUILD
9697
int main(int argc, char** argv) {
9798
for (int i = 1; i < argc; ++i) {
9899
if (std::string(argv[i]) == "--generate" && i + 1 < argc) {
@@ -115,4 +116,5 @@ int main(int argc, char** argv) {
115116
::benchmark::RunSpecifiedBenchmarks();
116117
return 0;
117118
}
119+
#endif
118120

benchmark/sam_to_ram_benchmark.cxx

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include <benchmark/benchmark.h>
2+
#include "generate_sam_benchmark.h"
3+
#include "ramcore/SamToTTree.h"
4+
#include "ramcore/SamToNTuple.h"
5+
#include <filesystem>
6+
#include <iostream>
7+
#include <cstdio>
8+
#include <cstring>
9+
10+
static void BM_SamToRamComparison(benchmark::State& state) {
11+
int num_reads = state.range(0);
12+
13+
std::string sam_file = "benchmark_test.sam";
14+
std::string ttree_file = "benchmark_ttree.root";
15+
std::string rntuple_file = "benchmark_rntuple.root";
16+
17+
GenerateSAMFile(sam_file, num_reads);
18+
19+
for (auto _ : state) {
20+
21+
FILE* original_stdout = stdout;
22+
stdout = fopen("/dev/null", "w");
23+
24+
samtoram(sam_file.c_str(), ttree_file.c_str(),
25+
true, true, true, 1, 0);
26+
27+
samtoramntuple(sam_file.c_str(), rntuple_file.c_str(),
28+
true, true, true, 505, 0);
29+
30+
fclose(stdout);
31+
stdout = original_stdout;
32+
33+
if (std::filesystem::exists(ttree_file)) {
34+
auto ttree_size = std::filesystem::file_size(ttree_file);
35+
state.counters["ttree_size_mb"] = ttree_size / (1024.0 * 1024.0);
36+
}
37+
38+
if (std::filesystem::exists(rntuple_file)) {
39+
auto rntuple_size = std::filesystem::file_size(rntuple_file);
40+
state.counters["rntuple_size_mb"] = rntuple_size / (1024.0 * 1024.0);
41+
}
42+
43+
if (state.counters["ttree_size_mb"] > 0 && state.counters["rntuple_size_mb"] > 0) {
44+
state.counters["compression_ratio"] =
45+
state.counters["ttree_size_mb"] / state.counters["rntuple_size_mb"];
46+
}
47+
}
48+
49+
std::remove(sam_file.c_str());
50+
std::remove(ttree_file.c_str());
51+
std::remove(rntuple_file.c_str());
52+
53+
state.counters["reads"] = num_reads;
54+
state.counters["reads_per_second"] = benchmark::Counter(
55+
num_reads, benchmark::Counter::kIsRate);
56+
}
57+
58+
int main(int argc, char** argv) {
59+
std::cout << "SAM to RAM Conversion Benchmark" << std::endl;
60+
std::cout << "Comparing TTree vs RNTuple performance and file sizes" << std::endl;
61+
std::cout << std::endl;
62+
63+
::benchmark::RegisterBenchmark("BM_SamToRamComparison", BM_SamToRamComparison)
64+
->Args({1000})
65+
->Args({10000})
66+
->Args({100000})
67+
->Unit(benchmark::kMillisecond);
68+
69+
::benchmark::Initialize(&argc, argv);
70+
::benchmark::RunSpecifiedBenchmarks();
71+
return 0;
72+
}
73+

0 commit comments

Comments
 (0)