[x265] [PATCH] Add --nobench to TestBench to disable benchmarking

Karam Singh karam.singh at multicorewareinc.com
Tue Oct 15 06:36:03 UTC 2024


This patch has been pushed to the public repo.
*__________________________*
*Karam Singh*
*Ph.D. IIT Guwahati*
Senior Software (Video Coding) Engineer
Mobile: +91 8011279030
Block 9A, 6th floor, DLF Cyber City
Manapakkam, Chennai 600 089


On Fri, Oct 11, 2024 at 10:10 PM George Steed <george.steed at arm.com> wrote:

> Allow disabling benchmarking if we are just running tests to check for
> correctness. This requires us to refactor parameter parsing to enable
> options without an argument.
> ---
>  source/test/testbench.cpp | 72 +++++++++++++++++++++++----------------
>  1 file changed, 42 insertions(+), 30 deletions(-)
>
> diff --git a/source/test/testbench.cpp b/source/test/testbench.cpp
> index de5fef2c2..ac93e37b3 100644
> --- a/source/test/testbench.cpp
> +++ b/source/test/testbench.cpp
> @@ -83,9 +83,10 @@ const char* const* chromaPartStr[X265_CSP_COUNT] =
>  void do_help()
>  {
>      printf("x265 optimized primitive testbench\n\n");
> -    printf("usage: TestBench [--cpuid CPU] [--testbench BENCH]
> [--help]\n\n");
> +    printf("usage: TestBench [--cpuid CPU] [--testbench BENCH]
> [--nobench] [--help]\n\n");
>      printf("       CPU is comma separated SIMD arch list, example:
> SSE4,AVX\n");
>      printf("       BENCH is one of
> (pixel,transforms,interp,intrapred)\n\n");
> +    printf("       --nobench disables running benchmarks, only run
> correctness tests\n\n");
>      printf("By default, the test bench will test all benches on detected
> CPU architectures\n");
>      printf("Options and testbench name may be truncated.\n");
>  }
> @@ -100,13 +101,9 @@ int main(int argc, char *argv[])
>      bool enableavx512 = true;
>      int cpuid = X265_NS::cpu_detect(enableavx512);
>      const char *testname = 0;
> +    bool run_benchmarks = true;
>
> -    if (!(argc & 1))
> -    {
> -        do_help();
> -        return 0;
> -    }
> -    for (int i = 1; i < argc - 1; i += 2)
> +    for (int i = 1; i < argc; )
>      {
>          if (strncmp(argv[i], "--", 2))
>          {
> @@ -115,8 +112,13 @@ int main(int argc, char *argv[])
>              return 1;
>          }
>          const char *name = argv[i] + 2;
> -        const char *value = argv[i + 1];
> -        if (!strncmp(name, "cpuid", strlen(name)))
> +        const char *value = i + 1 < argc ? argv[i + 1] : "";
> +        if (!strncmp(name, "help", strlen(name)))
> +        {
> +          do_help();
> +          return 0;
> +        }
> +        else if (!strncmp(name, "cpuid", strlen(name)))
>          {
>              bool bError = false;
>              cpuid = parseCpuName(value, bError, enableavx512);
> @@ -125,11 +127,19 @@ int main(int argc, char *argv[])
>                  printf("Invalid CPU name: %s\n", value);
>                  return 1;
>              }
> +            i += 2;
>          }
>          else if (!strncmp(name, "testbench", strlen(name)))
>          {
>              testname = value;
>              printf("Testing only harnesses that match name <%s>\n",
> testname);
> +            i += 2;
> +        }
> +        else if (!strncmp(name, "nobench", strlen(name)))
> +        {
> +            printf("Disabling performance benchmarking\n");
> +            run_benchmarks = false;
> +            i += 1;
>          }
>          else
>          {
> @@ -233,34 +243,36 @@ int main(int argc, char *argv[])
>      }
>
>      /******************* Cycle count for all primitives
> **********************/
> -
> -    EncoderPrimitives optprim;
> -    memset(&optprim, 0, sizeof(optprim));
> +    if (run_benchmarks)
> +    {
> +        EncoderPrimitives optprim;
> +        memset(&optprim, 0, sizeof(optprim));
>  #if defined(X265_ARCH_X86) || defined(X265_ARCH_ARM64)
> -    setupIntrinsicPrimitives(optprim, cpuid);
> +        setupIntrinsicPrimitives(optprim, cpuid);
>  #endif
>
> -    setupAssemblyPrimitives(optprim, cpuid);
> +        setupAssemblyPrimitives(optprim, cpuid);
>
> -    /* Note that we do not setup aliases for performance tests, that
> would be
> -     * redundant. The testbench only verifies they are correctly aliased
> */
> +        /* Note that we do not setup aliases for performance tests, that
> would be
> +         * redundant. The testbench only verifies they are correctly
> aliased */
>
> -    /* some hybrid primitives may rely on other primitives in the
> -     * global primitive table, so set up those pointers. This is a
> -     * bit ugly, but I don't see a better solution */
> -    memcpy(&primitives, &optprim, sizeof(EncoderPrimitives));
> +        /* some hybrid primitives may rely on other primitives in the
> +         * global primitive table, so set up those pointers. This is a
> +         * bit ugly, but I don't see a better solution */
> +        memcpy(&primitives, &optprim, sizeof(EncoderPrimitives));
>
> -    printf("\nTest performance improvement with full optimizations\n");
> -    fflush(stdout);
> +        printf("\nTest performance improvement with full
> optimizations\n");
> +        fflush(stdout);
>
> -    for (size_t h = 0; h < sizeof(harness) / sizeof(TestHarness*); h++)
> -    {
> -        if (testname && strncmp(testname, harness[h]->getName(),
> strlen(testname)))
> -            continue;
> -        printf("== %s primitives ==\n", harness[h]->getName());
> -        harness[h]->measureSpeed(cprim, optprim);
> -    }
> +        for (size_t h = 0; h < sizeof(harness) / sizeof(TestHarness*);
> h++)
> +        {
> +            if (testname && strncmp(testname, harness[h]->getName(),
> strlen(testname)))
> +                continue;
> +            printf("== %s primitives ==\n", harness[h]->getName());
> +            harness[h]->measureSpeed(cprim, optprim);
> +        }
>
> -    printf("\n");
> +        printf("\n");
> +    }
>      return 0;
>  }
> --
> 2.34.1
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20241015/21c27097/attachment.htm>


More information about the x265-devel mailing list