131 std::cout <<
"Thread pool size:\t\t" <<
r.fThreadPoolSize <<
'\n';
133 if (
r.fMTSetupRealTime > 0.) {
134 std::cout <<
"Real time to setup MT run:\t" <<
r.fMTSetupRealTime <<
" s\n";
135 std::cout <<
"CPU time to setup MT run:\t" <<
r.fMTSetupCpuTime <<
" s\n";
138 std::cout <<
"Real time:\t\t\t" <<
r.fRealTime <<
" s\n";
139 std::cout <<
"CPU time:\t\t\t" <<
r.fCpuTime <<
" s\n";
141 std::cout <<
"Uncompressed data read:\t\t" <<
r.fUncompressedBytesRead <<
" bytes\n";
142 std::cout <<
"Compressed data read:\t\t" <<
r.fCompressedBytesRead <<
" bytes\n";
146 std::cout <<
"Uncompressed throughput:\t" <<
r.fUncompressedBytesRead /
r.fRealTime / 1024 / 1024 <<
" MB/s\n";
147 std::cout <<
"\t\t\t\t" <<
r.fUncompressedBytesRead /
r.fRealTime / 1024 / 1024 /
effectiveThreads
149 std::cout <<
"Compressed throughput:\t\t" <<
r.fCompressedBytesRead /
r.fRealTime / 1024 / 1024 <<
" MB/s\n";
150 std::cout <<
"\t\t\t\t" <<
r.fCompressedBytesRead /
r.fRealTime / 1024 / 1024 /
effectiveThreads
155 std::cout <<
"CPU Efficiency: \t\t" << (
cpuEfficiency * 100) <<
"%\n";
156 std::cout <<
"Reading data is ";
158 std::cout <<
"likely CPU bound (decompression).\n";
160 std::cout <<
"likely I/O bound.\n";
162 std::cout <<
"likely balanced (more threads may help though).\n";
164 std::cout <<
"For details run with the --help command.\n";
180 std::cout << std::endl;
191 "Options --all-branches, --branches, and --branches-regex are mutually exclusive. You can use only one.\n";
193 for (
size_t i = 1; i < args.size(); ++i) {
194 const auto &arg = args[i];
196 if (arg ==
"--trees") {
198 }
else if (arg ==
"--files") {
200 }
else if (arg ==
"--all-branches") {
208 d.fBranchNames = {
".*"};
209 }
else if (arg ==
"--branches") {
216 }
else if (arg ==
"--branches-regex") {
224 }
else if (arg ==
"--threads") {
226 }
else if (arg ==
"--tasks-per-worker") {
227 argState = EArgState::kTasksPerWorkerHint;
228 }
else if (arg[0] ==
'-') {
229 std::cerr <<
"Unrecognized option '" << arg <<
"'\n";
233 case EArgState::kTrees:
d.fTreeNames.emplace_back(arg);
break;
234 case EArgState::kFiles:
d.fFileNames.emplace_back(arg);
break;
235 case EArgState::kBranches:
d.fBranchNames.emplace_back(arg);
break;
236 case EArgState::kThreads:
240 case EArgState::kTasksPerWorkerHint:
245 std::cerr <<
"ROOT was built without implicit multi-threading (IMT) support. The --tasks-per-worker option "
246 "will be ignored.\n";
249 default: std::cerr <<
"Unrecognized option '" << arg <<
"'\n";
return {};