Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve context information for benchmarks #1718

Open
11 of 15 tasks
cz4rs opened this issue Mar 6, 2023 · 3 comments
Open
11 of 15 tasks

improve context information for benchmarks #1718

cz4rs opened this issue Mar 6, 2023 · 3 comments

Comments

@cz4rs
Copy link
Contributor

cz4rs commented Mar 6, 2023

I made a related comment over here: #1626 (comment)

This looks like a really great set of information. Would it be possible to include the following:

General:

  • compilers and versions used for the build
  • as precise a version as possible of all dependencies
    • Kokkos Core SHA
    • Kokkos Kernels SHA
    • any TPLs
    • Google Benchmark

OpenMP environment variables for OpenMP benchmarks (from querying the environment variables, or querying the OpenMP API programmatically)

  • OMP_NUM_THREADS
  • OMP_DYNAMIC
  • OMP_PROC_BIND
  • OMP_PLACES

For CUDA (from parsing nvidia-smi, or using the CUDA runtime API query functions)

  • Nvidia driver version (probably taken from nvidia-smi)
  • GPU name / model / revision (enough to unambiguously identify the SKU, this is more than just the GPU architecture)

For AMD / Intel GPUs:

  • analogous to CUDA

This information is good to have to reproduce any issues that arise.

Originally posted by @cwpearson in #1636 (comment)


Include more information in benchmark context.

Relevant part of the current JSON output.
{
  "context": {
    "date": "2023-03-02T19:19:26+01:00",
    "host_name": "perrinel-MS-7C75",
    "executable": "/home/perrinel/Dev/kokkos/build_kernel_benchmark/perf_test/KokkosKernels_PerformanceTest_Benchmark",
    "num_cpus": 20,
    "mhz_per_cpu": 5300,
    "cpu_scaling_enabled": true,
    "caches": [
      {
        "type": "Data",
        "level": 1,
        "size": 32768,
        "num_sharing": 2
      },
      {
        "type": "Instruction",
        "level": 1,
        "size": 32768,
        "num_sharing": 2
      },
      {
        "type": "Unified",
        "level": 2,
        "size": 262144,
        "num_sharing": 2
      },
      {
        "type": "Unified",
        "level": 3,
        "size": 20971520,
        "num_sharing": 20
      }
    ],
    "load_avg": [3.13,1.83,0.87],
    "library_build_type": "debug",
    "CPU architecture": "none",
    "Default Device": "N6Kokkos6SerialE",
    "GPU architecture": "none",
    "KOKKOSKERNELS_ENABLE_TPL_ARMPL": "no",
    "KOKKOSKERNELS_ENABLE_TPL_BLAS": "no",
    "KOKKOSKERNELS_ENABLE_TPL_CBLAS": "no",
    "KOKKOSKERNELS_ENABLE_TPL_CHOLMOD": "no",
    "KOKKOSKERNELS_ENABLE_TPL_CUBLAS": "no",
    "KOKKOSKERNELS_ENABLE_TPL_CUSPARSE": "no",
    "KOKKOSKERNELS_ENABLE_TPL_LAPACK": "no",
    "KOKKOSKERNELS_ENABLE_TPL_LAPACKE": "no",
    "KOKKOSKERNELS_ENABLE_TPL_MAGMA": "no",
    "KOKKOSKERNELS_ENABLE_TPL_METIS": "no",
    "KOKKOSKERNELS_ENABLE_TPL_MKL": "no",
    "KOKKOSKERNELS_ENABLE_TPL_ROCBLAS": "no",
    "KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE": "no",
    "KOKKOSKERNELS_ENABLE_TPL_SUPERLU": "no",
    "KOKKOS_COMPILER_GNU": "940",
    "KOKKOS_ENABLE_ASM": "yes",
    "KOKKOS_ENABLE_CXX17": "yes",
    "KOKKOS_ENABLE_CXX20": "no",
    "KOKKOS_ENABLE_CXX23": "no",
    "KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK": "no",
    "KOKKOS_ENABLE_GNU_ATOMICS": "no",
    "KOKKOS_ENABLE_HBWSPACE": "no",
    "KOKKOS_ENABLE_HWLOC": "no",
    "KOKKOS_ENABLE_INTEL_ATOMICS": "no",
    "KOKKOS_ENABLE_INTEL_MM_ALLOC": "no",
    "KOKKOS_ENABLE_LIBDL": "yes",
    "KOKKOS_ENABLE_LIBRT": "no",
    "KOKKOS_ENABLE_PRAGMA_IVDEP": "no",
    "KOKKOS_ENABLE_PRAGMA_LOOPCOUNT": "no",
    "KOKKOS_ENABLE_PRAGMA_UNROLL": "no",
    "KOKKOS_ENABLE_PRAGMA_VECTOR": "no",
    "KOKKOS_ENABLE_SERIAL": "yes",
    "KOKKOS_ENABLE_SERIAL_ATOMICS": "no",
    "KOKKOS_ENABLE_WINDOWS_ATOMICS": "no",
    "Kokkos Version": "4.0.99",
    "KokkosKernels Version": "4.0.99"
  },
  "benchmarks": [
    (benchmark results...)
  ]
}
  • 1. Compilers and versions used for the build (already have from core)
    • Example:
      "KOKKOS_COMPILER_GNU": "940"
      "KOKKOS_COMPILER_CLANG": "1507"
  • 2. Precise versions of all libraries
    • 2.1 Kokkos Core SHA (already available in Kokkos Core benchmarking code, but not exposed in Kokkos::print_configuration)
      • Example:
      "GIT_BRANCH": "HEAD",
      "GIT_CLEAN_STATUS": "CLEAN",
      "GIT_COMMIT_DATE": "2023-03-03T10:10:33-05:00",
      "GIT_COMMIT_DESCRIPTION": "Merge pull request #5912 from ndellingwood/release-candidate-4.0.0",
      "GIT_COMMIT_HASH": "aa1f48f31",
      (...)
      "Kokkos Version": "4.0.0"
    • 2.2 Kokkos Kernels SHA
    • Add git information to benchmark context #1722
    • 2.3 Any TPLs (yes/no already available in KokkosKernels::print_configuration)
      • Example:
      "KOKKOSKERNELS_ENABLE_TPL_ARMPL": "no",
      "KOKKOSKERNELS_ENABLE_TPL_BLAS": "no",
      "KOKKOSKERNELS_ENABLE_TPL_CBLAS": "no",
      "KOKKOSKERNELS_ENABLE_TPL_CHOLMOD": "no",
      "KOKKOSKERNELS_ENABLE_TPL_CUBLAS": "no",
      "KOKKOSKERNELS_ENABLE_TPL_CUSPARSE": "no",
      "KOKKOSKERNELS_ENABLE_TPL_LAPACK": "no",
      "KOKKOSKERNELS_ENABLE_TPL_LAPACKE": "no",
      "KOKKOSKERNELS_ENABLE_TPL_MAGMA": "no",
      "KOKKOSKERNELS_ENABLE_TPL_METIS": "no",
      "KOKKOSKERNELS_ENABLE_TPL_MKL": "no",
      "KOKKOSKERNELS_ENABLE_TPL_ROCBLAS": "no",
      "KOKKOSKERNELS_ENABLE_TPL_ROCSPARSE": "no",
      "KOKKOSKERNELS_ENABLE_TPL_SUPERLU": "no",
      Providing precise version information: #5: added TplsVersion file and print methods #1693
  • 3. Google Benchmark SHA or version
  • 4. OpenMP environment variables for OpenMP benchmarks
    (potentially to be done in Kokkos Core)
    (from querying the environment variables, or querying the OpenMP API programmatically)
  • 5. For CUDA (from parsing nvidia-smi, or using the CUDA runtime API query functions)
    (potentially to be done in Kokkos Core)
    • 5.1 Nvidia driver version (probably taken from nvidia-smi)
    • 5.2 GPU name / model / revision (enough to unambiguously identify the SKU, this is more than just the GPU architecture)
  • 6. For AMD / Intel GPUs: analogous to CUDA (potentially to be done in Kokkos Core)
