diff --git a/.travis.yml b/.travis.yml index 5569b103..84f09f15 100644 --- a/.travis.yml +++ b/.travis.yml @@ -119,10 +119,9 @@ install: - | pwd HOME_FOLDER=$(pwd)/../ + export GCOV_PREFIX_STRIP=0 + export GCOV_PREFIX=`pwd` if [ "${EXTRA_OPTS}" == "-DCoverage=On" -a "${TRAVIS_OS_NAME}" == "linux" ]; then - export GCOV_PREFIX="$HOME_FOLDER/ROOT-gcov/" - mkdir -p $GCOV_PREFIX - #export GCOV_PREFIX_STRIP=16 PATH=~/.local/bin:${PATH}; pip install --user --upgrade pip; pip install --user cpp-coveralls; @@ -155,8 +154,7 @@ script: -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_FLAGS="${EXTRA_FLAGS}" \ ${EXTRA_OPTS} ../rootbench - cmake --build . -- ctest -V --output-on-failure -- find $GCOV_PREFIX +- ctest -V || true - #find $HOME_FOLDER after_success: diff --git a/root/CMakeLists.txt b/root/CMakeLists.txt index cdb11ab4..8d150e02 100644 --- a/root/CMakeLists.txt +++ b/root/CMakeLists.txt @@ -1,5 +1,5 @@ -add_subdirectory(math) -#add_subdirectory(io) +#add_subdirectory(math) +add_subdirectory(io) if (ROOT_roofit_FOUND) add_subdirectory(roofit) endif() diff --git a/root/io/io/TBufferMergerBenchmarks.cxx b/root/io/io/TBufferMergerBenchmarks.cxx index 28e86784..bcb21e46 100644 --- a/root/io/io/TBufferMergerBenchmarks.cxx +++ b/root/io/io/TBufferMergerBenchmarks.cxx @@ -9,10 +9,16 @@ #include #include #include +#include #include using namespace ROOT::Experimental; +int GetNumberHardwareThreads() +{ + return std::thread::hardware_concurrency(); +} + static void BM_TBufferFile_CreateEmpty(benchmark::State &state) { const char *filename = "empty.root"; @@ -45,10 +51,13 @@ static void BM_TBufferFile_GetFile(benchmark::State &state) } BENCHMARK(BM_TBufferFile_GetFile)->Unit(benchmark::kMicrosecond); BENCHMARK(BM_TBufferFile_GetFile)->Unit(benchmark::kMicrosecond)->UseRealTime()->ThreadPerCpu(); -BENCHMARK(BM_TBufferFile_GetFile)->Unit(benchmark::kMicrosecond)->UseRealTime()->ThreadRange(1, 256); +BENCHMARK(BM_TBufferFile_GetFile) + ->Unit(benchmark::kMicrosecond) + ->UseRealTime() + ->ThreadRange(1, GetNumberHardwareThreads() * 2); /// Creates a TMemFile, fills a TTree with random numbers. The data is written if it exceeds 32MB. -inline void FillTreeWithRandomData(TBufferMerger &merger, size_t nEntriesPerWorker = 24 * 1024, int flush = 32 ) +inline void FillTreeWithRandomData(TBufferMerger &merger, size_t nEntriesPerWorker = 24 * 1024, int flush = 32) { thread_local std::default_random_engine g; std::uniform_real_distribution dist(0.0, 1.0); @@ -98,7 +107,11 @@ static void BM_TBufferFile_FillTreeWithRandomData(benchmark::State &state) } BENCHMARK(BM_TBufferFile_FillTreeWithRandomData)->Unit(benchmark::kMicrosecond)->Arg(32); BENCHMARK(BM_TBufferFile_FillTreeWithRandomData)->Unit(benchmark::kMicrosecond)->Arg(32)->UseRealTime()->ThreadPerCpu(); -BENCHMARK(BM_TBufferFile_FillTreeWithRandomData)->Unit(benchmark::kMicrosecond)->Range(1, 32)->UseRealTime()->ThreadRange(1, 256); +BENCHMARK(BM_TBufferFile_FillTreeWithRandomData) + ->Unit(benchmark::kMicrosecond) + ->Range(1, 32) + ->UseRealTime() + ->ThreadRange(1, GetNumberHardwareThreads() * 2); // Define our main. BENCHMARK_MAIN(); diff --git a/root/math/genvector/Cartesian3DBenchmarks.cxx b/root/math/genvector/Cartesian3DBenchmarks.cxx index b34e058a..6264fdf3 100644 --- a/root/math/genvector/Cartesian3DBenchmarks.cxx +++ b/root/math/genvector/Cartesian3DBenchmarks.cxx @@ -64,8 +64,8 @@ static void BM_Cartesian3D_Theta(benchmark::State &state) } ComputeProcessedEntities(state, sizeof(T), VecTraits::Sum(checksum)); } -BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, double)->Range(8 << 10, 8 << 20); -BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, ROOT::Double_v)->Range(8 << 10, 8 << 20); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, double)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, ROOT::Double_v)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, float)->Range(8 << 10, 8 << 20); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Theta, ROOT::Float_v)->Range(8 << 10, 8 << 20); @@ -89,8 +89,8 @@ static void BM_Cartesian3D_Phi(benchmark::State &state) } ComputeProcessedEntities(state, sizeof(T), VecTraits::Sum(checksum)); } -BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, double)->Range(8 << 10, 8 << 20); -BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, ROOT::Double_v)->Range(8 << 10, 8 << 20); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, double)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, ROOT::Double_v)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, float)->Range(8 << 10, 8 << 20); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Phi, ROOT::Float_v)->Range(8 << 10, 8 << 20); @@ -115,8 +115,8 @@ static void BM_Cartesian3D_Mag2(benchmark::State &state) ComputeProcessedEntities(state, sizeof(T), VecTraits::Sum(checksum)); } -BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, double)->Range(8 << 10, 8 << 20); -BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, ROOT::Double_v)->Range(8 << 10, 8 << 20); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, double)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, ROOT::Double_v)->Range(8 << 10, 8 << 20)->Unit(benchmark::kMicrosecond); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, float)->Range(8 << 10, 8 << 20); // BENCHMARK_TEMPLATE(BM_Cartesian3D_Mag2, ROOT::Float_v)->Range(8 << 10, 8 << 20); diff --git a/root/math/genvector/Transform3DBenchmarks.cxx b/root/math/genvector/Transform3DBenchmarks.cxx index 8039bbac..53f009d6 100644 --- a/root/math/genvector/Transform3DBenchmarks.cxx +++ b/root/math/genvector/Transform3DBenchmarks.cxx @@ -28,10 +28,10 @@ static void BM_Transform3D(benchmark::State &state) st.Translation(); } } -BENCHMARK_TEMPLATE(BM_Transform3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Transform3D, float)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Transform3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Transform3D, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Transform3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Transform3D, float)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Transform3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Transform3D, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); template using Point = ROOT::Math::PositionVector3D, ROOT::Math::DefaultCoordinateSystemTag>; @@ -42,8 +42,8 @@ static void BM_Point3D(benchmark::State &state) Point sp1, sp2, sp3, sp4, sp5, sp6; } -BENCHMARK_TEMPLATE(BM_Point3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Point3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Point3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Point3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); template static void BM_Point3D_Gen(benchmark::State &state) @@ -52,8 +52,8 @@ static void BM_Point3D_Gen(benchmark::State &state) Point sp1(p_x(ggen), p_y(ggen), p_z(ggen)); } } -BENCHMARK_TEMPLATE(BM_Point3D_Gen, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Point3D_Gen, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Point3D_Gen, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Point3D_Gen, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); template static void BM_Plane3D(benchmark::State &state) @@ -63,9 +63,9 @@ static void BM_Plane3D(benchmark::State &state) Plane sc_plane(a, b, c, d); } } -BENCHMARK_TEMPLATE(BM_Plane3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Plane3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Plane3D, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Plane3D, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Plane3D, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Plane3D, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); template static void BM_Plane3D_Hessian(benchmark::State &state) @@ -76,8 +76,8 @@ static void BM_Plane3D_Hessian(benchmark::State &state) sc_plane.HesseDistance(); } } -BENCHMARK_TEMPLATE(BM_Plane3D_Hessian, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Plane3D_Hessian, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Plane3D_Hessian, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Plane3D_Hessian, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); template static void BM_Plane3D_Normal(benchmark::State &state) @@ -88,7 +88,6 @@ static void BM_Plane3D_Normal(benchmark::State &state) sc_plane.Normal(); } } -BENCHMARK_TEMPLATE(BM_Plane3D_Normal, double)->Range(8, 8 << 10)->Complexity(benchmark::o1); -; -BENCHMARK_TEMPLATE(BM_Plane3D_Normal, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); -BENCHMARK_TEMPLATE(BM_Plane3D_Normal, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(BM_Plane3D_Normal, double)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Plane3D_Normal, ROOT::Double_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond); +BENCHMARK_TEMPLATE(BM_Plane3D_Normal, ROOT::Float_v)->Range(8, 8 << 10)->Complexity(benchmark::o1)->Unit(benchmark::kMicrosecond);