diff --git a/tools/hsbench/main.cpp b/tools/hsbench/main.cpp index 8e85d7ae..4e65c8e0 100644 --- a/tools/hsbench/main.cpp +++ b/tools/hsbench/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, Intel Corporation + * Copyright (c) 2016-2020, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -207,7 +207,9 @@ void usage(const char *error) { printf(" -P Benchmark using PCRE (if supported).\n"); #endif #if defined(HAVE_DECL_PTHREAD_SETAFFINITY_NP) || defined(_WIN32) - printf(" -T CPU,CPU,... Benchmark with threads on these CPUs.\n"); + printf(" -T CPU,CPU,... or -T CPU-CPU\n"); + printf(" Benchmark with threads on specified CPUs or CPU" + " range.\n"); #endif printf(" -i DIR Don't compile, load from files in DIR" " instead.\n"); @@ -354,7 +356,8 @@ void processArgs(int argc, char *argv[], vector &sigSets, case 'T': if (!strToList(optarg, threadCores)) { usage("Couldn't parse argument to -T flag, should be" - " a list of positive integers."); + " a list of positive integers or 2 integers" + " connected with hyphen."); exit(1); } break; diff --git a/util/string_util.h b/util/string_util.h index b44586ea..ab3751c1 100644 --- a/util/string_util.h +++ b/util/string_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2019, Intel Corporation + * Copyright (c) 2015-2020, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -54,8 +54,8 @@ inline bool fromString(const std::string &s, T& val) return true; } -// read in a comma-separated set of values: very simple impl, not for -// external consumption +// read in a comma-separated or hyphen-connected set of values: very simple +// impl, not for external consumption template inline bool strToList(const std::string &s, std::vector& out) { @@ -68,7 +68,17 @@ inline bool strToList(const std::string &s, std::vector& out) } out.push_back(val); - } while (i.get(c) && c == ','); + + i.get(c); + if (c == '-') { + T val_end; + i >> val_end; + while (val < val_end) { + out.push_back(++val); + } + break; + } + } while (c == ','); return !out.empty(); }