@fnrizzi
Copy link

fnrizzi commented Mar 6, 2023

My suggestion for priority is:

1. compilers and versions used for the build (already have from core) 

2. Kokkos Core SHA (already avail), Kokkos Kernels SHA (make PR in kernels)

3. Google Benchmark SHA or version  (make PR in kernels)

4. OpenMP environment variables for OpenMP benchmarks  
    (potentially to be done in CORE)
    (from querying the environment variables, or querying the OpenMP API programmatically)

 	OMP_NUM_THREADS, OMP_DYNAMIC, OMP_PROC_BIND, OMP_PLACES

5. For CUDA (from parsing nvidia-smi, or using the CUDA runtime API query functions) 
    (potentially to be done in CORE)
    Nvidia driver version (probably taken from nvidia-smi)
    GPU name / model / revision (enough to unambiguously identify the SKU, this is more than just the GPU architecture)

6. For AMD / Intel GPUs: analogous to CUDA (potentially to be done in CORE)

@fnrizzi
Copy link

fnrizzi commented Mar 6, 2023

@lucbv @cwpearson are you ok with the priority above?

@lucbv
Copy link
Contributor

lucbv commented Mar 7, 2023

Sure that sounds reasonable.
I would like to point out that some of the features listed above are implemented (partially and/or fully) here:
https://github.com/kokkos/kokkos-tools/blob/ecp-kpp3/profiling/kpp3-verifier/kp_ecp_kpp3.cpp
see this function for example: extract_gpuinfo()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants