lkml.org 
[lkml]   [2021]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v2 3/4] perf tools: Fix SMT fallback with large core counts
From
Date
On 24/11/2021 00:12, Ian Rogers wrote:
> strtoull can only read a 64-bit bitmap. On an AMD EPYC core_cpus may look
> like:
> 00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000001
> and so the sibling wasn't spotted. Fix by writing a simple hweight string
> parser.
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> tools/perf/util/smt.c | 68 ++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 58 insertions(+), 10 deletions(-)
>
> diff --git a/tools/perf/util/smt.c b/tools/perf/util/smt.c
> index 34f1b1b1176c..2636be65305a 100644
> --- a/tools/perf/util/smt.c
> +++ b/tools/perf/util/smt.c
> @@ -5,6 +5,56 @@
> #include "api/fs/fs.h"
> #include "smt.h"
>
> +/**
> + * hweight_str - Returns the number of bits set in str. Stops at first non-hex
> + * or ',' character.

nit: the wording here could be improved, I think. You really mean we
iter until we reach a character which is neither a hex nor a ',', while
I read this as iter until either a non-hex or a ','.

> + */
> +static int hweight_str(char *str)
> +{
> + int result = 0;
> +
> + while (*str) {

Can we use __buitin_popcount() to try to simplify?

> + switch (*str++) {
> + case '0':
> + case ',':
> + break;
> + case '1':
> + case '2':
> + case '4':
> + case '8':
> + result++;
> + break;
> + case '3':
> + case '5':
> + case '6':
> + case '9':
> + case 'a':
> + case 'A':
> + case 'c':
> + case 'C':
> + result += 2;
> + break;
> + case '7':
> + case 'b':
> + case 'B':
> + case 'd':
> + case 'D':
> + case 'e':
> + case 'E':
> + result += 3;
> + break;
> + case 'f':
> + case 'F':
> + result += 4;
> + break;
> + default:
> + goto done;
> + }
> + }
> +done:

\
 
 \ /
  Last update: 2021-11-24 18:06    [W:0.057 / U:0.744 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site