From 4c202815c71a18d47a83f1f0109fe1d9b77debb6 Mon Sep 17 00:00:00 2001 From: Nick Terrell Date: Tue, 6 Sep 2016 12:40:59 -0700 Subject: [PATCH] [pzstd] Smart default # of threads (#331) --- contrib/pzstd/Options.cpp | 11 +++++++++-- contrib/pzstd/test/OptionsTest.cpp | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/contrib/pzstd/Options.cpp b/contrib/pzstd/Options.cpp index 616130996..122f4fb36 100644 --- a/contrib/pzstd/Options.cpp +++ b/contrib/pzstd/Options.cpp @@ -10,6 +10,7 @@ #include #include +#include namespace pzstd { @@ -103,6 +104,7 @@ bool Options::parse(int argc, const char** argv) { numThreads = parseUnsigned(argv[i]); if (numThreads == 0) { std::fprintf(stderr, "Invalid argument: # of threads must be > 0.\n"); + return false; } break; case 'p': @@ -169,12 +171,17 @@ bool Options::parse(int argc, const char** argv) { if (compressionLevel > maxCLevel) { std::fprintf( stderr, "Invalid compression level %u.\n", compressionLevel); + return false; } } // Check that numThreads is set if (numThreads == 0) { - std::fprintf(stderr, "Invalid arguments: # of threads not specified.\n"); - return false; + numThreads = std::thread::hardware_concurrency(); + if (numThreads == 0) { + std::fprintf(stderr, "Invalid arguments: # of threads not specified " + "and unable to determine hardware concurrency.\n"); + return false; + } } return true; } diff --git a/contrib/pzstd/test/OptionsTest.cpp b/contrib/pzstd/test/OptionsTest.cpp index 87e79d59e..b87358c04 100644 --- a/contrib/pzstd/test/OptionsTest.cpp +++ b/contrib/pzstd/test/OptionsTest.cpp @@ -118,11 +118,11 @@ TEST(Options, ValidInputs) { } } -TEST(Options, BadNumThreads) { +TEST(Options, NumThreads) { { Options options; std::array args = {{nullptr, "-o", "-"}}; - EXPECT_FALSE(options.parse(args.size(), args.data())); + EXPECT_TRUE(options.parse(args.size(), args.data())); } { Options options;