From c64db2481aa441867f78a855350c3ced1439a800 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Fri, 12 Mar 2021 14:25:18 -0800 Subject: [PATCH 001/174] Initial link against spack built caliper; ATOMIC_PI:BASE_OpenMP instrumented; needs CALI_CONFIG env variable for output --- CMakeLists.txt | 13 +++++++ .../blueos_nvcc10_caliper25_gcc8.3.1.sh | 38 +++++++++++++++++++ src/CMakeLists.txt | 7 ++++ src/basic/ATOMIC_PI-OMP.cpp | 10 ++++- src/common/KernelBase.hpp | 5 +++ 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100755 scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ca650b90..d6bed46cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,19 @@ if (ENABLE_HIP) list(APPEND RAJA_PERFSUITE_DEPENDS hip) endif() +# +# Are we using Caliper +# +set(ENABLE_CALIPER off CACHE BOOL "") +set(RAJAPERF_USE_CALIPER off) +if (ENABLE_CALIPER) + find_package(caliper REQUIRED) + list(APPEND RAJA_PERFSUITE_DEPENDS caliper) + set(RAJAPERF_USE_CALIPER on) + add_definitions(-DRAJAPERF_USE_CALIPER) + message(STATUS "Using Caliper") +endif () + set(RAJAPERF_BUILD_SYSTYPE $ENV{SYS_TYPE}) set(RAJAPERF_BUILD_HOST $ENV{HOSTNAME}) diff --git a/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh b/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh new file mode 100755 index 000000000..8a3382147 --- /dev/null +++ b/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +############################################################################### +# Copyright (c) 2017-20, Lawrence Livermore National Security, LLC +# and RAJA Performance Suite project contributors. +# See the RAJAPerf/COPYRIGHT file for details. +# +# SPDX-License-Identifier: (BSD-3-Clause) +################################################################################# + +BUILD_SUFFIX=lc_blueos-nvcc10-caliper-gcc8.3.1 +RAJA_HOSTCONFIG=../tpl/RAJA/host-configs/lc-builds/blueos/nvcc_gcc_X.cmake + +rm -rf build_${BUILD_SUFFIX} >/dev/null +mkdir build_${BUILD_SUFFIX} && cd build_${BUILD_SUFFIX} + +module load cmake/3.14.5 +module load caliper-2.5.0-gcc-8.3.1-cu3vy3k + +CALIPER_PREFIX=/usr/WS2/holger/spack/opt/spack/linux-rhel7-power9le/gcc-8.3.1/caliper-2.5.0-cu3vy3kjwjerpdm6xis2kauhz4s6wto2/ + +cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_COMPILER=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++ \ + -C ${RAJA_HOSTCONFIG} \ + -DCMAKE_PREFIX_PATH="${CALIPER_PREFIX}/share/cmake/caliper" \ + -DENABLE_OPENMP=On \ + -DENABLE_CUDA=On \ + -DCMAKE_CUDA_FLAGS="-Xcompiler -mno-float128" \ + -DCUDA_TOOLKIT_ROOT_DIR=/usr/tce/packages/cuda/cuda-10.2.89 \ + -DCMAKE_CUDA_COMPILER=/usr/tce/packages/cuda/cuda-10.1.243/bin/nvcc \ + -DCUDA_ARCH=sm_70 \ + -DENABLE_CALIPER=On \ + -DCMAKE_INSTALL_PREFIX=../install_${BUILD_SUFFIX} \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=On \ + -DCMAKE_VERBOSE_MAKEFILE=On \ + "$@" \ + .. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0bbae5b88..d6ba98824 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,11 @@ include_directories(.) +if(RAJAPERF_USE_CALIPER) + message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") + include_directories(${caliper_INCLUDE_DIR}) +endif () + add_subdirectory(common) add_subdirectory(apps) add_subdirectory(basic) @@ -187,3 +192,5 @@ blt_add_executable( DEPENDS_ON ${RAJA_PERFSUITE_EXECUTABLE_DEPENDS} ) endif() + + diff --git a/src/basic/ATOMIC_PI-OMP.cpp b/src/basic/ATOMIC_PI-OMP.cpp index d5e135fd1..a76458bb4 100644 --- a/src/basic/ATOMIC_PI-OMP.cpp +++ b/src/basic/ATOMIC_PI-OMP.cpp @@ -31,7 +31,11 @@ void ATOMIC_PI::runOpenMPVariant(VariantID vid) switch ( vid ) { case Base_OpenMP : { - +#ifdef RAJAPERF_USE_CALIPER + printf("Caliper marking ATOMIC_PI:BASE_OpenMP\n"); + CALI_MARK_BEGIN("ATOMIC_PI:BASE_OpenMP"); +#endif + printf("start ATOMIC_PI:BASE_OpenMP\n"); startTimer(); for (RepIndex_type irep = 0; irep < run_reps; ++irep) { @@ -46,7 +50,9 @@ void ATOMIC_PI::runOpenMPVariant(VariantID vid) } stopTimer(); - +#ifdef RAJAPERF_USE_CALIPER + CALI_MARK_END("ATOMIC_PI:BASE_OpenMP"); +#endif break; } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 94e4f01dd..8e45091b7 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -16,6 +16,11 @@ #include "RAJA/util/Timer.hpp" +#ifdef RAJAPERF_USE_CALIPER +#include +#include +#endif + #include #include From 2db7cb1952c0ccf4c9726b42e25b5929e493851a Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Fri, 12 Mar 2021 14:30:57 -0800 Subject: [PATCH 002/174] suppress dirty blt --- .gitmodules | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e6a012fbe..a8c1f2d01 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,8 @@ url = ssh://git@cz-bitbucket.llnl.gov:7999/raja/polybench-raja.git [submodule "blt"] path = blt - url = https://github.com/LLNL/blt.git + url = https://github.com/LLNL/blt.git + ignore = dirty [submodule "tpl/RAJA"] path = tpl/RAJA url = https://github.com/LLNL/RAJA.git From d7ba2ad2b3a248ecddb70bc2a798e62520b37b47 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Fri, 19 Mar 2021 12:26:09 -0700 Subject: [PATCH 003/174] Caliper timer start/stop moved into kernel base so it covers all of the kernels --- src/basic/ATOMIC_PI-OMP.cpp | 9 --------- src/common/KernelBase.hpp | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/basic/ATOMIC_PI-OMP.cpp b/src/basic/ATOMIC_PI-OMP.cpp index a76458bb4..d34345370 100644 --- a/src/basic/ATOMIC_PI-OMP.cpp +++ b/src/basic/ATOMIC_PI-OMP.cpp @@ -31,11 +31,6 @@ void ATOMIC_PI::runOpenMPVariant(VariantID vid) switch ( vid ) { case Base_OpenMP : { -#ifdef RAJAPERF_USE_CALIPER - printf("Caliper marking ATOMIC_PI:BASE_OpenMP\n"); - CALI_MARK_BEGIN("ATOMIC_PI:BASE_OpenMP"); -#endif - printf("start ATOMIC_PI:BASE_OpenMP\n"); startTimer(); for (RepIndex_type irep = 0; irep < run_reps; ++irep) { @@ -50,9 +45,6 @@ void ATOMIC_PI::runOpenMPVariant(VariantID vid) } stopTimer(); -#ifdef RAJAPERF_USE_CALIPER - CALI_MARK_END("ATOMIC_PI:BASE_OpenMP"); -#endif break; } @@ -76,7 +68,6 @@ void ATOMIC_PI::runOpenMPVariant(VariantID vid) } stopTimer(); - break; } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 8e45091b7..46e578076 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -19,6 +19,18 @@ #ifdef RAJAPERF_USE_CALIPER #include #include + +#define CALI_START \ + std::string kstr = getName() + ":" + getVariantName(running_variant); \ + CALI_MARK_BEGIN(kstr.c_str()); + +#define CALI_STOP \ + std::string kstr = getName() + ":" + getVariantName(running_variant); \ + CALI_MARK_END(kstr.c_str()); + +#else +#define CALI_START +#define CALI_STOP #endif #include @@ -81,6 +93,7 @@ class KernelBase hipDeviceSynchronize(); } #endif + CALI_START; timer.start(); } @@ -96,7 +109,9 @@ class KernelBase hipDeviceSynchronize(); } #endif - timer.stop(); recordExecTime(); + timer.stop(); + CALI_STOP; + recordExecTime(); } void resetTimer() { timer.reset(); } From 940a07e5a59b76d275fef864d1b8611823ad86dd Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Mon, 29 Mar 2021 13:15:15 -0700 Subject: [PATCH 004/174] exclude warmup; add adiak and other configuration meta-data support --- CMakeLists.txt | 23 +++++++-- .../blueos_nvcc10_caliper25_gcc8.3.1.sh | 4 +- src/CMakeLists.txt | 6 +++ src/common/CMakeLists.txt | 1 + src/common/Executor.cpp | 22 +++++++++ src/common/KernelBase.hpp | 22 +++++++-- src/rajaperf_config.hpp.in | 49 ++++++------------- 7 files changed, 86 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d6bed46cb..ac59a09cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,13 @@ add_subdirectory(tpl/RAJA) get_property(RAJA_INCLUDE_DIRS DIRECTORY tpl/RAJA PROPERTY INCLUDE_DIRECTORIES) include_directories(${RAJA_INCLUDE_DIRS}) +# the following only for diagnostic purposes +get_cmake_property(_variableNames VARIABLES) +list (SORT _variableNames) +foreach (_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") +endforeach() + # # Setup variables to pass to Perf suite @@ -96,6 +103,14 @@ if (ENABLE_CALIPER) set(RAJAPERF_USE_CALIPER on) add_definitions(-DRAJAPERF_USE_CALIPER) message(STATUS "Using Caliper") + find_package(adiak REQUIRED) + list(APPEND RAJA_PERFSUITE_DEPENDS adiak) + message(STATUS "Using Adiak") + if (ENABLE_CUDA) + # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program + # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't + set_target_properties(adiak PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") + endif () endif () set(RAJAPERF_BUILD_SYSTYPE $ENV{SYS_TYPE}) @@ -108,7 +123,7 @@ if (ENABLE_CUDA) set(RAJAPERF_COMPILER "${CUDA_NVCC_EXECUTABLE}") list(APPEND RAJAPERF_COMPILER ${CMAKE_CXX_COMPILER}) set(RAJAPERF_COMPILER_OPTIONS "${CUDA_NVCC_FLAGS}") -elseif (ENABLE_HIP) + elseif (ENABLE_HIP) set(RAJAPERF_COMPILER "${HIP_HIPCC_EXECUTABLE}") list(APPEND RAJAPERF_COMPILER ${CMAKE_CXX_COMPILER}) set(RAJAPERF_COMPILER_OPTIONS "${HIP_HIPCC_FLAGS}") @@ -119,9 +134,11 @@ else() list(APPEND RAJAPERF_COMPILER_OPTIONS ${CMAKE_CXX_FLAGS}) endif() +#configure_file(${CMAKE_SOURCE_DIR}/src/rajaperf_config.hpp.in +# ${CMAKE_CURRENT_BINARY_DIR}/bin/rajaperf_config.hpp) +message(STATUS "PROJECT_BINARY_DIR ${PROJECT_BINARY_DIR}") configure_file(${CMAKE_SOURCE_DIR}/src/rajaperf_config.hpp.in - ${CMAKE_CURRENT_BINARY_DIR}/bin/rajaperf_config.hpp) - + ${PROJECT_BINARY_DIR}/include/rajaperf_config.hpp) # Make sure RAJA flag propagate set (CUDA_NVCC_FLAGS ${RAJA_NVCC_FLAGS}) set (HIP_HIPCC_FLAGS ${RAJA_HIPCC_FLAGS}) diff --git a/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh b/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh index 8a3382147..a9d553dfb 100755 --- a/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh +++ b/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh @@ -19,11 +19,13 @@ module load caliper-2.5.0-gcc-8.3.1-cu3vy3k CALIPER_PREFIX=/usr/WS2/holger/spack/opt/spack/linux-rhel7-power9le/gcc-8.3.1/caliper-2.5.0-cu3vy3kjwjerpdm6xis2kauhz4s6wto2/ +ADIAK_PREFIX=/usr/WS2/holger/spack/opt/spack/linux-rhel7-power9le/gcc-8.3.1/adiak-0.2.1-hsv444o7ofb6s2znkvvnh6hcmr774g73/ + cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++ \ -C ${RAJA_HOSTCONFIG} \ - -DCMAKE_PREFIX_PATH="${CALIPER_PREFIX}/share/cmake/caliper" \ + -DCMAKE_PREFIX_PATH="${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak" \ -DENABLE_OPENMP=On \ -DENABLE_CUDA=On \ -DCMAKE_CUDA_FLAGS="-Xcompiler -mno-float128" \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d6ba98824..ec88faa84 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,9 @@ include_directories(.) if(RAJAPERF_USE_CALIPER) message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") + message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") include_directories(${caliper_INCLUDE_DIR}) + include_directories(${adiak_INCLUDE_DIRS}) endif () add_subdirectory(common) @@ -189,8 +191,12 @@ else() blt_add_executable( NAME raja-perf.exe SOURCES RAJAPerfSuiteDriver.cpp + INCLUDES ${PROJECT_BINARY_DIR}/include DEPENDS_ON ${RAJA_PERFSUITE_EXECUTABLE_DEPENDS} ) endif() +message(STATUS "RAJA_VERSION_MAJORPP ${RAJA_VERSION_MAJOR}") +blt_print_target_properties(TARGET raja-perf.exe) + diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 5ed8701fa..ae6ca6636 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -14,5 +14,6 @@ blt_add_library( OutputUtils.cpp RAJAPerfSuite.cpp RunParams.cpp + INCLUDES ${PROJECT_BINARY_DIR}/include/ DEPENDS_ON ${RAJA_PERFSUITE_DEPENDS} ) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 2fcca1dea..9385cb3d3 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -27,6 +27,9 @@ #include +#ifdef RAJAPERF_USE_CALIPER +#include "rajaperf_config.hpp" +#endif namespace rajaperf { @@ -36,6 +39,16 @@ Executor::Executor(int argc, char** argv) : run_params(argc, argv), reference_vid(NumVariants) { +#ifdef RAJAPERF_USE_CALIPER + adiak::init(NULL); + adiak::user(); + adiak::launchdate(); + adiak::libraries(); + adiak::cmdline(); + adiak::clustername(); + struct configuration cc; + adiak::value("perfsuite_version",cc.perfsuite_version); +#endif } @@ -44,6 +57,9 @@ Executor::~Executor() for (size_t ik = 0; ik < kernels.size(); ++ik) { delete kernels[ik]; } + + adiak::fini(); + //adiak::clean(); // do this at program exit } @@ -375,7 +391,13 @@ void Executor::runSuite() cout << getVariantName(vid) << " variant" << endl; } if ( warmup_kernel->hasVariantToRun(vid) ) { +#ifdef RAJAPERF_USE_CALIPER + warmup_kernel->caliperOff(); +#endif warmup_kernel->execute(vid); +#ifdef RAJAPERF_USE_CALIPER + warmup_kernel->caliperOn(); +#endif } } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 46e578076..9e93fcd8b 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -19,14 +19,19 @@ #ifdef RAJAPERF_USE_CALIPER #include #include +#include #define CALI_START \ - std::string kstr = getName() + ":" + getVariantName(running_variant); \ - CALI_MARK_BEGIN(kstr.c_str()); + if(doCaliperTiming) { \ + std::string kstr = getName() + ":" + getVariantName(running_variant); \ + CALI_MARK_BEGIN(kstr.c_str()); \ + } #define CALI_STOP \ - std::string kstr = getName() + ":" + getVariantName(running_variant); \ - CALI_MARK_END(kstr.c_str()); + if(doCaliperTiming) { \ + std::string kstr = getName() + ":" + getVariantName(running_variant); \ + CALI_MARK_END(kstr.c_str()); \ + } #else #define CALI_START @@ -81,6 +86,11 @@ class KernelBase void execute(VariantID vid); +#ifdef RAJAPERF_USE_CALIPER + void caliperOn() { doCaliperTiming = true; } + void caliperOff() { doCaliperTiming = false; } +#endif + void startTimer() { #if defined(RAJA_ENABLE_CUDA) @@ -172,6 +182,10 @@ class KernelBase RAJA::Timer::ElapsedType tot_time[NumVariants]; bool has_variant_to_run[NumVariants]; + +#ifdef RAJAPERF_USE_CALIPER + bool doCaliperTiming = true; // warmup can use this to exclude timing +#endif }; } // closing brace for rajaperf namespace diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index fc06aa995..e1fd5f67e 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -27,41 +27,24 @@ namespace rajaperf { struct configuration { - -// Version of RAJA Perf Suite (ex: 0.1.0) -static const std::string perfsuite_version = -"@RAJA_PERFSUITE_VERSION_MAJOR@" + std::string(".") + -"@RAJA_PERFSUITE_VERSION_MINOR@" + std::string(".") + -"@RAJA_PERFSUITE_VERSION_PATCHLEVEL@"; - -// Version of RAJA used to build (ex: 0.2.4) -static const std::string raja_version = -std::to_string(RAJA::RAJA_VERSION_MAJOR) + std::string(".") + -std::to_string(RAJA::RAJA_VERSION_MINOR) + std::string(".") + -std::to_string(RAJA::RAJA_VERSION_PATCH_LEVEL); - -// Systype and machine code was built on (ex: chaos_5_x64_64, rzhasgpu18) -static const std::string systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; -static const std::string machine_build = "@RAJAPERF_BUILD_HOST@"; - -// Compiler used to build (ex: gcc-4.9.3) -static const std::string compiler = "@RAJAPERF_COMPILER@"; - -// Command options used to build (ex: -Ofast -mavx) -static const std::string compiler_options = "@RAJAPERF_COMPILER_OPTIONS@"; - -// Name of user who ran code -std::string user_run; - -// Date, time code was run -std::string date_run; - -// Systype and machine code ran on (ex: chaos_5_x64_64) -std::string systype_run; -std::string machine_run; - +static constexpr const char perfsuite_version[] = "@CMAKE_PROJECT_VERSION@"; +static constexpr const char raja_version[] = "@RAJA_LOADED@"; +static constexpr const char cmake_build_type[] = "@CMAKE_BUILD_TYPE@"; +static constexpr const char compiler[] = "@RAJAPERF_COMPILER@"; +static constexpr const char compiler_flags[] = "@CMAKE_CXX_FLAGS@"; +static constexpr const char compiler_flags_release[] = "@CMAKE_CXX_FLAGS_RELEASE@"; +static constexpr const char compiler_flags_relwithdebinfo[] = "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@"; +static constexpr const char compiler_flags_debug[] = "@CMAKE_CXX_FLAGS_DEBUG@"; +static constexpr const char cuda_compiler_version[] = "@CMAKE_CUDA_COMPILER_VERSION@"; +static constexpr const char cuda_flags[] = "@CMAKE_CUDA_FLAGS@"; +static constexpr const char cuda_flags_release[] = "@CMAKE_CUDA_FLAGS_RELEASE@"; +static constexpr const char cuda_flags_relwithdebinfo[] = "@CMAKE_CUDA_FLAGS_RELWITHDEBINFO@"; +static constexpr const char cuda_flags_debug[] = "@CMAKE_CUDA_FLAGS_DEBUG@"; +static constexpr const char systype_build[] = "@RAJAPERF_BUILD_SYSTYPE@"; +static constexpr const char machine_build[] = "@RAJAPERF_BUILD_HOST@"; }; } // closing brace for rajaperf namespace #endif // closing endif for header file include guard + From 513455dc2d298158c97353775de031f9b4154128 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Mon, 29 Mar 2021 13:16:15 -0700 Subject: [PATCH 005/174] .gitignore update for vim swap files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f85f0f8ec..d3e73e6e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.pyc *.o *.exe +*.swp +*.swo build*/ install*/ From e30a1b73b9a1f3255b526086fb1cacb77ff8f0ff Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Mon, 29 Mar 2021 17:18:34 -0700 Subject: [PATCH 006/174] change rajaperf_config so it's compatible with Caliper; Adiak::value now works --- src/CMakeLists.txt | 4 +--- src/common/Executor.cpp | 10 ++++++++++ src/rajaperf_config.hpp.in | 31 +++++++++++++++---------------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec88faa84..3aecdef27 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -196,7 +196,5 @@ blt_add_executable( ) endif() - -message(STATUS "RAJA_VERSION_MAJORPP ${RAJA_VERSION_MAJOR}") -blt_print_target_properties(TARGET raja-perf.exe) +#blt_print_target_properties(TARGET raja-perf.exe) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 9385cb3d3..7455e093c 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -48,6 +48,16 @@ Executor::Executor(int argc, char** argv) adiak::clustername(); struct configuration cc; adiak::value("perfsuite_version",cc.perfsuite_version); + adiak::value("raja_version",cc.raja_version); + adiak::value("cmake_build_type",cc.cmake_build_type); + adiak::value("compiler",cc.compiler); + adiak::value("compiler_flags",cc.compiler_flags); + adiak::value("compiler_flags_release",cc.compiler_flags_release); + adiak::value("cuda_compiler_version",cc.cuda_compiler_version); + adiak::value("cuda_flags",cc.cuda_flags); + adiak::value("cuda_flags_release",cc.cuda_flags_release); + adiak::value("systype_build",cc.systype_build); + adiak::value("machine_build",cc.machine_build); #endif } diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index e1fd5f67e..a9e4b50e2 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -27,23 +27,22 @@ namespace rajaperf { struct configuration { -static constexpr const char perfsuite_version[] = "@CMAKE_PROJECT_VERSION@"; -static constexpr const char raja_version[] = "@RAJA_LOADED@"; -static constexpr const char cmake_build_type[] = "@CMAKE_BUILD_TYPE@"; -static constexpr const char compiler[] = "@RAJAPERF_COMPILER@"; -static constexpr const char compiler_flags[] = "@CMAKE_CXX_FLAGS@"; -static constexpr const char compiler_flags_release[] = "@CMAKE_CXX_FLAGS_RELEASE@"; -static constexpr const char compiler_flags_relwithdebinfo[] = "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@"; -static constexpr const char compiler_flags_debug[] = "@CMAKE_CXX_FLAGS_DEBUG@"; -static constexpr const char cuda_compiler_version[] = "@CMAKE_CUDA_COMPILER_VERSION@"; -static constexpr const char cuda_flags[] = "@CMAKE_CUDA_FLAGS@"; -static constexpr const char cuda_flags_release[] = "@CMAKE_CUDA_FLAGS_RELEASE@"; -static constexpr const char cuda_flags_relwithdebinfo[] = "@CMAKE_CUDA_FLAGS_RELWITHDEBINFO@"; -static constexpr const char cuda_flags_debug[] = "@CMAKE_CUDA_FLAGS_DEBUG@"; -static constexpr const char systype_build[] = "@RAJAPERF_BUILD_SYSTYPE@"; -static constexpr const char machine_build[] = "@RAJAPERF_BUILD_HOST@"; +constexpr static const char* perfsuite_version = "@CMAKE_PROJECT_VERSION@"; +constexpr static const char* raja_version = "@RAJA_LOADED@"; +constexpr static const char* cmake_build_type = "@CMAKE_BUILD_TYPE@"; +constexpr static const char* compiler = "@RAJAPERF_COMPILER@"; +constexpr static const char* compiler_flags = "@CMAKE_CXX_FLAGS@"; +constexpr static const char* compiler_flags_release = "@CMAKE_CXX_FLAGS_RELEASE@"; +constexpr static const char* compiler_flags_relwithdebinfo = "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@"; +constexpr static const char* compiler_flags_debug = "@CMAKE_CXX_FLAGS_DEBUG@"; +constexpr static const char* cuda_compiler_version = "@CMAKE_CUDA_COMPILER_VERSION@"; +constexpr static const char* cuda_flags = "@CMAKE_CUDA_FLAGS@"; +constexpr static const char* cuda_flags_release = "@CMAKE_CUDA_FLAGS_RELEASE@"; +constexpr static const char* cuda_flags_relwithdebinfo = "@CMAKE_CUDA_FLAGS_RELWITHDEBINFO@"; +constexpr static const char* cuda_flags_debug = "@CMAKE_CUDA_FLAGS_DEBUG@"; +constexpr static const char* systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; +constexpr static const char* machine_build = "@RAJAPERF_BUILD_HOST@"; }; - } // closing brace for rajaperf namespace #endif // closing endif for header file include guard From c6e4771cc96dd01f2e6973832413983d04bee30a Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 17 May 2021 10:35:24 -0700 Subject: [PATCH 007/174] per kernel.variant json files with additional adiak keys kernel, variant, kernelvariant --- src/RAJAPerfSuiteDriver.cpp | 7 ++++++- src/common/Executor.cpp | 21 +++++++++++++++------ src/common/KernelBase.cpp | 31 +++++++++++++++++++++++++++++++ src/common/KernelBase.hpp | 4 ++-- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/RAJAPerfSuiteDriver.cpp b/src/RAJAPerfSuiteDriver.cpp index e73ec2260..821f6e83a 100644 --- a/src/RAJAPerfSuiteDriver.cpp +++ b/src/RAJAPerfSuiteDriver.cpp @@ -10,6 +10,12 @@ #include +#ifdef RAJAPERF_USE_CALIPER +#include +#include +#include +#endif + //------------------------------------------------------------------------------ int main( int argc, char** argv ) { @@ -30,6 +36,5 @@ int main( int argc, char** argv ) executor.outputRunData(); std::cout << "\n\nDONE!!!...." << std::endl; - return 0; } diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 7455e093c..87b8e8ca8 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -52,12 +52,21 @@ Executor::Executor(int argc, char** argv) adiak::value("cmake_build_type",cc.cmake_build_type); adiak::value("compiler",cc.compiler); adiak::value("compiler_flags",cc.compiler_flags); - adiak::value("compiler_flags_release",cc.compiler_flags_release); - adiak::value("cuda_compiler_version",cc.cuda_compiler_version); - adiak::value("cuda_flags",cc.cuda_flags); - adiak::value("cuda_flags_release",cc.cuda_flags_release); - adiak::value("systype_build",cc.systype_build); - adiak::value("machine_build",cc.machine_build); + if(!strcmp(cc.cmake_build_type,"Release")) + adiak::value("compiler_flags_release",cc.compiler_flags_release); + else if(!strcmp(cc.cmake_build_type,"RelWithDebInfo")) + adiak::value("compiler_flags_relwithdebinfo",cc.compiler_flags_relwithdebinfo); + else if(!strcmp(cc.cmake_build_type,"Debug")) + adiak::value("compiler_flags_debug",cc.compiler_flags_debug); + if(strlen(cc.cuda_compiler_version) > 0) { + adiak::value("cuda_compiler_version",cc.cuda_compiler_version); + adiak::value("cuda_flags",cc.cuda_flags); + adiak::value("cuda_flags_release",cc.cuda_flags_release); + } + if(strlen(cc.systype_build) > 0) + adiak::value("systype_build",cc.systype_build); + if(strlen(cc.machine_build) > 0) + adiak::value("machine_build",cc.machine_build); #endif } diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index f339cbe3a..f495a9a5e 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -92,6 +92,27 @@ void KernelBase::runKernel(VariantID vid) return; } + +#ifdef RAJAPERF_USE_CALIPER + cali::ConfigManager *mgr=NULL; + if(doCaliperTiming) { + if(!mgr) { + mgr=new(cali::ConfigManager); + std::string kernel = getName(); + std::string variant = getVariantName(running_variant); + std::string kstr = kernel + "." + variant; + std::string profile = "hatchet-region-profile(output=" + kstr + ".json)"; + mgr->add(profile.c_str()); + if (mgr->error()) + std::cerr << "Caliper error: " << mgr->error_msg() << std::endl; + adiak::value("kernel",kernel.c_str()); + adiak::value("variant",variant.c_str()); + adiak::value("kernelvariant",kstr.c_str()); + mgr->start(); + } + } +#endif + switch ( vid ) { case Base_Seq : @@ -149,6 +170,16 @@ void KernelBase::runKernel(VariantID vid) } } + +#ifdef RAJAPERF_USE_CALIPER + if(doCaliperTiming) { + if(mgr) { + mgr->flush(); + delete(mgr); + mgr=NULL; + } + } +#endif } void KernelBase::print(std::ostream& os) const diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 9e93fcd8b..f20ada922 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -23,13 +23,13 @@ #define CALI_START \ if(doCaliperTiming) { \ - std::string kstr = getName() + ":" + getVariantName(running_variant); \ + std::string kstr = getName() + "." + getVariantName(running_variant); \ CALI_MARK_BEGIN(kstr.c_str()); \ } #define CALI_STOP \ if(doCaliperTiming) { \ - std::string kstr = getName() + ":" + getVariantName(running_variant); \ + std::string kstr = getName() + "." + getVariantName(running_variant); \ CALI_MARK_END(kstr.c_str()); \ } From 90be795dc6ef7b72b789c785929b30961b7d0813 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 19 May 2021 15:51:32 -0700 Subject: [PATCH 008/174] change output to spot cali files, and generic kernel name for region --- src/common/KernelBase.cpp | 2 +- src/common/KernelBase.hpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index f495a9a5e..ffac7dfb3 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -101,7 +101,7 @@ void KernelBase::runKernel(VariantID vid) std::string kernel = getName(); std::string variant = getVariantName(running_variant); std::string kstr = kernel + "." + variant; - std::string profile = "hatchet-region-profile(output=" + kstr + ".json)"; + std::string profile = "spot(output=" + kstr + ".cali)"; mgr->add(profile.c_str()); if (mgr->error()) std::cerr << "Caliper error: " << mgr->error_msg() << std::endl; diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index f20ada922..f3fc2fffc 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -21,6 +21,7 @@ #include #include +#if 0 #define CALI_START \ if(doCaliperTiming) { \ std::string kstr = getName() + "." + getVariantName(running_variant); \ @@ -32,7 +33,16 @@ std::string kstr = getName() + "." + getVariantName(running_variant); \ CALI_MARK_END(kstr.c_str()); \ } +#endif +#define CALI_START \ + if(doCaliperTiming) { \ + CALI_MARK_BEGIN("kernel"); \ + } +#define CALI_STOP \ + if(doCaliperTiming) { \ + CALI_MARK_END("kernel"); \ + } #else #define CALI_START #define CALI_STOP From fc1b920a5fd2ce5ee2ae16366f6bb15ec68c4cb3 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 9 Jun 2021 11:43:21 -0700 Subject: [PATCH 009/174] Initial Caliper manager per variant --- src/common/Executor.cpp | 12 ++++++----- src/common/Executor.hpp | 5 +++++ src/common/KernelBase.cpp | 28 ++++++------------------ src/common/KernelBase.hpp | 41 ++++++++++++++++++++++-------------- src/common/RAJAPerfSuite.hpp | 6 ++++++ 5 files changed, 49 insertions(+), 43 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 87b8e8ca8..7999c0903 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -27,10 +27,6 @@ #include -#ifdef RAJAPERF_USE_CALIPER -#include "rajaperf_config.hpp" -#endif - namespace rajaperf { using namespace std; @@ -296,6 +292,9 @@ void Executor::setupSuite() for (VIDset::iterator vid = run_var.begin(); vid != run_var.end(); ++vid) { variant_ids.push_back( *vid ); +#ifdef RAJAPERF_USE_CALIPER + KernelBase::setCaliperMgrVariant(*vid); +#endif } // @@ -456,7 +455,10 @@ void Executor::runSuite() } // loop over kernels } // loop over passes through suite - +#ifdef RAJAPERF_USE_CALIPER + // Flush Caliper data + KernelBase::setCaliperMgrFlush(); +#endif } void Executor::outputRunData() diff --git a/src/common/Executor.hpp b/src/common/Executor.hpp index e25800636..399543250 100644 --- a/src/common/Executor.hpp +++ b/src/common/Executor.hpp @@ -12,6 +12,10 @@ #include "common/RAJAPerfSuite.hpp" #include "common/RunParams.hpp" +#ifdef RAJAPERF_USE_CALIPER +#include "rajaperf_config.hpp" +#endif + #include #include #include @@ -76,6 +80,7 @@ class Executor std::vector variant_ids; VariantID reference_vid; + }; } // closing brace for rajaperf namespace diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index ffac7dfb3..74911290d 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -92,24 +92,9 @@ void KernelBase::runKernel(VariantID vid) return; } - #ifdef RAJAPERF_USE_CALIPER - cali::ConfigManager *mgr=NULL; if(doCaliperTiming) { - if(!mgr) { - mgr=new(cali::ConfigManager); - std::string kernel = getName(); - std::string variant = getVariantName(running_variant); - std::string kstr = kernel + "." + variant; - std::string profile = "spot(output=" + kstr + ".cali)"; - mgr->add(profile.c_str()); - if (mgr->error()) - std::cerr << "Caliper error: " << mgr->error_msg() << std::endl; - adiak::value("kernel",kernel.c_str()); - adiak::value("variant",variant.c_str()); - adiak::value("kernelvariant",kstr.c_str()); - mgr->start(); - } + KernelBase::setCaliperMgrStart(vid); } #endif @@ -170,14 +155,9 @@ void KernelBase::runKernel(VariantID vid) } } - #ifdef RAJAPERF_USE_CALIPER if(doCaliperTiming) { - if(mgr) { - mgr->flush(); - delete(mgr); - mgr=NULL; - } + setCaliperMgrStop(vid); } #endif } @@ -211,4 +191,8 @@ void KernelBase::print(std::ostream& os) const os << std::endl; } +// initialize a KernelBase static +std::map KernelBase::mgr; } // closing brace for rajaperf namespace + + diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index f3fc2fffc..9aec17065 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -17,23 +17,7 @@ #include "RAJA/util/Timer.hpp" #ifdef RAJAPERF_USE_CALIPER -#include -#include -#include -#if 0 -#define CALI_START \ - if(doCaliperTiming) { \ - std::string kstr = getName() + "." + getVariantName(running_variant); \ - CALI_MARK_BEGIN(kstr.c_str()); \ - } - -#define CALI_STOP \ - if(doCaliperTiming) { \ - std::string kstr = getName() + "." + getVariantName(running_variant); \ - CALI_MARK_END(kstr.c_str()); \ - } -#endif #define CALI_START \ if(doCaliperTiming) { \ CALI_MARK_BEGIN("kernel"); \ @@ -50,6 +34,7 @@ #include #include +#include namespace rajaperf { @@ -99,6 +84,28 @@ class KernelBase #ifdef RAJAPERF_USE_CALIPER void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } + static void setCaliperMgrVariant(VariantID vid) + { + cali::ConfigManager m; + mgr.insert(std::make_pair(vid,m)); + std::string vstr = getVariantName(vid); + std::string profile = "spot(output=" + vstr + ".cali)"; + std::cout << "Profile: " << profile << std::endl; + mgr[vid].add(profile.c_str()); + } + + static void setCaliperMgrStart(VariantID vid) { mgr[vid].start(); } + static void setCaliperMgrStop(VariantID vid) { mgr[vid].stop(); } + static void setCaliperMgrFlush() + { // we're going to flush all the variants at once + for(auto const &kv : mgr) { + // set Adiak key first + std::string variant=getVariantName(kv.first); + adiak::value("variant",variant.c_str()); + mgr[kv.first].flush(); + } + } + #endif void startTimer() @@ -195,6 +202,8 @@ class KernelBase #ifdef RAJAPERF_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing +// we need a Caliper Manager object per variant + static std::map mgr; #endif }; diff --git a/src/common/RAJAPerfSuite.hpp b/src/common/RAJAPerfSuite.hpp index 30675df3e..93b40d326 100644 --- a/src/common/RAJAPerfSuite.hpp +++ b/src/common/RAJAPerfSuite.hpp @@ -17,6 +17,12 @@ #include +#ifdef RAJAPERF_USE_CALIPER +#include +#include +#include +#endif + namespace rajaperf { From d681a644d5766b99fd40c885ee04ae266e9c729d Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 9 Jun 2021 14:05:11 -0700 Subject: [PATCH 010/174] Caliper tree is now variant->group->kernel --- src/common/KernelBase.hpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 9aec17065..e04f6b88e 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -20,12 +20,22 @@ #define CALI_START \ if(doCaliperTiming) { \ - CALI_MARK_BEGIN("kernel"); \ + std::string kstr = getName(); \ + std::string gstr = getGroupName(kstr); \ + std::string vstr = getVariantName(running_variant); \ + CALI_MARK_BEGIN(vstr.c_str()); \ + CALI_MARK_BEGIN(gstr.c_str()); \ + CALI_MARK_BEGIN(kstr.c_str()); \ } #define CALI_STOP \ if(doCaliperTiming) { \ - CALI_MARK_END("kernel"); \ + std::string kstr = getName(); \ + std::string gstr = getGroupName(kstr); \ + std::string vstr = getVariantName(running_variant); \ + CALI_MARK_END(kstr.c_str()); \ + CALI_MARK_END(gstr.c_str()); \ + CALI_MARK_END(vstr.c_str()); \ } #else #define CALI_START @@ -106,6 +116,12 @@ class KernelBase } } + std::string getGroupName(const std::string &kname ) + { + std::size_t found = kname.find("_"); + return kname.substr(0,found); + } + #endif void startTimer() From 516507d5406dc2b17feb742ccdafe165593609ef Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 15 Jun 2021 10:18:03 -0700 Subject: [PATCH 011/174] compiler_suffic adiak key; cleanup --- src/common/Executor.cpp | 10 +++++++++- src/common/KernelBase.cpp | 3 ++- src/common/KernelBase.hpp | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 7999c0903..9f8eff5a6 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -36,17 +36,23 @@ Executor::Executor(int argc, char** argv) reference_vid(NumVariants) { #ifdef RAJAPERF_USE_CALIPER + struct configuration cc; adiak::init(NULL); adiak::user(); adiak::launchdate(); adiak::libraries(); adiak::cmdline(); adiak::clustername(); - struct configuration cc; adiak::value("perfsuite_version",cc.perfsuite_version); adiak::value("raja_version",cc.raja_version); adiak::value("cmake_build_type",cc.cmake_build_type); + adiak::value("compiler",cc.compiler); + std::string compiler_str(cc.compiler); + std::size_t found = compiler_str.find_last_of("/\\"); + std::string compiler_suffix = compiler_str.substr(found+1); + adiak::value("compiler_suffix",compiler_suffix.c_str()); + adiak::value("compiler_flags",cc.compiler_flags); if(!strcmp(cc.cmake_build_type,"Release")) adiak::value("compiler_flags_release",cc.compiler_flags_release); @@ -54,11 +60,13 @@ Executor::Executor(int argc, char** argv) adiak::value("compiler_flags_relwithdebinfo",cc.compiler_flags_relwithdebinfo); else if(!strcmp(cc.cmake_build_type,"Debug")) adiak::value("compiler_flags_debug",cc.compiler_flags_debug); + if(strlen(cc.cuda_compiler_version) > 0) { adiak::value("cuda_compiler_version",cc.cuda_compiler_version); adiak::value("cuda_flags",cc.cuda_flags); adiak::value("cuda_flags_release",cc.cuda_flags_release); } + if(strlen(cc.systype_build) > 0) adiak::value("systype_build",cc.systype_build); if(strlen(cc.machine_build) > 0) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index 74911290d..9e8e9621e 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -190,9 +190,10 @@ void KernelBase::print(std::ostream& os) const } os << std::endl; } - +#ifdef RAJAPERF_USE_CALIPER // initialize a KernelBase static std::map KernelBase::mgr; +#endif } // closing brace for rajaperf namespace diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index e04f6b88e..ec093d120 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -219,6 +219,7 @@ class KernelBase #ifdef RAJAPERF_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing // we need a Caliper Manager object per variant +// we can inline this with c++17 static std::map mgr; #endif }; From 7914e24c317fe3325362722165e48f088979dfd4 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 4 Jul 2021 10:30:07 -0700 Subject: [PATCH 012/174] Add perf.py Hatchet Notebook with GenericFrame class; allows comparison across variants --- scripts/hatchet_notebooks/perf.py | 157 ++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 scripts/hatchet_notebooks/perf.py diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py new file mode 100644 index 000000000..a178d68fe --- /dev/null +++ b/scripts/hatchet_notebooks/perf.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# coding: utf-8 + +# ##### Hatchet Notebook v0.1.0 + +# In[ ]: + +import sys +import subprocess +import json +import os +import platform +import ipykernel + +import pandas as pd +from IPython.display import display, HTML + +machine = platform.uname().machine + +# Add hatchet to PYTHONPATH +deploy_dir = "/home/skip/workspace/hatchet/" +sys.path.append(deploy_dir) +sys.path.append(deploy_dir + "/hatchet") +import hatchet as ht + + +import caliperreader as cr + +import importlib +import pkgutil + + +def import_submodules(package, recursive=True): + """ Import all submodules of a module, recursively, including subpackages + + :param package: package (name or actual module) + :type package: str | module + :rtype: dict[str, types.ModuleType] + """ + if isinstance(package, str): + package = importlib.import_module(package) + results = {} + for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): + full_name = package.__name__ + '.' + name + results[full_name] = importlib.import_module(full_name) + if recursive and is_pkg: + results.update(import_submodules(full_name)) + #print(results) + return results + +import_submodules(ht) + +class GenericFrame(ht.GraphFrame): + def __init__(self,gf): + generic_dataframe=gf.dataframe.copy() + generic_graph=gf.graph.copy() + generic_exc_metrics = gf.exc_metrics + generic_inc_metrics = gf.inc_metrics + generic_default_metric = gf.default_metric + generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' + ii = generic_dataframe.index[0] + fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) + nn = ht.node.Node(fr) + setattr(nn,'_hatchet_nid',ii._hatchet_nid) + setattr(nn,'_depth',ii._depth) + setattr(nn,'children',ii.children) + generic_dataframe.rename(index={ii: nn},inplace=True) + setattr(generic_graph,'roots',[nn]) + super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics,generic_default_metric) + +def CompareVariants(CALI_FILES): + grouping_attribute = "prop:nested" + default_metric = "avg#inclusive#sum#time.duration" + query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + gflist = [] + vstrs = [] + for i in range(len(CALI_FILES)): + (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) + cstr = globals['compiler_suffix'] + gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) + v = gflist[i] + vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) + + compare = pd.DataFrame(0,index=vstrs,columns=vstrs) + + for r in range(len(CALI_FILES)): + for c in range(len(CALI_FILES)): + rg = GenericFrame(gflist[r]) + cg = GenericFrame(gflist[c]) + scale = rg / cg + df = scale.dataframe + val = df.iloc[0, df.columns.get_loc('time (inc)')] + compare.loc[vstrs[r],vstrs[c]] = val + + print(compare) + return(gflist) + + +# In[ ]: +# Add cali-query to PATH + +#cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" +cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" +os.environ["PATH"] += os.pathsep + cali_query_path +data_path="/home/skip/workspace/Caliper_test/by_variant/" + +CALI_FILES = [ + { "cali_file": data_path+"data_clang/Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_clang/Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_clang/Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_clang/Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_clang/RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_clang/RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"data_gcc_10.2/RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +] + +grouping_attribute = "prop:nested" +default_metric = "avg#inclusive#sum#time.duration" +query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + + +# In[ ]: +gflist = CompareVariants(CALI_FILES) + +print(gflist[0].tree(metric_column="time (inc)")) +display(HTML(gflist[0].dataframe.to_html())) + +(records,globals) = cr.read_caliper_contents(data_path+"data_clang/Base_OpenMP.cali") +#print('\n') +#print(records) +#print('\n') +print(globals) + +# In[ ]: +# compare clang BASE_OpenMP to GCC BASE_OpenMP and display tree +invar = gflist[0] / gflist[6] +print(invar.tree(metric_column="time (inc)")) + +# In[ ]: +# compare clang BASE_OpenMP to clang BASE_Seq and display tree (illustrates incompatible trees) +outvar = gflist[0] / gflist[1] +print(outvar.tree(metric_column="time (inc)")) + +# In[ ]: +# compare GenericFrame versions of clang BASE_OpenMP to clang BASE_Seq and display tree (illustrates compatible trees) +genvar = GenericFrame(gflist[0]) / GenericFrame(gflist[1]) +print(genvar.tree(metric_column="time (inc)")) + +genvard = GenericFrame(gflist[0]) - GenericFrame(gflist[1]) +print(genvard.tree(metric_column="time (inc)")) + +# %% From 8e08cd55c45f26e151708db4badb0768482e46ed Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 4 Jul 2021 12:28:15 -0700 Subject: [PATCH 013/174] add some notes on how to pickup python caliperreader; remove default_metric to work with older Hatchet --- scripts/hatchet_notebooks/perf.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py index a178d68fe..27abe6fd3 100644 --- a/scripts/hatchet_notebooks/perf.py +++ b/scripts/hatchet_notebooks/perf.py @@ -23,8 +23,9 @@ sys.path.append(deploy_dir + "/hatchet") import hatchet as ht - -import caliperreader as cr +# if you didn't install caliperreader via pip3 point to it's deploy_dir +# sys.path.append(deploy_dir + 'Caliper/python/caliper-reader/') +import caliperreader as cr # pip3 install caliper-reader import importlib import pkgutil @@ -56,7 +57,7 @@ def __init__(self,gf): generic_graph=gf.graph.copy() generic_exc_metrics = gf.exc_metrics generic_inc_metrics = gf.inc_metrics - generic_default_metric = gf.default_metric + #generic_default_metric = gf.default_metric # in newer Hatchet generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' ii = generic_dataframe.index[0] fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) @@ -66,7 +67,7 @@ def __init__(self,gf): setattr(nn,'children',ii.children) generic_dataframe.rename(index={ii: nn},inplace=True) setattr(generic_graph,'roots',[nn]) - super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics,generic_default_metric) + super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics) def CompareVariants(CALI_FILES): grouping_attribute = "prop:nested" From dc5548255ce7a8e88c30fe3a8489356d5c220f5f Mon Sep 17 00:00:00 2001 From: holger Date: Sat, 10 Jul 2021 10:29:06 -0700 Subject: [PATCH 014/174] add compiler version via cmake and compiler path version via regex of exiting full path to executable --- src/common/Executor.cpp | 96 ++++++++++++++++++++++++-------------- src/rajaperf_config.hpp.in | 2 +- 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 735da8947..5881ec2eb 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -31,46 +32,71 @@ namespace rajaperf { using namespace std; +vector split(const string str, const string regex_str) +{ + regex regexz(regex_str); + vector list(sregex_token_iterator(str.begin(), str.end(), regexz, -1), + sregex_token_iterator()); + return list; +} + Executor::Executor(int argc, char** argv) : run_params(argc, argv), reference_vid(NumVariants) { #ifdef RAJAPERF_USE_CALIPER - struct configuration cc; - adiak::init(NULL); - adiak::user(); - adiak::launchdate(); - adiak::libraries(); - adiak::cmdline(); - adiak::clustername(); - adiak::value("perfsuite_version",cc.perfsuite_version); - adiak::value("raja_version",cc.raja_version); - adiak::value("cmake_build_type",cc.cmake_build_type); - - adiak::value("compiler",cc.compiler); - std::string compiler_str(cc.compiler); - std::size_t found = compiler_str.find_last_of("/\\"); - std::string compiler_suffix = compiler_str.substr(found+1); - adiak::value("compiler_suffix",compiler_suffix.c_str()); - - adiak::value("compiler_flags",cc.compiler_flags); - if(!strcmp(cc.cmake_build_type,"Release")) - adiak::value("compiler_flags_release",cc.compiler_flags_release); - else if(!strcmp(cc.cmake_build_type,"RelWithDebInfo")) - adiak::value("compiler_flags_relwithdebinfo",cc.compiler_flags_relwithdebinfo); - else if(!strcmp(cc.cmake_build_type,"Debug")) - adiak::value("compiler_flags_debug",cc.compiler_flags_debug); - - if(strlen(cc.cuda_compiler_version) > 0) { - adiak::value("cuda_compiler_version",cc.cuda_compiler_version); - adiak::value("cuda_flags",cc.cuda_flags); - adiak::value("cuda_flags_release",cc.cuda_flags_release); - } - - if(strlen(cc.systype_build) > 0) - adiak::value("systype_build",cc.systype_build); - if(strlen(cc.machine_build) > 0) - adiak::value("machine_build",cc.machine_build); + struct configuration cc; + adiak::init(NULL); + adiak::user(); + adiak::launchdate(); + adiak::libraries(); + adiak::cmdline(); + adiak::clustername(); + adiak::value("perfsuite_version", cc.perfsuite_version); + adiak::value("raja_version", cc.raja_version); + adiak::value("cmake_build_type", cc.cmake_build_type); + + adiak::value("compiler_path", cc.compiler); + cout << "Compiler path: " << cc.compiler << "\n"; + auto tokens = split(cc.compiler, "/"); + string compiler_exec = tokens.back(); + adiak::value("compiler_version", cc.compiler_version); + // todo setup compiler version gleaned from path as separate key + string compiler = compiler_exec + "-" + cc.compiler_version; + cout << "Compiler: " << compiler << "\n"; + adiak::value("compiler", compiler.c_str()); + auto tsize = tokens.size(); + if (tsize >= 3) { + // pickup path version /bin/exec + string path_version = tokens[tsize-3]; + cout << "Compiler path version: " << path_version << "\n"; + auto s = split(path_version,"-"); + if (s.size() >= 2) { + string path_version_short = s[0] + "-" + s[1]; + cout << "Compiler path version short: " << path_version_short << "\n"; + adiak::value("Compiler_path_version",path_version_short.c_str()); + } + } + + + adiak::value("compiler_flags", cc.compiler_flags); + if (!strcmp(cc.cmake_build_type, "Release")) + adiak::value("compiler_flags_release", cc.compiler_flags_release); + else if (!strcmp(cc.cmake_build_type, "RelWithDebInfo")) + adiak::value("compiler_flags_relwithdebinfo", cc.compiler_flags_relwithdebinfo); + else if (!strcmp(cc.cmake_build_type, "Debug")) + adiak::value("compiler_flags_debug", cc.compiler_flags_debug); + + if (strlen(cc.cuda_compiler_version) > 0) { + adiak::value("cuda_compiler_version", cc.cuda_compiler_version); + adiak::value("cuda_flags", cc.cuda_flags); + adiak::value("cuda_flags_release", cc.cuda_flags_release); + } + + if (strlen(cc.systype_build) > 0) + adiak::value("systype_build", cc.systype_build); + if (strlen(cc.machine_build) > 0) + adiak::value("machine_build", cc.machine_build); #endif } diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index 9abbb6685..67fb81cdd 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -31,7 +31,7 @@ constexpr static const char* perfsuite_version = "@CMAKE_PROJECT_VERSION@"; constexpr static const char* raja_version = "@RAJA_LOADED@"; constexpr static const char* cmake_build_type = "@CMAKE_BUILD_TYPE@"; constexpr static const char* compiler = "@RAJAPERF_COMPILER@"; -constexpr static const char* compiler_version = "@CMAKE_CXX_VERSION@"; +constexpr static const char* compiler_version = "@CMAKE_CXX_COMPILER_VERSION@"; constexpr static const char* compiler_flags = "@CMAKE_CXX_FLAGS@"; constexpr static const char* compiler_flags_release = "@CMAKE_CXX_FLAGS_RELEASE@"; constexpr static const char* compiler_flags_relwithdebinfo = "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@"; From af35eeefa5a548548856195afa7df59329a2a426 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 14 Jul 2021 10:31:29 -0700 Subject: [PATCH 015/174] changed example perf notebook to use new compiler key and rename notebook with ipynb file type --- scripts/hatchet_notebooks/{perf.py => perf.ipynb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename scripts/hatchet_notebooks/{perf.py => perf.ipynb} (99%) diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.ipynb similarity index 99% rename from scripts/hatchet_notebooks/perf.py rename to scripts/hatchet_notebooks/perf.ipynb index 27abe6fd3..5f1c8967c 100644 --- a/scripts/hatchet_notebooks/perf.py +++ b/scripts/hatchet_notebooks/perf.ipynb @@ -77,7 +77,7 @@ def CompareVariants(CALI_FILES): vstrs = [] for i in range(len(CALI_FILES)): (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) - cstr = globals['compiler_suffix'] + cstr = globals['compiler'] gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) v = gflist[i] vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) From 130dfb238e3531f93d31b2b172f08133b346bb1f Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 9 Aug 2021 12:48:54 -0700 Subject: [PATCH 016/174] Add ExtractCommonSubtree to perf.py to support comparing trees which vary in number of kernels --- scripts/hatchet_notebooks/perf.ipynb | 158 -------------------- scripts/hatchet_notebooks/perf.py | 208 +++++++++++++++++++++++++++ src/common/Executor.cpp | 1 - 3 files changed, 208 insertions(+), 159 deletions(-) delete mode 100644 scripts/hatchet_notebooks/perf.ipynb create mode 100644 scripts/hatchet_notebooks/perf.py diff --git a/scripts/hatchet_notebooks/perf.ipynb b/scripts/hatchet_notebooks/perf.ipynb deleted file mode 100644 index 5f1c8967c..000000000 --- a/scripts/hatchet_notebooks/perf.ipynb +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# ##### Hatchet Notebook v0.1.0 - -# In[ ]: - -import sys -import subprocess -import json -import os -import platform -import ipykernel - -import pandas as pd -from IPython.display import display, HTML - -machine = platform.uname().machine - -# Add hatchet to PYTHONPATH -deploy_dir = "/home/skip/workspace/hatchet/" -sys.path.append(deploy_dir) -sys.path.append(deploy_dir + "/hatchet") -import hatchet as ht - -# if you didn't install caliperreader via pip3 point to it's deploy_dir -# sys.path.append(deploy_dir + 'Caliper/python/caliper-reader/') -import caliperreader as cr # pip3 install caliper-reader - -import importlib -import pkgutil - - -def import_submodules(package, recursive=True): - """ Import all submodules of a module, recursively, including subpackages - - :param package: package (name or actual module) - :type package: str | module - :rtype: dict[str, types.ModuleType] - """ - if isinstance(package, str): - package = importlib.import_module(package) - results = {} - for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): - full_name = package.__name__ + '.' + name - results[full_name] = importlib.import_module(full_name) - if recursive and is_pkg: - results.update(import_submodules(full_name)) - #print(results) - return results - -import_submodules(ht) - -class GenericFrame(ht.GraphFrame): - def __init__(self,gf): - generic_dataframe=gf.dataframe.copy() - generic_graph=gf.graph.copy() - generic_exc_metrics = gf.exc_metrics - generic_inc_metrics = gf.inc_metrics - #generic_default_metric = gf.default_metric # in newer Hatchet - generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' - ii = generic_dataframe.index[0] - fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) - nn = ht.node.Node(fr) - setattr(nn,'_hatchet_nid',ii._hatchet_nid) - setattr(nn,'_depth',ii._depth) - setattr(nn,'children',ii.children) - generic_dataframe.rename(index={ii: nn},inplace=True) - setattr(generic_graph,'roots',[nn]) - super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics) - -def CompareVariants(CALI_FILES): - grouping_attribute = "prop:nested" - default_metric = "avg#inclusive#sum#time.duration" - query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) - gflist = [] - vstrs = [] - for i in range(len(CALI_FILES)): - (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) - cstr = globals['compiler'] - gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) - v = gflist[i] - vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) - - compare = pd.DataFrame(0,index=vstrs,columns=vstrs) - - for r in range(len(CALI_FILES)): - for c in range(len(CALI_FILES)): - rg = GenericFrame(gflist[r]) - cg = GenericFrame(gflist[c]) - scale = rg / cg - df = scale.dataframe - val = df.iloc[0, df.columns.get_loc('time (inc)')] - compare.loc[vstrs[r],vstrs[c]] = val - - print(compare) - return(gflist) - - -# In[ ]: -# Add cali-query to PATH - -#cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" -cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" -os.environ["PATH"] += os.pathsep + cali_query_path -data_path="/home/skip/workspace/Caliper_test/by_variant/" - -CALI_FILES = [ - { "cali_file": data_path+"data_clang/Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_clang/Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_clang/Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_clang/Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_clang/RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_clang/RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"data_gcc_10.2/RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -] - -grouping_attribute = "prop:nested" -default_metric = "avg#inclusive#sum#time.duration" -query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) - - -# In[ ]: -gflist = CompareVariants(CALI_FILES) - -print(gflist[0].tree(metric_column="time (inc)")) -display(HTML(gflist[0].dataframe.to_html())) - -(records,globals) = cr.read_caliper_contents(data_path+"data_clang/Base_OpenMP.cali") -#print('\n') -#print(records) -#print('\n') -print(globals) - -# In[ ]: -# compare clang BASE_OpenMP to GCC BASE_OpenMP and display tree -invar = gflist[0] / gflist[6] -print(invar.tree(metric_column="time (inc)")) - -# In[ ]: -# compare clang BASE_OpenMP to clang BASE_Seq and display tree (illustrates incompatible trees) -outvar = gflist[0] / gflist[1] -print(outvar.tree(metric_column="time (inc)")) - -# In[ ]: -# compare GenericFrame versions of clang BASE_OpenMP to clang BASE_Seq and display tree (illustrates compatible trees) -genvar = GenericFrame(gflist[0]) / GenericFrame(gflist[1]) -print(genvar.tree(metric_column="time (inc)")) - -genvard = GenericFrame(gflist[0]) - GenericFrame(gflist[1]) -print(genvard.tree(metric_column="time (inc)")) - -# %% diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py new file mode 100644 index 000000000..dbf2217af --- /dev/null +++ b/scripts/hatchet_notebooks/perf.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python +# coding: utf-8 + +# ##### Hatchet Notebook v0.1.0 + + +# In[ ]: + +import sys +import subprocess +import json +import os +import platform +import ipykernel + +import pandas as pd +from IPython.display import display, HTML + +machine = platform.uname().machine + +# Add hatchet to PYTHONPATH +deploy_dir = "/home/skip/workspace/hatchet/" +sys.path.append(deploy_dir) +sys.path.append(deploy_dir + "/hatchet") +import hatchet as ht +#print(dir(ht)) + +# if you didn't install caliperreader via pip3 point to it's deploy_dir +# sys.path.append(deploy_dir + 'Caliper/python/caliper-reader/') +import caliperreader as cr # pip3 install caliper-reader + +import importlib +import pkgutil + +def import_submodules(package, recursive=True): + """ Import all submodules of a module, recursively, including subpackages + + :param package: package (name or actual module) + :type package: str | module + :rtype: dict[str, types.ModuleType] + """ + if isinstance(package, str): + package = importlib.import_module(package) + results = {} + for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): + full_name = package.__name__ + '.' + name + results[full_name] = importlib.import_module(full_name) + if recursive and is_pkg: + results.update(import_submodules(full_name)) + #print(results) + return results + +import_submodules(ht) + +class GenericFrame(ht.GraphFrame): + def __init__(self,gf): + generic_dataframe=gf.dataframe.copy() + generic_graph=gf.graph.copy() + generic_exc_metrics = gf.exc_metrics + generic_inc_metrics = gf.inc_metrics + #generic_default_metric = gf.default_metric # in newer Hatchet + generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' + ii = generic_dataframe.index[0] + #fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) + fr = ht.graphframe.Frame({'name': 'Variant', 'type' : 'region'}) + nn = ht.graphframe.Node(fr) + setattr(nn,'_hatchet_nid',ii._hatchet_nid) + setattr(nn,'_depth',ii._depth) + setattr(nn,'children',ii.children) + generic_dataframe.rename(index={ii: nn},inplace=True) + setattr(generic_graph,'roots',[nn]) + super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics) + +def ExtractCommonSubtree(gf1: ht.GraphFrame,gf2: ht.GraphFrame) -> (ht.GraphFrame): + if (gf1.graph == gf2.graph): + return gf1 + else: + cc = gf1.deepcopy() + cc2 = gf2.deepcopy() + cc.unify(cc2) + # search for nodes contained in both graphs {0==both, 1==left only, 2==right only} + filter_func = lambda x: x["_missing_node"] == 0 + common_subtree = cc.filter(filter_func, squash=True) + #print(common_subtree.dataframe.columns.tolist()) + # tt is generator object from post order tree traversal, i.e starts down at first set of leaves + tt = common_subtree.graph.roots[0].traverse(order="post") + s2 = 0.0 # sum accumulated at depth 2 + s1 = 0.0 # sum accumulated at depth 1 + # replace subtree values with sum of kernels that have run + for nn in tt: + if nn._depth == 2: + s2 += common_subtree.dataframe.loc[nn,'time (inc)'] + elif nn._depth == 1: + s1 += s2 + common_subtree.dataframe.loc[nn,'time (inc)'] = s2 + s2 = 0.0 + elif nn._depth == 0: + common_subtree.dataframe.loc[nn,'time (inc)'] = s1 + s1 = 0.0 + + return common_subtree + +def CompareVariants(CALI_FILES) -> (list): + grouping_attribute = "prop:nested" + default_metric = "avg#inclusive#sum#time.duration" + query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + gflist = [] + vstrs = [] + for i in range(len(CALI_FILES)): + (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) + cstr = globals['compiler'] + gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) + v = gflist[i] + vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) + + compare = pd.DataFrame(0,index=vstrs,columns=vstrs) + + for r in range(len(CALI_FILES)): + for c in range(len(CALI_FILES)): + r_common = ExtractCommonSubtree(GenericFrame(gflist[r]),GenericFrame(gflist[c])) + c_common = ExtractCommonSubtree(GenericFrame(gflist[c]),GenericFrame(gflist[r])) + scale = r_common / c_common + df = scale.dataframe + val = df.iloc[0, df.columns.get_loc('time (inc)')] + compare.loc[vstrs[r],vstrs[c]] = val + print(".",end="") + print(" ") + print(compare) + return(gflist) + + +# In[ ]: +# Add cali-query to PATH + +#cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" +cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" +os.environ["PATH"] += os.pathsep + cali_query_path +data_path="/home/skip/workspace/Caliper_test/testcommon/lassen_gcc831_cuda11/" + +CALI_FILES = [ + { "cali_file": data_path+"RAJA_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Base_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Lambda_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, + { "cali_file": data_path+"Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +] + +grouping_attribute = "prop:nested" +default_metric = "avg#inclusive#sum#time.duration" +query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + + +# In[ ]: +print("Comparing all variants to each other in new pandas dataframe") +gflist = CompareVariants(CALI_FILES) + +#print(gflist[0].tree(metric_column="time (inc)")) +#display(HTML(gflist[0].dataframe.to_html())) + +#(records,globals) = cr.read_caliper_contents(data_path+"Base_OpenMP.cali") +#print('\n') +#print(records) +#print('\n') +#print(globals) + +Base_OpenMP = gflist[4] +Base_Seq = gflist[5] +Lambda_CUDA = gflist[6] + +# In[ ]: +print("Illustrates two incompatible trees Base_OpenMP/Base_Seq") +#print(Base_OpenMP.tree(metric_column="time (inc)")) +#print(Lambda_CUDA.tree(metric_column="time (inc)")) +# compare Base_OpenMP to Base_Seq and display tree (illustrates incompatible trees) +invar = Base_OpenMP / Base_Seq +print(invar.tree(metric_column="time (inc)")) + +# In[ ]: +print("Illustrates a bit more compatible tree by fixing root nodes via GenericFrame ") +# compare Base_OpenMP to Base_Seq and display tree (illustrates compatible trees by fixing Root Node) +outvar = GenericFrame(Base_OpenMP) / GenericFrame(Base_Seq) +print(outvar.tree(metric_column="time (inc)")) + +# In[ ]: +# compare GenericFrame versions of Base_OpenMP to Lambda_CUDA and display tree (illustrates somewhat less compatible trees due to missing kernels) +print("Show variants that have a large difference in kernels run Base_OpenMP vs Lambda_CUDA") +cudavar = GenericFrame(Base_OpenMP) / GenericFrame(Lambda_CUDA) +print(cudavar.tree(metric_column="time (inc)")) + +#cudavar2 = GenericFrame(Lambda_CUDA) / GenericFrame(Base_OpenMP) +#print(cudavar2.tree(metric_column="time (inc)")) + +# In[ ]: +print("show use of ExtractCommonSubtree to fix variants with different kernels run") +common_subtree = ExtractCommonSubtree(GenericFrame(Base_OpenMP),GenericFrame(Lambda_CUDA)) +print(common_subtree.tree(metric_column="time (inc)")) + +common_subtree2 = ExtractCommonSubtree(GenericFrame(Lambda_CUDA),GenericFrame(Base_OpenMP)) +print(common_subtree2.tree(metric_column="time (inc)")) + +calc = common_subtree / common_subtree2 +print(calc.tree(metric_column="time (inc)")) +display(HTML(calc.dataframe.to_html())) +# %% diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 5881ec2eb..32967cfe1 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -61,7 +61,6 @@ Executor::Executor(int argc, char** argv) auto tokens = split(cc.compiler, "/"); string compiler_exec = tokens.back(); adiak::value("compiler_version", cc.compiler_version); - // todo setup compiler version gleaned from path as separate key string compiler = compiler_exec + "-" + cc.compiler_version; cout << "Compiler: " << compiler << "\n"; adiak::value("compiler", compiler.c_str()); From b5ad2e41183f817aaa2a8849a6c26e6338f0c658 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 27 Sep 2021 09:23:38 -0700 Subject: [PATCH 017/174] use hatchet caliper native reader --- scripts/hatchet_notebooks/perf.py | 39 +++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py index dbf2217af..c5de2350d 100644 --- a/scripts/hatchet_notebooks/perf.py +++ b/scripts/hatchet_notebooks/perf.py @@ -18,6 +18,12 @@ machine = platform.uname().machine +use_native_reader=False +grouping_attribute = "prop:nested" +default_metric = "avg#inclusive#sum#time.duration" +query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + + # Add hatchet to PYTHONPATH deploy_dir = "/home/skip/workspace/hatchet/" sys.path.append(deploy_dir) @@ -59,6 +65,7 @@ def __init__(self,gf): generic_exc_metrics = gf.exc_metrics generic_inc_metrics = gf.inc_metrics #generic_default_metric = gf.default_metric # in newer Hatchet + #print('Default Metric = ' + gf.default_metric) generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' ii = generic_dataframe.index[0] #fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) @@ -104,12 +111,16 @@ def CompareVariants(CALI_FILES) -> (list): grouping_attribute = "prop:nested" default_metric = "avg#inclusive#sum#time.duration" query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) + gflist = [] vstrs = [] for i in range(len(CALI_FILES)): (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) cstr = globals['compiler'] - gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) + if use_native_reader: + gflist.append(ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file'])) + else: + gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) v = gflist[i] vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) @@ -121,7 +132,10 @@ def CompareVariants(CALI_FILES) -> (list): c_common = ExtractCommonSubtree(GenericFrame(gflist[c]),GenericFrame(gflist[r])) scale = r_common / c_common df = scale.dataframe - val = df.iloc[0, df.columns.get_loc('time (inc)')] + if use_native_reader: + val = df.iloc[0, df.columns.get_loc(default_metric)] + else: + val = df.iloc[0, df.columns.get_loc('time (inc)')] compare.loc[vstrs[r],vstrs[c]] = val print(".",end="") print(" ") @@ -149,11 +163,26 @@ def CompareVariants(CALI_FILES) -> (list): { "cali_file": data_path+"Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, ] -grouping_attribute = "prop:nested" -default_metric = "avg#inclusive#sum#time.duration" -query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) +# In[ ]: +if use_native_reader: + # New technique + gf0=ht.GraphFrame.from_caliperreader(CALI_FILES[2]['cali_file']) + display(HTML(gf0.dataframe.to_html())) + print("New technique: ") + print(gf0.show_metric_columns()) + print(GenericFrame(gf0).tree(metric_column="avg#inclusive#sum#time.duration")) + +# In[ ]: +if not use_native_reader: + #Old technique + gf1 = ht.GraphFrame.from_caliper(CALI_FILES[2]['cali_file'], query) + display(HTML(gf1.dataframe.to_html())) + print("Old technique: ") + print(gf1.show_metric_columns()) + print(GenericFrame(gf1).tree(metric_column='time (inc)')) + # In[ ]: print("Comparing all variants to each other in new pandas dataframe") gflist = CompareVariants(CALI_FILES) From e89f97d018a9dc6430e020e72b83a96079f8d1d9 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 27 Sep 2021 13:12:13 -0700 Subject: [PATCH 018/174] fix warmup logic; add adiak ProblemSize and SizeMeaning keys --- src/common/Executor.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index f4b9cca0f..4ecaf28c6 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -98,6 +98,15 @@ Executor::Executor(int argc, char** argv) adiak::value("systype_build", cc.systype_build); if (strlen(cc.machine_build) > 0) adiak::value("machine_build", cc.machine_build); + + adiak::value("ProblemSize",1.0); + adiak::value("SizeMeaning",run_params.SizeMeaningToStr(run_params.getSizeMeaning()).c_str()); + if (run_params.getSizeMeaning() == RunParams::SizeMeaning::Factor) { + adiak::value("ProblemSize",run_params.getSizeFactor()); + } else if (run_params.getSizeMeaning() == RunParams::SizeMeaning::Direct) { + adiak::value("ProblemSize",run_params.getSize()); + } + #endif } @@ -793,19 +802,17 @@ void Executor::runSuite() cout << getVariantName(vid) << " variant" << endl; } if ( warmup_kernel->hasVariantDefined(vid) ) { - warmup_kernel->execute(vid); - } - cout << getVariantName(vid) << " variant" << endl; - } - if ( warmup_kernel->hasVariantDefined(vid) ) { #ifdef RAJAPERF_USE_CALIPER - warmup_kernel->caliperOff(); + warmup_kernel->caliperOff(); #endif - warmup_kernel->execute(vid); + warmup_kernel->execute(vid); #ifdef RAJAPERF_USE_CALIPER - warmup_kernel->caliperOn(); + warmup_kernel->caliperOn(); #endif + } + cout << getVariantName(vid) << " variant" << endl; } + delete warmup_kernels[ik]; } From e7577d141de725d9698a91fae28dcb15bd3c0a35 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 4 Oct 2021 10:05:07 -0700 Subject: [PATCH 019/174] perf.py supports running sweeps --- scripts/hatchet_notebooks/perf.py | 175 +++++++++++++++++++----------- 1 file changed, 113 insertions(+), 62 deletions(-) diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py index c5de2350d..ff54a9f05 100644 --- a/scripts/hatchet_notebooks/perf.py +++ b/scripts/hatchet_notebooks/perf.py @@ -9,16 +9,21 @@ import sys import subprocess import json -import os +from os import walk +from os.path import join +from collections import defaultdict import platform import ipykernel +import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages import pandas as pd from IPython.display import display, HTML + machine = platform.uname().machine -use_native_reader=False +use_native_reader=True grouping_attribute = "prop:nested" default_metric = "avg#inclusive#sum#time.duration" query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) @@ -64,7 +69,7 @@ def __init__(self,gf): generic_graph=gf.graph.copy() generic_exc_metrics = gf.exc_metrics generic_inc_metrics = gf.inc_metrics - #generic_default_metric = gf.default_metric # in newer Hatchet + generic_default_metric = gf.default_metric # in newer Hatchet #print('Default Metric = ' + gf.default_metric) generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' ii = generic_dataframe.index[0] @@ -78,7 +83,7 @@ def __init__(self,gf): setattr(generic_graph,'roots',[nn]) super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics) -def ExtractCommonSubtree(gf1: ht.GraphFrame,gf2: ht.GraphFrame) -> (ht.GraphFrame): +def ExtractCommonSubtree(gf1: ht.GraphFrame,gf2: ht.GraphFrame,metric:str) -> (ht.GraphFrame): if (gf1.graph == gf2.graph): return gf1 else: @@ -96,13 +101,13 @@ def ExtractCommonSubtree(gf1: ht.GraphFrame,gf2: ht.GraphFrame) -> (ht.GraphFram # replace subtree values with sum of kernels that have run for nn in tt: if nn._depth == 2: - s2 += common_subtree.dataframe.loc[nn,'time (inc)'] + s2 += common_subtree.dataframe.loc[nn,metric] elif nn._depth == 1: s1 += s2 - common_subtree.dataframe.loc[nn,'time (inc)'] = s2 + common_subtree.dataframe.loc[nn,metric] = s2 s2 = 0.0 elif nn._depth == 0: - common_subtree.dataframe.loc[nn,'time (inc)'] = s1 + common_subtree.dataframe.loc[nn,metric] = s1 s1 = 0.0 return common_subtree @@ -128,8 +133,8 @@ def CompareVariants(CALI_FILES) -> (list): for r in range(len(CALI_FILES)): for c in range(len(CALI_FILES)): - r_common = ExtractCommonSubtree(GenericFrame(gflist[r]),GenericFrame(gflist[c])) - c_common = ExtractCommonSubtree(GenericFrame(gflist[c]),GenericFrame(gflist[r])) + r_common = ExtractCommonSubtree(GenericFrame(gflist[r]),GenericFrame(gflist[c]),default_metric) + c_common = ExtractCommonSubtree(GenericFrame(gflist[c]),GenericFrame(gflist[r]),default_metric) scale = r_common / c_common df = scale.dataframe if use_native_reader: @@ -142,6 +147,61 @@ def CompareVariants(CALI_FILES) -> (list): print(compare) return(gflist) +def ReadCali(directory) -> (list): + CALI_FILES = [] + allfiles = [join(root,f) for root,dirs,files in os.walk(directory) for f in files if f.endswith('.cali')] + for f in allfiles: + dd = {'cali_file': f , 'metric_name' : 'avg#inclusive#sum#time.duration'} + CALI_FILES.append(dd) + return CALI_FILES + +def ExtractKernelList(CALI_FILES,variants): + kernel_list=[] + candidate_list=[] + for i in range(len(CALI_FILES)): + (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) + variant = globals['variant'] + if variant in variants: + gf = ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file']) + tt = gf.graph.roots[0].traverse(order="post") + for nn in tt: + if nn._depth == 2: + candidate_list.append(gf.dataframe.loc[nn,'name']) + kernel_list = list(set(candidate_list) | set(kernel_list)) + return kernel_list + +def PlotSweep(CALI_FILES,kernel,variants): + plt.title(kernel) + vdata = defaultdict(list) + for i in range(len(CALI_FILES)): + (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) + psize = float(globals['ProblemSize']) + variant = globals['variant'] + cluster = globals['cluster'] + if variant in variants: + gf = ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file']) + df = gf.dataframe + metric = CALI_FILES[i]['metric_name'] + val = 0.0 + try: + val = df.loc[df['name']==kernel].iloc[0][metric] + except: pass + vdata[cluster+'_'+variant].append((psize,val)) + legend = [] + for k,v in vdata.items(): + legend.append(k) + ll = sorted(v,key = lambda x: x[0]) + x = [num[0] for num in ll] + y = [num[1] for num in ll] + plt.plot(x,y) + plt.xlabel('problem size') + plt.ylabel('time') + plt.xscale('log',base=2) + plt.yscale('log',base=2) + plt.legend(legend) + + + # In[ ]: # Add cali-query to PATH @@ -149,30 +209,53 @@ def CompareVariants(CALI_FILES) -> (list): #cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" os.environ["PATH"] += os.pathsep + cali_query_path -data_path="/home/skip/workspace/Caliper_test/testcommon/lassen_gcc831_cuda11/" - -CALI_FILES = [ - { "cali_file": data_path+"RAJA_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Base_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Lambda_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, - { "cali_file": data_path+"Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -] - +data_path="/home/skip/cali_sweep/RAJAPerf_0" + +CALI_FILES = ReadCali(data_path) +#print(CALI_FILES) + +#CALI_FILES = [ +# { "cali_file": data_path+"RAJA_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Base_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Lambda_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +# { "cali_file": data_path+"Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, +#] + +# In[]: +pp = PdfPages('RAJAPERF_Sweep.pdf') +variants = ['Lambda_OpenMP','Base_OpenMP','RAJA_OpenMP'] +klist = sorted(ExtractKernelList(CALI_FILES,variants)) +fignum = 0 +for i in range(len(klist)): + fig = plt.figure(fignum) + PlotSweep(CALI_FILES,klist[i],variants) + plt.show() + pp.savefig(fig) + fignum += 1 +pp.close() # In[ ]: if use_native_reader: # New technique - gf0=ht.GraphFrame.from_caliperreader(CALI_FILES[2]['cali_file']) + gf0=GenericFrame(ht.GraphFrame.from_caliperreader(CALI_FILES[0]['cali_file'])) display(HTML(gf0.dataframe.to_html())) + + (records,globals) = cr.read_caliper_contents(CALI_FILES[0]['cali_file']) + print(globals) + print("New technique: ") print(gf0.show_metric_columns()) - print(GenericFrame(gf0).tree(metric_column="avg#inclusive#sum#time.duration")) + print(gf0.tree(metric_column="avg#inclusive#sum#time.duration")) + gf1=GenericFrame(ht.GraphFrame.from_caliperreader(CALI_FILES[1]['cali_file'])) + print(gf1.tree(metric_column="avg#inclusive#sum#time.duration")) + outvar=gf0/gf1 + print(outvar.tree(metric_column="avg#inclusive#sum#time.duration")) # In[ ]: if not use_native_reader: @@ -183,9 +266,10 @@ def CompareVariants(CALI_FILES) -> (list): print(gf1.show_metric_columns()) print(GenericFrame(gf1).tree(metric_column='time (inc)')) + # In[ ]: print("Comparing all variants to each other in new pandas dataframe") -gflist = CompareVariants(CALI_FILES) +gflist = CompareVariants(CALI_FILES[0:6]) #print(gflist[0].tree(metric_column="time (inc)")) #display(HTML(gflist[0].dataframe.to_html())) @@ -196,42 +280,9 @@ def CompareVariants(CALI_FILES) -> (list): #print('\n') #print(globals) -Base_OpenMP = gflist[4] -Base_Seq = gflist[5] -Lambda_CUDA = gflist[6] - -# In[ ]: -print("Illustrates two incompatible trees Base_OpenMP/Base_Seq") -#print(Base_OpenMP.tree(metric_column="time (inc)")) -#print(Lambda_CUDA.tree(metric_column="time (inc)")) -# compare Base_OpenMP to Base_Seq and display tree (illustrates incompatible trees) -invar = Base_OpenMP / Base_Seq -print(invar.tree(metric_column="time (inc)")) - -# In[ ]: -print("Illustrates a bit more compatible tree by fixing root nodes via GenericFrame ") -# compare Base_OpenMP to Base_Seq and display tree (illustrates compatible trees by fixing Root Node) -outvar = GenericFrame(Base_OpenMP) / GenericFrame(Base_Seq) -print(outvar.tree(metric_column="time (inc)")) - -# In[ ]: -# compare GenericFrame versions of Base_OpenMP to Lambda_CUDA and display tree (illustrates somewhat less compatible trees due to missing kernels) -print("Show variants that have a large difference in kernels run Base_OpenMP vs Lambda_CUDA") -cudavar = GenericFrame(Base_OpenMP) / GenericFrame(Lambda_CUDA) -print(cudavar.tree(metric_column="time (inc)")) - -#cudavar2 = GenericFrame(Lambda_CUDA) / GenericFrame(Base_OpenMP) -#print(cudavar2.tree(metric_column="time (inc)")) - -# In[ ]: -print("show use of ExtractCommonSubtree to fix variants with different kernels run") -common_subtree = ExtractCommonSubtree(GenericFrame(Base_OpenMP),GenericFrame(Lambda_CUDA)) -print(common_subtree.tree(metric_column="time (inc)")) +#Base_OpenMP = gflist[4] +#Base_Seq = gflist[5] +#Lambda_CUDA = gflist[6] -common_subtree2 = ExtractCommonSubtree(GenericFrame(Lambda_CUDA),GenericFrame(Base_OpenMP)) -print(common_subtree2.tree(metric_column="time (inc)")) -calc = common_subtree / common_subtree2 -print(calc.tree(metric_column="time (inc)")) -display(HTML(calc.dataframe.to_html())) # %% From 64d521965d9bbc4a5214aa1f3c6c9051173046d4 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 3 Nov 2021 13:34:18 -0700 Subject: [PATCH 020/174] import of adiak works for adiak and adiak::adiak library exports; cleanup of caliper includes --- CMakeLists.txt | 3 ++- scripts/hatchet_notebooks/perf.py | 22 ++++++++++++++++------ src/RAJAPerfSuiteDriver.cpp | 6 ------ src/common/KernelBase.hpp | 3 +++ src/common/RAJAPerfSuite.hpp | 6 ------ 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a5e216f5..564ee960e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,8 @@ if (ENABLE_CALIPER) add_definitions(-DRAJAPERF_USE_CALIPER) message(STATUS "Using Caliper") find_package(adiak REQUIRED) - list(APPEND RAJA_PERFSUITE_DEPENDS adiak) + # use ${adiak_LIBRARIES} since version could have adiak vs adiak::adiak export + list(APPEND RAJA_PERFSUITE_DEPENDS ${adiak_LIBRARIES}) message(STATUS "Using Adiak") if (ENABLE_CUDA) # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py index ff54a9f05..41c86d020 100644 --- a/scripts/hatchet_notebooks/perf.py +++ b/scripts/hatchet_notebooks/perf.py @@ -15,6 +15,7 @@ import platform import ipykernel import matplotlib.pyplot as plt +import matplotlib._color_data as mcd from matplotlib.backends.backend_pdf import PdfPages import pandas as pd @@ -187,18 +188,27 @@ def PlotSweep(CALI_FILES,kernel,variants): val = df.loc[df['name']==kernel].iloc[0][metric] except: pass vdata[cluster+'_'+variant].append((psize,val)) - legend = [] + legend = [] + colors=[mcd.CSS4_COLORS['cornflowerblue'],mcd.CSS4_COLORS['red'],mcd.CSS4_COLORS['lightgreen'],mcd.CSS4_COLORS['darkgreen'],mcd.CSS4_COLORS['darkblue'],mcd.CSS4_COLORS['darkred']] + #colors=[mcd.CSS4_COLORS['red'],mcd.CSS4_COLORS['cornflowerblue'],mcd.CSS4_COLORS['lightgreen'],mcd.CSS4_COLORS['darkblue'],mcd.CSS4_COLORS['darkgreen'],mcd.CSS4_COLORS['darkred']] + colorindex=0 for k,v in vdata.items(): legend.append(k) ll = sorted(v,key = lambda x: x[0]) x = [num[0] for num in ll] y = [num[1] for num in ll] - plt.plot(x,y) + plt.plot(x,y,label=k,color=colors[colorindex]) + colorindex += 1 plt.xlabel('problem size') plt.ylabel('time') plt.xscale('log',base=2) plt.yscale('log',base=2) - plt.legend(legend) + print(legend) + handles, labels = plt.gca().get_legend_handles_labels() + order= [1,2,0,5,3,4] + # the following to change the order on case by case basis + plt.legend([handles[idx] for idx in order],[labels[idx] for idx in order]) + #plt.legend(legend) @@ -209,7 +219,7 @@ def PlotSweep(CALI_FILES,kernel,variants): #cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" os.environ["PATH"] += os.pathsep + cali_query_path -data_path="/home/skip/cali_sweep/RAJAPerf_0" +data_path="/home/skip/cali_sweep_xx/" CALI_FILES = ReadCali(data_path) #print(CALI_FILES) @@ -227,8 +237,8 @@ def PlotSweep(CALI_FILES,kernel,variants): #] # In[]: -pp = PdfPages('RAJAPERF_Sweep.pdf') -variants = ['Lambda_OpenMP','Base_OpenMP','RAJA_OpenMP'] +pp = PdfPages('RAJAPERF_Sweep_lc2.pdf') +variants = ['Base_HIP','Lambda_HIP','RAJA_HIP','Base_CUDA','Lambda_CUDA','RAJA_CUDA'] klist = sorted(ExtractKernelList(CALI_FILES,variants)) fignum = 0 for i in range(len(klist)): diff --git a/src/RAJAPerfSuiteDriver.cpp b/src/RAJAPerfSuiteDriver.cpp index 01b1204d8..aaff9f093 100644 --- a/src/RAJAPerfSuiteDriver.cpp +++ b/src/RAJAPerfSuiteDriver.cpp @@ -10,12 +10,6 @@ #include -#ifdef RAJAPERF_USE_CALIPER -#include -#include -#include -#endif - //------------------------------------------------------------------------------ int main( int argc, char** argv ) { diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index ef87af045..4ac944e89 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -28,6 +28,9 @@ #include #ifdef RAJAPERF_USE_CALIPER +#include +#include +#include #define CALI_START \ if(doCaliperTiming) { \ diff --git a/src/common/RAJAPerfSuite.hpp b/src/common/RAJAPerfSuite.hpp index c5c4930c8..ca4f10f1d 100644 --- a/src/common/RAJAPerfSuite.hpp +++ b/src/common/RAJAPerfSuite.hpp @@ -17,12 +17,6 @@ #include -#ifdef RAJAPERF_USE_CALIPER -#include -#include -#include -#endif - namespace rajaperf { From 61dae2a425a7656e03be289e205a4206a38dd71a Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 3 Nov 2021 13:44:18 -0700 Subject: [PATCH 021/174] remove hatchet based scripts until next hatchet/spot release; this will bring in Caliper native reader and adiak, removing our reliance on caliper.py --- scripts/hatchet_notebooks/perf.py | 298 ------------------------------ 1 file changed, 298 deletions(-) delete mode 100644 scripts/hatchet_notebooks/perf.py diff --git a/scripts/hatchet_notebooks/perf.py b/scripts/hatchet_notebooks/perf.py deleted file mode 100644 index 41c86d020..000000000 --- a/scripts/hatchet_notebooks/perf.py +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# ##### Hatchet Notebook v0.1.0 - - -# In[ ]: - -import sys -import subprocess -import json -from os import walk -from os.path import join -from collections import defaultdict -import platform -import ipykernel -import matplotlib.pyplot as plt -import matplotlib._color_data as mcd -from matplotlib.backends.backend_pdf import PdfPages - -import pandas as pd -from IPython.display import display, HTML - - -machine = platform.uname().machine - -use_native_reader=True -grouping_attribute = "prop:nested" -default_metric = "avg#inclusive#sum#time.duration" -query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) - - -# Add hatchet to PYTHONPATH -deploy_dir = "/home/skip/workspace/hatchet/" -sys.path.append(deploy_dir) -sys.path.append(deploy_dir + "/hatchet") -import hatchet as ht -#print(dir(ht)) - -# if you didn't install caliperreader via pip3 point to it's deploy_dir -# sys.path.append(deploy_dir + 'Caliper/python/caliper-reader/') -import caliperreader as cr # pip3 install caliper-reader - -import importlib -import pkgutil - -def import_submodules(package, recursive=True): - """ Import all submodules of a module, recursively, including subpackages - - :param package: package (name or actual module) - :type package: str | module - :rtype: dict[str, types.ModuleType] - """ - if isinstance(package, str): - package = importlib.import_module(package) - results = {} - for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): - full_name = package.__name__ + '.' + name - results[full_name] = importlib.import_module(full_name) - if recursive and is_pkg: - results.update(import_submodules(full_name)) - #print(results) - return results - -import_submodules(ht) - -class GenericFrame(ht.GraphFrame): - def __init__(self,gf): - generic_dataframe=gf.dataframe.copy() - generic_graph=gf.graph.copy() - generic_exc_metrics = gf.exc_metrics - generic_inc_metrics = gf.inc_metrics - generic_default_metric = gf.default_metric # in newer Hatchet - #print('Default Metric = ' + gf.default_metric) - generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' - ii = generic_dataframe.index[0] - #fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) - fr = ht.graphframe.Frame({'name': 'Variant', 'type' : 'region'}) - nn = ht.graphframe.Node(fr) - setattr(nn,'_hatchet_nid',ii._hatchet_nid) - setattr(nn,'_depth',ii._depth) - setattr(nn,'children',ii.children) - generic_dataframe.rename(index={ii: nn},inplace=True) - setattr(generic_graph,'roots',[nn]) - super().__init__(generic_graph,generic_dataframe,generic_exc_metrics,generic_inc_metrics) - -def ExtractCommonSubtree(gf1: ht.GraphFrame,gf2: ht.GraphFrame,metric:str) -> (ht.GraphFrame): - if (gf1.graph == gf2.graph): - return gf1 - else: - cc = gf1.deepcopy() - cc2 = gf2.deepcopy() - cc.unify(cc2) - # search for nodes contained in both graphs {0==both, 1==left only, 2==right only} - filter_func = lambda x: x["_missing_node"] == 0 - common_subtree = cc.filter(filter_func, squash=True) - #print(common_subtree.dataframe.columns.tolist()) - # tt is generator object from post order tree traversal, i.e starts down at first set of leaves - tt = common_subtree.graph.roots[0].traverse(order="post") - s2 = 0.0 # sum accumulated at depth 2 - s1 = 0.0 # sum accumulated at depth 1 - # replace subtree values with sum of kernels that have run - for nn in tt: - if nn._depth == 2: - s2 += common_subtree.dataframe.loc[nn,metric] - elif nn._depth == 1: - s1 += s2 - common_subtree.dataframe.loc[nn,metric] = s2 - s2 = 0.0 - elif nn._depth == 0: - common_subtree.dataframe.loc[nn,metric] = s1 - s1 = 0.0 - - return common_subtree - -def CompareVariants(CALI_FILES) -> (list): - grouping_attribute = "prop:nested" - default_metric = "avg#inclusive#sum#time.duration" - query = "select %s,sum(%s) group by %s format json-split" % (grouping_attribute, default_metric, grouping_attribute) - - gflist = [] - vstrs = [] - for i in range(len(CALI_FILES)): - (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) - cstr = globals['compiler'] - if use_native_reader: - gflist.append(ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file'])) - else: - gflist.append(ht.GraphFrame.from_caliper(CALI_FILES[i]['cali_file'], query)) - v = gflist[i] - vstrs.append(v.dataframe.iloc[0,v.dataframe.columns.get_loc('name')] + '_' + cstr) - - compare = pd.DataFrame(0,index=vstrs,columns=vstrs) - - for r in range(len(CALI_FILES)): - for c in range(len(CALI_FILES)): - r_common = ExtractCommonSubtree(GenericFrame(gflist[r]),GenericFrame(gflist[c]),default_metric) - c_common = ExtractCommonSubtree(GenericFrame(gflist[c]),GenericFrame(gflist[r]),default_metric) - scale = r_common / c_common - df = scale.dataframe - if use_native_reader: - val = df.iloc[0, df.columns.get_loc(default_metric)] - else: - val = df.iloc[0, df.columns.get_loc('time (inc)')] - compare.loc[vstrs[r],vstrs[c]] = val - print(".",end="") - print(" ") - print(compare) - return(gflist) - -def ReadCali(directory) -> (list): - CALI_FILES = [] - allfiles = [join(root,f) for root,dirs,files in os.walk(directory) for f in files if f.endswith('.cali')] - for f in allfiles: - dd = {'cali_file': f , 'metric_name' : 'avg#inclusive#sum#time.duration'} - CALI_FILES.append(dd) - return CALI_FILES - -def ExtractKernelList(CALI_FILES,variants): - kernel_list=[] - candidate_list=[] - for i in range(len(CALI_FILES)): - (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) - variant = globals['variant'] - if variant in variants: - gf = ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file']) - tt = gf.graph.roots[0].traverse(order="post") - for nn in tt: - if nn._depth == 2: - candidate_list.append(gf.dataframe.loc[nn,'name']) - kernel_list = list(set(candidate_list) | set(kernel_list)) - return kernel_list - -def PlotSweep(CALI_FILES,kernel,variants): - plt.title(kernel) - vdata = defaultdict(list) - for i in range(len(CALI_FILES)): - (records,globals) = cr.read_caliper_contents(CALI_FILES[i]['cali_file']) - psize = float(globals['ProblemSize']) - variant = globals['variant'] - cluster = globals['cluster'] - if variant in variants: - gf = ht.GraphFrame.from_caliperreader(CALI_FILES[i]['cali_file']) - df = gf.dataframe - metric = CALI_FILES[i]['metric_name'] - val = 0.0 - try: - val = df.loc[df['name']==kernel].iloc[0][metric] - except: pass - vdata[cluster+'_'+variant].append((psize,val)) - legend = [] - colors=[mcd.CSS4_COLORS['cornflowerblue'],mcd.CSS4_COLORS['red'],mcd.CSS4_COLORS['lightgreen'],mcd.CSS4_COLORS['darkgreen'],mcd.CSS4_COLORS['darkblue'],mcd.CSS4_COLORS['darkred']] - #colors=[mcd.CSS4_COLORS['red'],mcd.CSS4_COLORS['cornflowerblue'],mcd.CSS4_COLORS['lightgreen'],mcd.CSS4_COLORS['darkblue'],mcd.CSS4_COLORS['darkgreen'],mcd.CSS4_COLORS['darkred']] - colorindex=0 - for k,v in vdata.items(): - legend.append(k) - ll = sorted(v,key = lambda x: x[0]) - x = [num[0] for num in ll] - y = [num[1] for num in ll] - plt.plot(x,y,label=k,color=colors[colorindex]) - colorindex += 1 - plt.xlabel('problem size') - plt.ylabel('time') - plt.xscale('log',base=2) - plt.yscale('log',base=2) - print(legend) - handles, labels = plt.gca().get_legend_handles_labels() - order= [1,2,0,5,3,4] - # the following to change the order on case by case basis - plt.legend([handles[idx] for idx in order],[labels[idx] for idx in order]) - #plt.legend(legend) - - - - -# In[ ]: -# Add cali-query to PATH - -#cali_query_path = "/usr/gapps/spot/live/caliper/" + machine + "/bin" -cali_query_path = "/home/skip/workspace/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-10.2.0/caliper-2.5.0-y64d5flp5ph55dj74dpvaigjn62txxmc/bin" -os.environ["PATH"] += os.pathsep + cali_query_path -data_path="/home/skip/cali_sweep_xx/" - -CALI_FILES = ReadCali(data_path) -#print(CALI_FILES) - -#CALI_FILES = [ -# { "cali_file": data_path+"RAJA_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"RAJA_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"RAJA_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Base_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Base_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Base_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Lambda_CUDA.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Lambda_OpenMP.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -# { "cali_file": data_path+"Lambda_Seq.cali", "metric_name": "avg#inclusive#sum#time.duration"}, -#] - -# In[]: -pp = PdfPages('RAJAPERF_Sweep_lc2.pdf') -variants = ['Base_HIP','Lambda_HIP','RAJA_HIP','Base_CUDA','Lambda_CUDA','RAJA_CUDA'] -klist = sorted(ExtractKernelList(CALI_FILES,variants)) -fignum = 0 -for i in range(len(klist)): - fig = plt.figure(fignum) - PlotSweep(CALI_FILES,klist[i],variants) - plt.show() - pp.savefig(fig) - fignum += 1 -pp.close() - - -# In[ ]: -if use_native_reader: - # New technique - gf0=GenericFrame(ht.GraphFrame.from_caliperreader(CALI_FILES[0]['cali_file'])) - display(HTML(gf0.dataframe.to_html())) - - (records,globals) = cr.read_caliper_contents(CALI_FILES[0]['cali_file']) - print(globals) - - print("New technique: ") - print(gf0.show_metric_columns()) - print(gf0.tree(metric_column="avg#inclusive#sum#time.duration")) - gf1=GenericFrame(ht.GraphFrame.from_caliperreader(CALI_FILES[1]['cali_file'])) - print(gf1.tree(metric_column="avg#inclusive#sum#time.duration")) - outvar=gf0/gf1 - print(outvar.tree(metric_column="avg#inclusive#sum#time.duration")) - -# In[ ]: -if not use_native_reader: - #Old technique - gf1 = ht.GraphFrame.from_caliper(CALI_FILES[2]['cali_file'], query) - display(HTML(gf1.dataframe.to_html())) - print("Old technique: ") - print(gf1.show_metric_columns()) - print(GenericFrame(gf1).tree(metric_column='time (inc)')) - - -# In[ ]: -print("Comparing all variants to each other in new pandas dataframe") -gflist = CompareVariants(CALI_FILES[0:6]) - -#print(gflist[0].tree(metric_column="time (inc)")) -#display(HTML(gflist[0].dataframe.to_html())) - -#(records,globals) = cr.read_caliper_contents(data_path+"Base_OpenMP.cali") -#print('\n') -#print(records) -#print('\n') -#print(globals) - -#Base_OpenMP = gflist[4] -#Base_Seq = gflist[5] -#Lambda_CUDA = gflist[6] - - -# %% From c617652af407db7839cdd26e71435994f7c3ae87 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 9 May 2022 15:53:19 -0700 Subject: [PATCH 022/174] Make sweep_size script more flexible It can now take strings with spaces as executables. This allows you to treat things like "srun -n8 ./bin/raja_perf.exe" as an executable. --- scripts/sweep_size.sh | 47 +++++++++++-------------------------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/scripts/sweep_size.sh b/scripts/sweep_size.sh index 65c3a94e5..388390148 100755 --- a/scripts/sweep_size.sh +++ b/scripts/sweep_size.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -EXECUTABLES="" +EXECUTABLES=() SIZE_MIN=10000 SIZE_MAX=1000000 SIZE_RATIO=2 @@ -30,16 +30,7 @@ while [ "$#" -gt 0 ]; do if [[ "x$1" == "x-x" || "x$1" == "x--executable" ]]; then - exec="$2" - if ! [[ "x$exec" == x/* ]]; then - exec="$(pwd)/$exec" - fi - - if [[ "x$EXECUTABLES" == "x" ]]; then - EXECUTABLES="$exec" - else - EXECUTABLES="${EXECUTABLES} $exec" - fi + EXECUTABLES+=("$2") shift elif [[ "x$1" == "x-m" || "x$1" == "x--size-min" ]]; then @@ -77,7 +68,7 @@ while [ "$#" -gt 0 ]; do done -echo "Running sweep with executables: $EXECUTABLES" +echo "Running sweep with executables: ${EXECUTABLES[@]}" echo "Sweeping from size $SIZE_MIN to $SIZE_MAX with ratio $SIZE_RATIO" echo "extra args to executables are: $@" @@ -102,21 +93,10 @@ if [[ "$SIZE_MIN" -gt "$SIZE_MAX" ]]; then exit 1 fi -################################################################################ -# check executables exist and are executable -################################################################################ -for exec in $EXECUTABLES; do - if [[ ! -f "$exec" ]]; then - echo "Executable not found: $exec" 1>&2 - exit 1 - elif [[ ! -x "$exec" ]]; then - echo "Executable not executable: $exec" 1>&2 - exit 1 - fi -done - EXEC_I=0 -for exec in $EXECUTABLES; do +for exec in "${EXECUTABLES[@]}"; do + + echo "$exec" mkdir "RAJAPerf_$EXEC_I" || exit 1 @@ -128,18 +108,15 @@ SIZE="$SIZE_MIN" while [[ "$SIZE" -le "$SIZE_MAX" ]]; do EXEC_I=0 - for exec in $EXECUTABLES; do - - cd "RAJAPerf_$EXEC_I" || exit 1 + for exec in "${EXECUTABLES[@]}"; do - SIZE_FILE="$(printf "SIZE_%09d" $SIZE)" - mkdir "$SIZE_FILE" && cd "$SIZE_FILE" || exit 1 + SIZE_DIR="$(printf "SIZE_%09d" $SIZE)" + OUT_DIR="RAJAPerf_$EXEC_I/$SIZE_DIR" - echo "$exec --size $SIZE $@" - echo "$exec --size $SIZE $@" &> "raja-perf-sweep.txt" - $exec --size $SIZE $@ &>> "raja-perf-sweep.txt" + mkdir "${OUT_DIR}" || exit 1 - cd ../.. + echo "$exec -od ${OUT_DIR} --size $SIZE $@" | tee -a "${OUT_DIR}/raja-perf-sweep.txt" + $exec -od ${OUT_DIR} --size $SIZE $@ &>> "${OUT_DIR}/raja-perf-sweep.txt" let EXEC_I=EXEC_I+1 From 2933af171bf60024ba8ff5dea472cf38cc356823 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 9 May 2022 15:53:37 -0700 Subject: [PATCH 023/174] Add graphing script to go with sweep script. --- scripts/sweep_graph.py | 712 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 712 insertions(+) create mode 100755 scripts/sweep_graph.py diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py new file mode 100755 index 000000000..294c7bde9 --- /dev/null +++ b/scripts/sweep_graph.py @@ -0,0 +1,712 @@ +#!/usr/bin/env python3 + +import math +import os +import sys +import getopt +import csv +import matplotlib.pyplot as plt + +def normalize_color_tuple(t): + len_t = 0.0 + for i in range(0, len(t)): + len_t += t[i]*t[i] + len_t = math.sqrt(len_t) + new_t = () + for i in range(0, len(t)): + new_t += (t[i]/len_t,) + return new_t + +def clamp_tuple(t, min_val=0.0, max_val=1.0): + new_t = () + for i in range(0, len(t)): + val = t[i] + if val > max_val: + val = max_val + elif val < min_val: + val = min_val + new_t += (val,) + return new_t + +def color_mul(t, factor): + new_t = () + for i in range(0, len(t)): + new_t += (t[i]*factor,) + return clamp_tuple(new_t) + +def make_color_tuple(r, g, b): + return (r/255.0, g/255.0, b/255.0) + +g_color_base_factor = 1.3 +g_color_lambda_factor = 1.0 +g_color_raja_factor = 0.7 +g_color_seq = normalize_color_tuple(make_color_tuple(204, 119, 34)) # ocre +g_color_omp = normalize_color_tuple(make_color_tuple(0, 115, 125)) # omp teal +g_color_ompt = normalize_color_tuple(make_color_tuple(125, 10, 0)) # omp teal compliment +g_color_cuda = normalize_color_tuple(make_color_tuple(118, 185, 0)) # nvidia green +g_color_hip = normalize_color_tuple(make_color_tuple(237, 28, 36)) # amd red +g_known_variants = { "Base_Seq": {"color": color_mul(g_color_seq, g_color_base_factor)}, + "Lambda_Seq": {"color": color_mul(g_color_seq, g_color_lambda_factor)}, + "RAJA_Seq": {"color": color_mul(g_color_seq, g_color_raja_factor)}, + + "Base_OpenMP": {"color": color_mul(g_color_omp, g_color_base_factor)}, + "Lambda_OpenMP": {"color": color_mul(g_color_omp, g_color_lambda_factor)}, + "RAJA_OpenMP": {"color": color_mul(g_color_omp, g_color_raja_factor)}, + + "Base_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_base_factor)}, + "Lambda_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_lambda_factor)}, + "RAJA_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_raja_factor)}, + + "Base_CUDA": {"color": color_mul(g_color_cuda, g_color_base_factor)}, + "Lambda_CUDA": {"color": color_mul(g_color_cuda, g_color_lambda_factor)}, + "RAJA_CUDA": {"color": color_mul(g_color_cuda, g_color_raja_factor)}, + + "Base_HIP": {"color": color_mul(g_color_hip, g_color_base_factor)}, + "Lambda_HIP": {"color": color_mul(g_color_hip, g_color_lambda_factor)}, + "RAJA_HIP": {"color": color_mul(g_color_hip, g_color_raja_factor)} + } + +g_timing_filename = "RAJAPerf-timing-Minimum.csv" +g_runinfo_filename = "RAJAPerf-kernels.csv" +g_timing_file_kind = "time(s)" + +# multi-dimensional array structured like this +# kind - time, bandwidth, etc (["info"]) +# directory name - platform, compiler, etc +# run size - problem size, for g_run_sizes +# kernel index - for g_kernels +g_info = { "Problem size": { }, + "Reps": { }, + "Iterations/rep": { }, + "Kernels/rep": { }, + "Bytes/rep": { }, + "FLOPS/rep": { } + } + +# multi-dimensional array structured like this +# kind - time, bandwidth, etc (["data"]) +# directory name - platform, compiler, etc +# run size - problem size, for g_run_sizes +# kernel index - for g_kernels +# variant index - for g_variants +# tuning index - for g_tunings +g_data = { } + +g_model_kind = "time(s)" + +# has info derivable from first kind "time(s)" which is read from files +g_kinds = { "Problem size": { "type": "info" }, + "Reps": { "type": "info" }, + "Iterations/rep": { "type": "info" }, + "Kernels/rep": { "type": "info" }, + "Bytes/rep": { "type": "info" }, + "FLOPS/rep": { "type": "info" }, + + "time(s)" : { "type": "data" }, + + "time(ms)": { "type": "computed", + "args": ["time(s)"], + "func": lambda t: t * 1000.0 }, + "time(us)": { "type": "computed", + "args": ["time(s)"], + "func": lambda t: t * 1000000.0 }, + "time(ns)": { "type": "computed", + "args": ["time(s)"], + "func": lambda t: t * 1000000000.0 }, + + "time/rep(s)": { "type": "computed", + "args": ["time(s)", "Reps"], + "func": lambda t, r: t / r }, + "time/rep(ms)": { "type": "computed", + "args": ["time/rep(s)"], + "func": lambda tpr: tpr * 1000.0 }, + "time/rep(us)": { "type": "computed", + "args": ["time/rep(s)"], + "func": lambda tpr: tpr * 1000000.0 }, + "time/rep(ns)": { "type": "computed", + "args": ["time/rep(s)"], + "func": lambda tpr: tpr * 1000000000.0 }, + + "time/it(s)": { "type": "computed", + "args": ["time/rep(s)", "Iterations/rep"], + "func": lambda tpr, ipr: tpr / ipr }, + "time/it(ms)": { "type": "computed", + "args": ["time/it(s)"], + "func": lambda tpi: tpi * 1000.0 }, + "time/it(us)": { "type": "computed", + "args": ["time/it(s)"], + "func": lambda tpi: tpi * 1000000.0 }, + "time/it(ns)": { "type": "computed", + "args": ["time/it(s)"], + "func": lambda tpi: tpi * 1000000000.0 }, + + "time/kernel(s)": { "type": "computed", + "args": ["time/rep(s)", "Kernels/rep"], + "func": lambda tpr, kpr: tpr / kpr }, + "time/kernel(ms)": { "type": "computed", + "args": ["time/kernel(s)"], + "func": lambda tpi: tpi * 1000.0 }, + "time/kernel(us)": { "type": "computed", + "args": ["time/kernel(s)"], + "func": lambda tpi: tpi * 1000000.0 }, + "time/kernel(ns)": { "type": "computed", + "args": ["time/kernel(s)"], + "func": lambda tpi: tpi * 1000000000.0 }, + + "bandwidth(B/s)": { "type": "computed", + "args": ["time/rep(s)", "Bytes/rep"], + "func": lambda tpr, bpr: bpr / tpr }, + "bandwidth(Kb/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1000.0 }, + "bandwidth(MB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1000000.0 }, + "bandwidth(GB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1000000000.0 }, + "bandwidth(TB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1000000000000.0 }, + + "bandwidth(B/s)": { "type": "computed", + "args": ["time/rep(s)", "Bytes/rep"], + "func": lambda tpr, bpr: bpr / tpr }, + "bandwidth(Kib/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1024.0 }, + "bandwidth(MiB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1048576.0 }, + "bandwidth(GiB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1073741824.0 }, + "bandwidth(TiB/s)": { "type": "computed", + "args": ["bandwidth(B/s)"], + "func": lambda bps: bps / 1099511627776.0 }, + + "FLOPS": { "type": "computed", + "args": ["time/rep(s)", "FLOPS/rep"], + "func": lambda tpr, fpr: fpr / tpr }, + "MFLOPS": { "type": "computed", + "args": ["FLOPS"], + "func": lambda fps: fps / 1000.0 }, + "GFLOPS": { "type": "computed", + "args": ["FLOPS"], + "func": lambda fps: fps / 1000000.0 }, + "TFLOPS": { "type": "computed", + "args": ["FLOPS"], + "func": lambda fps: fps / 1000000000.0 }, + } + +g_num_sweeps = 0 +g_sweeps = {} + +g_num_run_sizes = 0 +g_run_sizes = {} + +g_num_kernels = 0 +g_kernels = {} + +g_num_variants = 0 +g_variants = {} +g_variant_colors = {} + +g_num_tunings = 0 +g_tunings = {} +g_tuning_colors = {} + +def get_size_from_dir_name(sweep_subdir_name): + # print(sweep_subdir_name) + return int(sweep_subdir_name.replace("SIZE_", "")); + +def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): + # print(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size) + with open(sweep_subdir_runinfo_file_path, "r") as file: + file_reader = csv.reader(file, delimiter=',') + + ignore = True + c_to_info_kinds = {} + for row in file_reader: + # print(row) + if row[0].strip() == "Kernels": + ignore = False + for c in range(1, len(row)): + info_kind = row[c].strip() + # print(c, info_kind) + if not info_kind in g_kinds: + print("Unknown kernel info {0}".format(info_kind)) + g_kinds[info_kind] = { "type": "info" } + if info_kind in c_to_info_kinds: + print("Repeated kernel info {0}".format(info_kind)) + sys.exit(1) + if not info_kind in g_info: + # add new kind to global data + g_info[info_kind] = {} + if not sweep_dir_name in g_info[info_kind]: + # add new sweep to global data + g_info[info_kind][sweep_dir_name] = {} + if run_size in g_info[info_kind][sweep_dir_name]: + print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size)) + sys.exit(1) + else: + # add new size to global data + g_info[info_kind][sweep_dir_name][run_size] = {} + # make map of columns to names + c_to_info_kinds[c] = info_kind + c_to_info_kinds[info_kind] = c + elif not ignore: + kernel_index = -1 + kernel_name = row[0].strip() + if kernel_name in g_kernels: + kernel_index = g_kernels[kernel_name] + else: + # add kernel to global list + global g_num_kernels + kernel_index = g_num_kernels + g_num_kernels += 1 + g_kernels[kernel_name] = kernel_index + g_kernels[kernel_index] = kernel_name + + for c in range(1, len(row)): + info_kind = c_to_info_kinds[c] + try: + # add data to global structure + val = int(row[c].strip()) + # print(kernel_index, kernel_name, info_kind, val) + g_info[info_kind][sweep_dir_name][run_size][kernel_index] = val + except ValueError: + pass # could not convert data to int + +def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): + # print(sweep_dir_name, sweep_subdir_timing_file_path, run_size) + with open(sweep_subdir_timing_file_path, "r") as file: + file_reader = csv.reader(file, delimiter=',') + + data_kind = g_timing_file_kind + if not data_kind in g_data: + g_data[data_kind] = {} + if not sweep_dir_name in g_data[data_kind]: + g_data[data_kind][sweep_dir_name] = {} + if not run_size in g_data[data_kind][sweep_dir_name]: + g_data[data_kind][sweep_dir_name][run_size] = {} + else: + raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size)) + + c_to_variant_index = {} + c_to_tuning_index = {} + for row in file_reader: + # print(row) + if row[0].strip() == "Kernel": + if len(c_to_variant_index) == 0: + for c in range(1, len(row)): + variant_name = row[c].strip() + if variant_name in g_variants: + pass + else: + global g_num_variants + variant_index = g_num_variants + g_num_variants += 1 + g_variants[variant_name] = variant_index + g_variants[variant_index] = variant_name + if variant_name in g_known_variants: + variant_color = g_known_variants[variant_name]["color"] + g_variant_colors[variant_name] = variant_color + g_variant_colors[variant_index] = variant_color + else: + print("Unknown variant {0}".format(variant_name)) + sys.exit(1) + c_to_variant_index[c] = g_variants[variant_name] + elif len(c_to_tuning_index) == 0: + for c in range(1, len(row)): + tuning_name = row[c].strip() + if tuning_name in g_tunings: + pass + else: + global g_num_tunings + tuning_index = g_num_tunings + g_num_tunings += 1 + g_tunings[tuning_name] = tuning_index + g_tunings[tuning_index] = tuning_name + tuning_color = g_variant_colors[c_to_variant_index[c]] + g_tuning_colors[tuning_name] = tuning_color + g_tuning_colors[tuning_index] = tuning_color + c_to_tuning_index[c] = g_tunings[tuning_name] + else: + print("Unknown row {0}".format(row)) + sys.exit(1); + elif len(c_to_variant_index) > 0 and len(c_to_tuning_index) > 0: + kernel_index = -1 + kernel_name = row[0].strip() + if kernel_name in g_kernels: + kernel_index = g_kernels[kernel_name] + else: + raise NameError("Unknown Kernel {0}".format(kernel_name)) + + g_data[data_kind][sweep_dir_name][run_size][kernel_index] = {} + for c in range(1, len(row)): + variant_index = c_to_variant_index[c] + tuning_index = c_to_tuning_index[c] + try: + val = float(row[c].strip()) + # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) + if not variant_index in g_data[data_kind][sweep_dir_name][run_size][kernel_index]: + g_data[data_kind][sweep_dir_name][run_size][kernel_index][variant_index] = {} + g_data[data_kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + except ValueError: + pass # could not convert data to float + +def compute_data(kind): + if not kind in g_kinds: + raise NameError("Unknown data kind {0}".format(kind)) + + if g_kinds[kind]["type"] == "info": + if kind in g_info: + return # already calculated + else: + raise NameError("Invalid info kind {0}".format(kind)) + elif g_kinds[kind]["type"] == "data": + if kind in g_data: + return # already calculated + + if not g_kinds[kind]["type"] == "computed": + raise NameError("Invalid data kind {0}".format(kind)) + + if not ("func" in g_kinds[kind] and "args" in g_kinds[kind]): + raise NameError("Computing data is not yet supported for kind {0}".format(kind)) + + compute_args = g_kinds[kind]["args"] + compute_func = g_kinds[kind]["func"] + + for arg_kind in compute_args: + # calculate data for arg_kind + compute_data(arg_kind) + + model_kind = g_model_kind + compute_data(model_kind) + if not model_kind in g_data: + raise NameError("Model data not available {0}, no args".format(model_kind)) + + g_data[kind] = {} + for sweep_dir_name, model_sweep_data in g_data[model_kind].items(): + g_data[kind][sweep_dir_name] = {} + for run_size, model_run_data in model_sweep_data.items(): + g_data[kind][sweep_dir_name][run_size] = {} + for kernel_index, model_kernel_data in model_run_data.items(): + kernel_name = g_kernels[kernel_index] + g_data[kind][sweep_dir_name][run_size][kernel_index] = {} + for variant_index, model_variant_data in model_kernel_data.items(): + variant_name = g_variants[variant_index] + g_data[kind][sweep_dir_name][run_size][kernel_index][variant_index] = {} + for tuning_index, model_val in model_variant_data.items(): + tuning_name = g_tunings[tuning_index] + + args_val = () + for arg_kind in compute_args: + if g_kinds[arg_kind]["type"] == "info": + arg_val = g_info[arg_kind][sweep_dir_name][run_size][kernel_index] + elif g_kinds[arg_kind]["type"] == "data" or g_kinds[arg_kind]["type"] == "computed": + arg_val = g_data[arg_kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val = args_val + (arg_val,) + + val = compute_func(*args_val) + g_data[kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + + +def get_run_size_data(kind, kernel): + + if not kind in g_kinds: + raise NameError("Unknown kind {}".format(kind)) + + kernel_index = kernel + if isinstance(kernel, str): + if kernel in g_kernels: + kernel_index = g_kernels[kernel] + else: + raise NameError("Unknown kernel {}".format(kernel)) + elif isinstance(kernel, int): + kernel_index = kernel + else: + raise NameError("Unknown kernel {}".format(kernel)) + + if not kernel_index in g_kernels: + raise NameError("Unknown kernel {}".format(kernel_index)) + kernel_name = g_kernels[kernel_index] + + data = {} + + kind_meta = g_kinds[kind] + if kind_meta["type"] == "info": + + if not kind in g_info: + raise NameError("Unknown info kind {}".format(kind)) + kind_info = g_info[kind] + + for sweep_dir_name, sweep_info in kind_info.items(): + + data[sweep_dir_name] = {} + data[sweep_dir_name][kind] = {"type": "info", + "data": [] } + + for run_size, run_info in sweep_info.items(): + + if not kernel_index in run_info: + raise NameError("Unknown info kernel_index {}".format(kernel_index)) + + val = run_info[kernel_index] + data[sweep_dir_name][kind]["data"].append(val) + + elif kind_meta["type"] == "data" or kind_meta["type"] == "computed": + + if kind_meta["type"] == "computed": + compute_data(kind) + + if not kind in g_data: + raise NameError("Unknown data kind {}".format(kind)) + kind_data = g_data[kind] + + for sweep_dir_name, sweep_data in kind_data.items(): + + data[sweep_dir_name] = {} + + for run_size, run_data in sweep_data.items(): + + if not kernel_index in run_data: + raise NameError("Unknown info kernel_index {}".format(kernel_index)) + + kernel_data = run_data[kernel_index] + + for variant_index, variant_data in kernel_data.items(): + variant_name = g_variants[variant_index] + for tuning_index, val in variant_data.items(): + tuning_name = g_tunings[tuning_index] + + data_name = "{}-{}".format(variant_name, tuning_name) + + if not data_name in data[sweep_dir_name]: + data[sweep_dir_name][data_name] = {"type": "data", + "variant": variant_index, + "tuning": tuning_index, + "data": [] } + + data[sweep_dir_name][data_name]["data"].append(val) + + else: + raise NameError("Unknown kind {} type {}".format(kind, kind_meta["type"])) + + return data + +def plot_data(outputfile_name, ykind): + print(outputfile_name, ykind) + + if not ykind in g_kinds: + raise NameError("Unknown kind {}".format(ykind)) + + ylabel = ykind + yscale = "log" + ylim = None + + xkind = "Problem size" + xlabel = xkind + xscale = "log" + xlim = None + + for kernel_index in range(0, g_num_kernels): + kernel_name = g_kernels[kernel_index] + + xaxes = get_run_size_data(xkind, kernel_index) + yaxes = get_run_size_data(ykind, kernel_index) + + for sweep_index in range(0, g_num_sweeps): + sweep_dir_name = g_sweeps[sweep_index] + + if not sweep_dir_name in xaxes: + raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) + + for data_name, ydata in yaxes[sweep_dir_name].items(): + + yname = "{} {}".format(data_name, sweep_dir_name) + yformat = "-" + ycolor = (0.0, 0.0, 0.0, 1.0) + yaxis = ydata["data"] + + if ydata["type"] == "data": + variant_index = ydata["variant"] + tuning_index = ydata["tuning"] + ycolor = g_variant_colors[variant_index] + # yformat = g_tuning_formats[tuning_index] + + if data_name in xaxes[sweep_dir_name]: + xaxis = xaxes[sweep_dir_name][data_name]["data"] + elif xkind in xaxes[sweep_dir_name]: + xaxis = xaxes[sweep_dir_name][xkind]["data"] + else: + raise NameError("Unknown xaxis for {}".format(data_name)) + + plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) + + fname = "{}_{}".format(outputfile_name, kernel_name) + gname = "{}\n{}".format(kernel_name, kernel_name) + + if ylabel: + plt.ylabel(ylabel) + if yscale: + plt.yscale(yscale) + if ylim: + plt.ylim(ylim) + + if xlabel: + plt.xlabel(xlabel) + if xscale: + plt.xscale(xscale) + if xlim: + plt.xlim(xlim) + + plt.title(gname) + plt.legend() + plt.grid(True) + + plt.savefig(fname, dpi=150.0) + plt.clf() + +def print_data(kind): + print(kind) + + if kind in g_info: + kind_info = g_info[kind] + for sweep_dir_name, sweep_info in kind_info.items(): + print(sweep_dir_name) + for run_size, run_info in sweep_info.items(): + print(run_size) + for kernel_index, val in run_info.items(): + kernel_name = g_kernels[kernel_index] + print(kernel_name, val) + + if kind in g_data: + kind_data = g_data[kind] + for sweep_dir_name, sweep_data in kind_data.items(): + print(sweep_dir_name) + for run_size, run_data in sweep_data.items(): + print(run_size) + for kernel_index, kernel_data in run_data.items(): + kernel_name = g_kernels[kernel_index] + for variant_index, variant_data in kernel_data.items(): + variant_name = g_variants[variant_index] + for tuning_index, val in variant_data.items(): + tuning_name = g_tunings[tuning_index] + print(kernel_name, variant_name, tuning_name, val) + +def main(argv): + sweep_dir_paths = [] + outputfile = "output.png" + help_string = "sweep_graph.py -o " + runinfo_filename = g_runinfo_filename + timing_filename = g_timing_filename + print_kinds = [] + graph_kinds = [] + try: + opts, args = getopt.getopt(argv,"h:o:p:g:",["help","output=","print=","graph="]) + except getopt.GetoptError: + print(help_string) + sys.exit(2) + for opt, arg in opts: + if opt in ("-h", "--help"): + print(help_string) + sys.exit() + elif opt in ("-o", "--output"): + outputfile = arg + elif opt in ("-p", "--print"): + print_kinds.append(arg) + elif opt in ("-g", "--graph"): + graph_kinds.append(arg) + for arg in args: + sweep_dir_paths.append(arg) + + print("Input directories are \"{0}\"".format(sweep_dir_paths)) + print("Output file is \"{0}\"".format(outputfile)) + + for sweep_dir_path in sweep_dir_paths: + sweep_dir_name = os.path.basename(sweep_dir_path) + # print(sweep_dir_name, sweep_dir_path) + + got_something = False + + for r0,sweep_subdir_names,f0 in os.walk(sweep_dir_path): + for sweep_subdir_name in sweep_subdir_names: + sweep_subdir_path = os.path.join(sweep_dir_path, sweep_subdir_name) + # print(sweep_dir_name, sweep_subdir_path) + + try: + run_size = get_size_from_dir_name(sweep_subdir_name) + + if not run_size in g_run_sizes: + global g_num_run_sizes + g_run_sizes[g_num_run_sizes] = run_size + g_num_run_sizes += 1 + + sweep_subdir_timing_file_path = "" + sweep_subdir_runinfo_file_path = "" + for r1,d1,sweep_subdir_file_names in os.walk(sweep_subdir_path): + for sweep_subdir_file_name in sweep_subdir_file_names: + sweep_subdir_file_path = os.path.join(sweep_subdir_path, sweep_subdir_file_name) + if sweep_subdir_file_name == timing_filename: + sweep_subdir_timing_file_path = sweep_subdir_file_path + elif sweep_subdir_file_name == runinfo_filename: + sweep_subdir_runinfo_file_path = sweep_subdir_file_path + + if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": + # print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) + read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size) + read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size) + got_something = True + except ValueError: + print("Couldn't get run size from \"{0}\"".format(sweep_subdir_name)) + pass # could not convert data to int + + if got_something: + global g_num_sweeps + if sweep_dir_name in g_sweeps: + raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) + g_sweeps[g_num_sweeps] = sweep_dir_name + g_num_sweeps += 1 + + kinds_string = "" + for kind in g_kinds: + kinds_string += ", {}".format(kind) + print("kinds") + print(" {}".format(kinds_string[2:])) + + run_sizes_string = "" + for v in range(0, g_num_run_sizes): + run_sizes_string += ", {}".format(g_run_sizes[v]) + print("run_sizes") + print(" {}".format(run_sizes_string[2:])) + + kernel_string = "" + for v in range(0, g_num_kernels): + kernel_string += ", {}".format(g_kernels[v]) + print("kernels") + print(" {}".format(kernel_string[2:])) + + variant_string = "" + for v in range(0, g_num_variants): + variant_string += ", {}".format(g_variants[v]) + print("variants") + print(" {}".format(variant_string[2:])) + + tuning_string = "" + for v in range(0, g_num_tunings): + tuning_string += ", {}".format(g_tunings[v]) + print("tunings") + print(" {}".format(tuning_string[2:])) + + for kind in print_kinds: + print_data(kind) + + for kind in graph_kinds: + plot_data(outputfile, kind) + +if __name__ == "__main__": + main(sys.argv[1:]) From 1b63fe2a0967318f6536a0056245056557239374 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 9 May 2022 15:54:31 -0700 Subject: [PATCH 024/174] Add more help in toss4 cray mvapich amdclang script --- scripts/lc-builds/toss4_cray-mpich_amdclang.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/lc-builds/toss4_cray-mpich_amdclang.sh b/scripts/lc-builds/toss4_cray-mpich_amdclang.sh index 2416c9cb0..d5b4bd334 100755 --- a/scripts/lc-builds/toss4_cray-mpich_amdclang.sh +++ b/scripts/lc-builds/toss4_cray-mpich_amdclang.sh @@ -96,10 +96,11 @@ echo echo " module unload rocm" echo " srun -n1 make" echo -echo " Please note that cray-mpich requires libmodules.so.1 from cce to run." +echo " Please note that cray-mpich requires libmodules.so from cce and " +echo " libpgmath.so from llvm to run." echo " Until this is handled transparently in the build system you may add " echo " cce to your LD_LIBRARY_PATH." echo -echo " export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/tce/packages/cce-tce/cce-13.0.2/cce/x86_64/lib/" +echo " export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/tce/packages/cce-tce/cce-13.0.2/cce/x86_64/lib/:/usr/tce/packages/rocmcc-tce/rocmcc-5.1.0/llvm/lib/" echo echo "***********************************************************************" From eb54c42868a157db0238a0a1ed649666663283b7 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 9 May 2022 16:28:28 -0700 Subject: [PATCH 025/174] Add names to sweep_size script This helps with graphing as they are used in naming graphs --- scripts/sweep_size.sh | 54 +++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/scripts/sweep_size.sh b/scripts/sweep_size.sh index 388390148..f1b45ec19 100755 --- a/scripts/sweep_size.sh +++ b/scripts/sweep_size.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash +NAMES=() EXECUTABLES=() SIZE_MIN=10000 SIZE_MAX=1000000 @@ -8,20 +9,20 @@ SIZE_RATIO=2 ################################################################################ # # Usage: -# srun -n1 --exclusive sweep.sh -x raja-perf.exe [-- ] +# srun -n1 --exclusive sweep.sh -x my_run raja-perf.exe [-- ] # # Parse any args for this script and consume them using shift # leave the raja perf arguments if any for later use # # Examples: -# lalloc 1 lrun -n1 sweep.sh -x raja-perf.exe -- -# # run a sweep of default problem sizes with executable `raja-perf.exe` -# # with args `args` +# lalloc 1 lrun -n1 sweep.sh -x my_run raja-perf.exe -- +# # run a sweep of default problem sizes in dir my_run with +# # executable `raja-perf.exe` with args `args` # -# srun -n1 --exclusive sweep.sh -x raja-perf.exe --size-min 1000 +# srun -n1 --exclusive sweep.sh -x my_run raja-perf.exe --size-min 1000 # --size-max 10000 --size-ratio 2 -- # # run a sweep of problem sizes 1K to 10K with ratio 2 (1K, 2K, 4K, 8K) -# # with executable `raja-perf.exe` with args `args` +# # in dir my_run with executable `raja-perf.exe` with args `args` # ################################################################################ while [ "$#" -gt 0 ]; do @@ -30,8 +31,20 @@ while [ "$#" -gt 0 ]; do if [[ "x$1" == "x-x" || "x$1" == "x--executable" ]]; then - EXECUTABLES+=("$2") - shift + if [ "$#" -lt 3 ]; do + echo "Expected 2 args to $1" 1>&2 + exit 1 + elif [[ "$2" =~ ^\-.* ]]; do + echo "Expected 2 args to $1: $2" 1>&2 + exit 1 + elif [[ "$3" =~ ^\-.* ]]; do + echo "Expected 2 args to $1: $2 $3" 1>&2 + exit 1 + fi + + NAMES+=("$2") + EXECUTABLES+=("$3") + shift 2 elif [[ "x$1" == "x-m" || "x$1" == "x--size-min" ]]; then @@ -68,7 +81,8 @@ while [ "$#" -gt 0 ]; do done -echo "Running sweep with executables: ${EXECUTABLES[@]}" +echo "Running sweeps with names: ${NAMES[@]}" +echo " and executables: ${EXECUTABLES[@]}" echo "Sweeping from size $SIZE_MIN to $SIZE_MAX with ratio $SIZE_RATIO" echo "extra args to executables are: $@" @@ -93,27 +107,21 @@ if [[ "$SIZE_MIN" -gt "$SIZE_MAX" ]]; then exit 1 fi -EXEC_I=0 -for exec in "${EXECUTABLES[@]}"; do - - echo "$exec" - - mkdir "RAJAPerf_$EXEC_I" || exit 1 - - let EXEC_I=EXEC_I+1 - -done - SIZE="$SIZE_MIN" while [[ "$SIZE" -le "$SIZE_MAX" ]]; do EXEC_I=0 - for exec in "${EXECUTABLES[@]}"; do + EXEC_N=${#EXECUTABLES[@]} + while [[ "$EXEC_I" -lt "$EXEC_N" ]]; do + + name="${NAMES[EXEC_I]}" + exec="${EXECUTABLES[EXEC_I]}" + echo "${name}: ${exec}" SIZE_DIR="$(printf "SIZE_%09d" $SIZE)" - OUT_DIR="RAJAPerf_$EXEC_I/$SIZE_DIR" + OUT_DIR="${name}/$SIZE_DIR" - mkdir "${OUT_DIR}" || exit 1 + mkdir -p "${OUT_DIR}" || exit 1 echo "$exec -od ${OUT_DIR} --size $SIZE $@" | tee -a "${OUT_DIR}/raja-perf-sweep.txt" $exec -od ${OUT_DIR} --size $SIZE $@ &>> "${OUT_DIR}/raja-perf-sweep.txt" From d8afe7db33ea703d13a2008e86de6e6a3b4a7271 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 9 May 2022 16:31:19 -0700 Subject: [PATCH 026/174] Remove extra text in graph names --- scripts/sweep_graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 294c7bde9..70d89e836 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -548,7 +548,7 @@ def plot_data(outputfile_name, ykind): plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) fname = "{}_{}".format(outputfile_name, kernel_name) - gname = "{}\n{}".format(kernel_name, kernel_name) + gname = "{}".format(kernel_name) if ylabel: plt.ylabel(ylabel) From 29a3873ccf7ff0d24103deb87d7a8acf00110c7f Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 08:47:57 -0700 Subject: [PATCH 027/174] Change color factors to avoid saturating base --- scripts/sweep_graph.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 70d89e836..576efa2c6 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -37,9 +37,9 @@ def color_mul(t, factor): def make_color_tuple(r, g, b): return (r/255.0, g/255.0, b/255.0) -g_color_base_factor = 1.3 -g_color_lambda_factor = 1.0 -g_color_raja_factor = 0.7 +g_color_base_factor = 1.0 +g_color_lambda_factor = 0.7 +g_color_raja_factor = 0.4 g_color_seq = normalize_color_tuple(make_color_tuple(204, 119, 34)) # ocre g_color_omp = normalize_color_tuple(make_color_tuple(0, 115, 125)) # omp teal g_color_ompt = normalize_color_tuple(make_color_tuple(125, 10, 0)) # omp teal compliment From 93faac193f5d18ab997d3e9bdf91bc4a64cf97cc Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 08:48:12 -0700 Subject: [PATCH 028/174] Fix typos in sweep_size --- scripts/sweep_size.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/sweep_size.sh b/scripts/sweep_size.sh index f1b45ec19..f524d49dd 100755 --- a/scripts/sweep_size.sh +++ b/scripts/sweep_size.sh @@ -31,13 +31,13 @@ while [ "$#" -gt 0 ]; do if [[ "x$1" == "x-x" || "x$1" == "x--executable" ]]; then - if [ "$#" -lt 3 ]; do + if [ "$#" -lt 3 ]; then echo "Expected 2 args to $1" 1>&2 exit 1 - elif [[ "$2" =~ ^\-.* ]]; do + elif [[ "$2" =~ ^\-.* ]]; then echo "Expected 2 args to $1: $2" 1>&2 exit 1 - elif [[ "$3" =~ ^\-.* ]]; do + elif [[ "$3" =~ ^\-.* ]]; then echo "Expected 2 args to $1: $2 $3" 1>&2 exit 1 fi From 55ed8bef9cfaa58cd625e2e0e4053681c38bb314 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 08:49:27 -0700 Subject: [PATCH 029/174] Add simple throughput to graph script --- scripts/sweep_graph.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 576efa2c6..55a3ea8fe 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -153,6 +153,22 @@ def make_color_tuple(r, g, b): "args": ["time/kernel(s)"], "func": lambda tpi: tpi * 1000000000.0 }, + "throughput(Problem size/s)": { "type": "computed", + "args": ["time/rep(s)", "Problem size"], + "func": lambda tpr, ps: ps / tpr }, + "throughput(KProblem size/s)": { "type": "computed", + "args": ["throughput(Problem size/s)"], + "func": lambda thr: thr / 1000.0 }, + "throughput(MProblem size/s)": { "type": "computed", + "args": ["throughput(Problem size/s)"], + "func": lambda thr: thr / 1000000.0 }, + "throughput(GProblem size/s)": { "type": "computed", + "args": ["throughput(Problem size/s)"], + "func": lambda thr: thr / 1000000000.0 }, + "throughput(TProblem size/s)": { "type": "computed", + "args": ["throughput(Problem size/s)"], + "func": lambda thr: thr / 1000000000000.0 }, + "bandwidth(B/s)": { "type": "computed", "args": ["time/rep(s)", "Bytes/rep"], "func": lambda tpr, bpr: bpr / tpr }, From 699ff16a53e3422749ad98d69f5a441a1d24f4ad Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 08:50:16 -0700 Subject: [PATCH 030/174] Add more formatting to graphs This helps differentiate different tunings and sweeps --- scripts/sweep_graph.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 55a3ea8fe..5e2c71001 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -65,6 +65,18 @@ def make_color_tuple(r, g, b): "Lambda_HIP": {"color": color_mul(g_color_hip, g_color_lambda_factor)}, "RAJA_HIP": {"color": color_mul(g_color_hip, g_color_raja_factor)} } +g_known_tunings = { "default": {"format": "-"}, + "block_25": {"format": "-"}, + "block_32": {"format": ":"}, + "block_64": {"format": "-."}, + "block_128": {"format": "--"}, + "block_256": {"format": "-"}, + "block_512": {"format": "-."}, + "block_1024": {"format": "-"}, + "cub": {"format": ":"}, + "rocprim": {"format": ":"} + } +g_markers = [ "o", "s", "+", "x", "*", "d", "h", "p", "8" ] g_timing_filename = "RAJAPerf-timing-Minimum.csv" g_runinfo_filename = "RAJAPerf-kernels.csv" @@ -217,6 +229,7 @@ def make_color_tuple(r, g, b): g_num_sweeps = 0 g_sweeps = {} +g_sweep_markers = {} g_num_run_sizes = 0 g_run_sizes = {} @@ -230,7 +243,7 @@ def make_color_tuple(r, g, b): g_num_tunings = 0 g_tunings = {} -g_tuning_colors = {} +g_tuning_formats = {} def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) @@ -344,9 +357,13 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): g_num_tunings += 1 g_tunings[tuning_name] = tuning_index g_tunings[tuning_index] = tuning_name - tuning_color = g_variant_colors[c_to_variant_index[c]] - g_tuning_colors[tuning_name] = tuning_color - g_tuning_colors[tuning_index] = tuning_color + if tuning_name in g_known_tunings: + tuning_format = g_known_tunings[tuning_name]["format"] + g_tuning_formats[tuning_name] = tuning_format + g_tuning_formats[tuning_index] = tuning_format + else: + print("Unknown tuning {0}".format(tuning_name)) + sys.exit(1) c_to_tuning_index[c] = g_tunings[tuning_name] else: print("Unknown row {0}".format(row)) @@ -537,6 +554,7 @@ def plot_data(outputfile_name, ykind): for sweep_index in range(0, g_num_sweeps): sweep_dir_name = g_sweeps[sweep_index] + sweep_marker = g_sweep_markers[sweep_index] if not sweep_dir_name in xaxes: raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) @@ -544,7 +562,7 @@ def plot_data(outputfile_name, ykind): for data_name, ydata in yaxes[sweep_dir_name].items(): yname = "{} {}".format(data_name, sweep_dir_name) - yformat = "-" + yformat = "{}-".format(sweep_marker) ycolor = (0.0, 0.0, 0.0, 1.0) yaxis = ydata["data"] @@ -552,7 +570,7 @@ def plot_data(outputfile_name, ykind): variant_index = ydata["variant"] tuning_index = ydata["tuning"] ycolor = g_variant_colors[variant_index] - # yformat = g_tuning_formats[tuning_index] + yformat = "{}{}".format(sweep_marker, g_tuning_formats[tuning_index]) if data_name in xaxes[sweep_dir_name]: xaxis = xaxes[sweep_dir_name][data_name]["data"] @@ -686,6 +704,9 @@ def main(argv): if sweep_dir_name in g_sweeps: raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) g_sweeps[g_num_sweeps] = sweep_dir_name + if g_num_sweeps >= len(g_markers): + raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) + g_sweep_markers[g_num_sweeps] = g_markers[g_num_sweeps] g_num_sweeps += 1 kinds_string = "" From 2b8b5cece70ff8b861353f2159e261a76e414dfc Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 12:01:05 -0700 Subject: [PATCH 031/174] Add args to include or exclude kernels from graphing --- scripts/sweep_graph.py | 94 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 18 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 5e2c71001..02792a7bc 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -236,6 +236,8 @@ def make_color_tuple(r, g, b): g_num_kernels = 0 g_kernels = {} +g_include_kernels = {} +g_exclude_kernels = {} g_num_variants = 0 g_variants = {} @@ -289,13 +291,15 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): kernel_name = row[0].strip() if kernel_name in g_kernels: kernel_index = g_kernels[kernel_name] - else: + elif (len(g_include_kernels) == 0 or kernel_name in g_include_kernels) and (not kernel_name in g_exclude_kernels): # add kernel to global list global g_num_kernels kernel_index = g_num_kernels g_num_kernels += 1 g_kernels[kernel_name] = kernel_index g_kernels[kernel_index] = kernel_name + else: + continue # skip this kernel for c in range(1, len(row)): info_kind = c_to_info_kinds[c] @@ -374,7 +378,7 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if kernel_name in g_kernels: kernel_index = g_kernels[kernel_name] else: - raise NameError("Unknown Kernel {0}".format(kernel_name)) + continue # skip kernel g_data[data_kind][sweep_dir_name][run_size][kernel_index] = {} for c in range(1, len(row)): @@ -640,23 +644,77 @@ def main(argv): timing_filename = g_timing_filename print_kinds = [] graph_kinds = [] - try: - opts, args = getopt.getopt(argv,"h:o:p:g:",["help","output=","print=","graph="]) - except getopt.GetoptError: - print(help_string) - sys.exit(2) - for opt, arg in opts: - if opt in ("-h", "--help"): + + i = 0 + while i < len(argv): + opt = argv[i] + if len(opt) == 0: print(help_string) - sys.exit() - elif opt in ("-o", "--output"): - outputfile = arg - elif opt in ("-p", "--print"): - print_kinds.append(arg) - elif opt in ("-g", "--graph"): - graph_kinds.append(arg) - for arg in args: - sweep_dir_paths.append(arg) + sys.exit(2) + elif opt[0] == "-": + + # no arg options + if opt in ("-h", "--help"): + print(help_string) + sys.exit() + + handle_num = 0 + handle_arg = None + # single arg options + if opt in ("-o", "--output"): + handle_num = 1 + def fo(arg): + outputfile = arg + handle_arg = fo + elif opt in ("-p", "--print"): + handle_num = 1 + def p(arg): + print_kinds.append(arg) + handle_arg = p + elif opt in ("-g", "--graph"): + handle_num = 1 + def fg(arg): + graph_kinds.append(arg) + handle_arg = fg + # multi arg options + elif opt in ("-k", "--kernels"): + handle_num = -1 + def fk(arg): + g_include_kernels[arg] = arg + handle_arg = fk + elif opt in ("-ek", "--exclude-kernels"): + handle_num = -1 + def fek(arg): + g_exclude_kernels[arg] = arg + handle_arg = fek + + if handle_num == 0: + print(help_string) + sys.exit(2) + + elif handle_num > 0: + if not i+handle_num < len(argv): + print("Missing option to {}".format(opt)) + sys.exit(2) + for h in range(1, handle_num+1): + arg = argv[i+h] + if arg[0] == "-": + print("Missing option to {}".format(opt)) + sys.exit(2) + handle_arg(arg) + i += handle_num + + else: + while i+1 < len(argv): + arg = argv[i+1] + if arg[0] == "-": + break + handle_arg(arg) + i += 1 + + else: + sweep_dir_paths.append(opt) + i += 1 print("Input directories are \"{0}\"".format(sweep_dir_paths)) print("Output file is \"{0}\"".format(outputfile)) From c256961c19e01119f8e2e65a7d4f00a891a391cd Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 12:01:26 -0700 Subject: [PATCH 032/174] Avoid recounting run sizes --- scripts/sweep_graph.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 02792a7bc..ecc33d223 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -736,6 +736,7 @@ def fek(arg): if not run_size in g_run_sizes: global g_num_run_sizes g_run_sizes[g_num_run_sizes] = run_size + g_run_sizes[run_size] = g_num_run_sizes g_num_run_sizes += 1 sweep_subdir_timing_file_path = "" From 85b3d2c7fa44e2530545250584396c8828409227 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 12:01:37 -0700 Subject: [PATCH 033/174] fixup graph naming --- scripts/sweep_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index ecc33d223..b4f6abbb1 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -585,7 +585,7 @@ def plot_data(outputfile_name, ykind): plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) - fname = "{}_{}".format(outputfile_name, kernel_name) + fname = "{}_{}.png".format(outputfile_name, kernel_name) gname = "{}".format(kernel_name) if ylabel: @@ -638,7 +638,7 @@ def print_data(kind): def main(argv): sweep_dir_paths = [] - outputfile = "output.png" + outputfile = "graph" help_string = "sweep_graph.py -o " runinfo_filename = g_runinfo_filename timing_filename = g_timing_filename From 41983b17fe4e8bf1acb6e3bd18199e226af4acab Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 10 May 2022 12:14:04 -0700 Subject: [PATCH 034/174] Add options to include/exclude variants and tunings --- scripts/sweep_graph.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index b4f6abbb1..dcde0e607 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -242,10 +242,14 @@ def make_color_tuple(r, g, b): g_num_variants = 0 g_variants = {} g_variant_colors = {} +g_include_variants = {} +g_exclude_variants = {} g_num_tunings = 0 g_tunings = {} g_tuning_formats = {} +g_include_tunings = {} +g_exclude_tunings = {} def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) @@ -336,7 +340,7 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): variant_name = row[c].strip() if variant_name in g_variants: pass - else: + elif (len(g_include_variants) == 0 or variant_name in g_include_variants) and (not variant_name in g_exclude_variants): global g_num_variants variant_index = g_num_variants g_num_variants += 1 @@ -349,13 +353,16 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): else: print("Unknown variant {0}".format(variant_name)) sys.exit(1) + else: + g_variants[variant_name] = -1 + c_to_variant_index[c] = g_variants[variant_name] elif len(c_to_tuning_index) == 0: for c in range(1, len(row)): tuning_name = row[c].strip() if tuning_name in g_tunings: pass - else: + elif (len(g_include_tunings) == 0 or tuning_name in g_include_tunings) and (not tuning_name in g_exclude_tunings): global g_num_tunings tuning_index = g_num_tunings g_num_tunings += 1 @@ -368,6 +375,8 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): else: print("Unknown tuning {0}".format(tuning_name)) sys.exit(1) + else: + g_tunings[tuning_name] = -1 c_to_tuning_index[c] = g_tunings[tuning_name] else: print("Unknown row {0}".format(row)) @@ -384,6 +393,8 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): for c in range(1, len(row)): variant_index = c_to_variant_index[c] tuning_index = c_to_tuning_index[c] + if variant_index < 0 or tuning_index < 0: + continue # ignore data try: val = float(row[c].strip()) # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) @@ -687,6 +698,26 @@ def fk(arg): def fek(arg): g_exclude_kernels[arg] = arg handle_arg = fek + elif opt in ("-v", "--variants"): + handle_num = -1 + def fv(arg): + g_include_variants[arg] = arg + handle_arg = fv + elif opt in ("-ev", "--exclude-variants"): + handle_num = -1 + def fev(arg): + g_exclude_variants[arg] = arg + handle_arg = fev + elif opt in ("-t", "--tunings"): + handle_num = -1 + def ft(arg): + g_include_tunings[arg] = arg + handle_arg = ft + elif opt in ("-et", "--exclude-tunings"): + handle_num = -1 + def fet(arg): + g_exclude_tunings[arg] = arg + handle_arg = fet if handle_num == 0: print(help_string) From 074c20861279a81e43943e660146ad93a027f902 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Wed, 11 May 2022 09:22:17 -0700 Subject: [PATCH 035/174] Fix issue with repeated run sizes --- scripts/sweep_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index dcde0e607..31ef09fe9 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -764,10 +764,10 @@ def fet(arg): try: run_size = get_size_from_dir_name(sweep_subdir_name) - if not run_size in g_run_sizes: + if not str(run_size) in g_run_sizes: global g_num_run_sizes g_run_sizes[g_num_run_sizes] = run_size - g_run_sizes[run_size] = g_num_run_sizes + g_run_sizes[str(run_size)] = g_num_run_sizes g_num_run_sizes += 1 sweep_subdir_timing_file_path = "" From 63e1ffd415a8cbf65d484eae6b5785488c420afc Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Wed, 11 May 2022 09:22:36 -0700 Subject: [PATCH 036/174] Add print of sweeps --- scripts/sweep_graph.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 31ef09fe9..a65fe44cb 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -805,6 +805,12 @@ def fet(arg): print("kinds") print(" {}".format(kinds_string[2:])) + sweeps_string = "" + for v in range(0, g_num_sweeps): + sweeps_string += ", {}".format(g_sweeps[v]) + print("sweeps") + print(" {}".format(sweeps_string[2:])) + run_sizes_string = "" for v in range(0, g_num_run_sizes): run_sizes_string += ", {}".format(g_run_sizes[v]) From ced724c8289e6c31b154bb639fbc9710d7ac0429 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Fri, 20 May 2022 10:04:05 -0700 Subject: [PATCH 037/174] Refactor sweep_graph to use some classes --- scripts/sweep_graph.py | 800 +++++++++++++++++++++++------------------ 1 file changed, 456 insertions(+), 344 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index a65fe44cb..910376112 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -7,6 +7,7 @@ import csv import matplotlib.pyplot as plt + def normalize_color_tuple(t): len_t = 0.0 for i in range(0, len(t)): @@ -37,6 +38,7 @@ def color_mul(t, factor): def make_color_tuple(r, g, b): return (r/255.0, g/255.0, b/255.0) + g_color_base_factor = 1.0 g_color_lambda_factor = 0.7 g_color_raja_factor = 0.4 @@ -82,174 +84,235 @@ def make_color_tuple(r, g, b): g_runinfo_filename = "RAJAPerf-kernels.csv" g_timing_file_kind = "time(s)" -# multi-dimensional array structured like this -# kind - time, bandwidth, etc (["info"]) -# directory name - platform, compiler, etc -# run size - problem size, for g_run_sizes -# kernel index - for g_kernels -g_info = { "Problem size": { }, - "Reps": { }, - "Iterations/rep": { }, - "Kernels/rep": { }, - "Bytes/rep": { }, - "FLOPS/rep": { } - } - -# multi-dimensional array structured like this -# kind - time, bandwidth, etc (["data"]) -# directory name - platform, compiler, etc -# run size - problem size, for g_run_sizes -# kernel index - for g_kernels -# variant index - for g_variants -# tuning index - for g_tunings -g_data = { } - -g_model_kind = "time(s)" - -# has info derivable from first kind "time(s)" which is read from files -g_kinds = { "Problem size": { "type": "info" }, - "Reps": { "type": "info" }, - "Iterations/rep": { "type": "info" }, - "Kernels/rep": { "type": "info" }, - "Bytes/rep": { "type": "info" }, - "FLOPS/rep": { "type": "info" }, - - "time(s)" : { "type": "data" }, - - "time(ms)": { "type": "computed", - "args": ["time(s)"], - "func": lambda t: t * 1000.0 }, - "time(us)": { "type": "computed", - "args": ["time(s)"], - "func": lambda t: t * 1000000.0 }, - "time(ns)": { "type": "computed", - "args": ["time(s)"], - "func": lambda t: t * 1000000000.0 }, - - "time/rep(s)": { "type": "computed", - "args": ["time(s)", "Reps"], - "func": lambda t, r: t / r }, - "time/rep(ms)": { "type": "computed", - "args": ["time/rep(s)"], - "func": lambda tpr: tpr * 1000.0 }, - "time/rep(us)": { "type": "computed", - "args": ["time/rep(s)"], - "func": lambda tpr: tpr * 1000000.0 }, - "time/rep(ns)": { "type": "computed", - "args": ["time/rep(s)"], - "func": lambda tpr: tpr * 1000000000.0 }, - - "time/it(s)": { "type": "computed", - "args": ["time/rep(s)", "Iterations/rep"], - "func": lambda tpr, ipr: tpr / ipr }, - "time/it(ms)": { "type": "computed", - "args": ["time/it(s)"], - "func": lambda tpi: tpi * 1000.0 }, - "time/it(us)": { "type": "computed", - "args": ["time/it(s)"], - "func": lambda tpi: tpi * 1000000.0 }, - "time/it(ns)": { "type": "computed", - "args": ["time/it(s)"], - "func": lambda tpi: tpi * 1000000000.0 }, - - "time/kernel(s)": { "type": "computed", - "args": ["time/rep(s)", "Kernels/rep"], - "func": lambda tpr, kpr: tpr / kpr }, - "time/kernel(ms)": { "type": "computed", - "args": ["time/kernel(s)"], - "func": lambda tpi: tpi * 1000.0 }, - "time/kernel(us)": { "type": "computed", - "args": ["time/kernel(s)"], - "func": lambda tpi: tpi * 1000000.0 }, - "time/kernel(ns)": { "type": "computed", - "args": ["time/kernel(s)"], - "func": lambda tpi: tpi * 1000000000.0 }, - - "throughput(Problem size/s)": { "type": "computed", - "args": ["time/rep(s)", "Problem size"], - "func": lambda tpr, ps: ps / tpr }, - "throughput(KProblem size/s)": { "type": "computed", - "args": ["throughput(Problem size/s)"], - "func": lambda thr: thr / 1000.0 }, - "throughput(MProblem size/s)": { "type": "computed", - "args": ["throughput(Problem size/s)"], - "func": lambda thr: thr / 1000000.0 }, - "throughput(GProblem size/s)": { "type": "computed", - "args": ["throughput(Problem size/s)"], - "func": lambda thr: thr / 1000000000.0 }, - "throughput(TProblem size/s)": { "type": "computed", - "args": ["throughput(Problem size/s)"], - "func": lambda thr: thr / 1000000000000.0 }, - - "bandwidth(B/s)": { "type": "computed", - "args": ["time/rep(s)", "Bytes/rep"], - "func": lambda tpr, bpr: bpr / tpr }, - "bandwidth(Kb/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1000.0 }, - "bandwidth(MB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1000000.0 }, - "bandwidth(GB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1000000000.0 }, - "bandwidth(TB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1000000000000.0 }, - - "bandwidth(B/s)": { "type": "computed", - "args": ["time/rep(s)", "Bytes/rep"], - "func": lambda tpr, bpr: bpr / tpr }, - "bandwidth(Kib/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1024.0 }, - "bandwidth(MiB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1048576.0 }, - "bandwidth(GiB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1073741824.0 }, - "bandwidth(TiB/s)": { "type": "computed", - "args": ["bandwidth(B/s)"], - "func": lambda bps: bps / 1099511627776.0 }, - - "FLOPS": { "type": "computed", - "args": ["time/rep(s)", "FLOPS/rep"], - "func": lambda tpr, fpr: fpr / tpr }, - "MFLOPS": { "type": "computed", - "args": ["FLOPS"], - "func": lambda fps: fps / 1000.0 }, - "GFLOPS": { "type": "computed", - "args": ["FLOPS"], - "func": lambda fps: fps / 1000000.0 }, - "TFLOPS": { "type": "computed", - "args": ["FLOPS"], - "func": lambda fps: fps / 1000000000.0 }, - } - -g_num_sweeps = 0 -g_sweeps = {} -g_sweep_markers = {} - -g_num_run_sizes = 0 -g_run_sizes = {} - -g_num_kernels = 0 -g_kernels = {} -g_include_kernels = {} -g_exclude_kernels = {} - -g_num_variants = 0 -g_variants = {} -g_variant_colors = {} -g_include_variants = {} -g_exclude_variants = {} - -g_num_tunings = 0 -g_tunings = {} -g_tuning_formats = {} -g_include_tunings = {} -g_exclude_tunings = {} + +def avg(vals): + avg_val = 0 + for val in vals: + avg_val += val + avg_val /= len(vals) + return avg_val + +def stddev(vals): + avg_val = avg(vals) + stddev_val = 0 + for val in vals: + stddev_val += (val - avg_val)*(val - avg_val) + stddev_val /= len(vals) + stddev_val = math.sqrt(stddev_val) + return stddev_val + + +class Data: + + num_sweeps = 0 + sweeps = {} + sweep_markers = {} + + num_run_sizes = 0 + run_sizes = {} + + num_kernels = 0 + kernels = {} + include_kernels = {} + exclude_kernels = {} + + num_variants = 0 + variants = {} + variant_colors = {} + include_variants = {} + exclude_variants = {} + + num_tunings = 0 + tunings = {} + tuning_formats = {} + include_tunings = {} + exclude_tunings = {} + + # multi-dimensional array structured like this + # kind - time, bandwidth, etc (["info"]) + # directory name - platform, compiler, etc + # run size - problem size, for run_sizes + # kernel index - for kernels + info = { "Problem size": { }, + "Reps": { }, + "Iterations/rep": { }, + "Kernels/rep": { }, + "Bytes/rep": { }, + "FLOPS/rep": { } + } + num_info_axes = 3 + info_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", + "run_size": 1, 1: "run_size", + "kernel_index": 2, 2: "kernel_index", } + + # multi-dimensional array structured like this + # kind - time, bandwidth, etc (["data"]) + # directory name - platform, compiler, etc + # run size - problem size, for run_sizes + # kernel index - for kernels + # variant index - for variants + # tuning index - for tunings + data = { } + num_data_axes = 5 + data_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", + "run_size": 1, 1: "run_size", + "kernel_index": 2, 2: "kernel_index", + "variant_index": 3, 3: "variant_index", + "tuning_index": 4, 4: "tuning_index", } + + # multi-dimensional array structured like data but missing some dimensions + # kind - time, bandwidth, etc (["data"]) + # directory name - platform, compiler, etc + # run size - problem size, for run_sizes + # kernel index - for kernels + # variant index - for variants + # tuning index - for tunings + reduced = { } + run_size_reduced_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", + "kernel_index": 1, 1: "kernel_index", + "variant_index": 2, 2: "variant_index", + "tuning_index": 3, 3: "tuning_index", } + + model_kind = "time(s)" + + def DataTreeIterator0(data_tree): + assert(data_tree.num_axes == 0) + yield data_tree.data + + def DataTreeIterator1(data_tree): + assert(data_tree.num_axes == 1) + assert(data_tree.data) + for k0 in data_tree.data.keys(): + yield (k0,) + + def DataTreeIterator2(data_tree): + assert(data_tree.num_axes == 2) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1 in v0.keys(): + yield (k0, k1,) + + def DataTreeIterator3(data_tree): + assert(data_tree.num_axes == 3) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2 in v1.keys(): + yield (k0, k1, k2,) + + def DataTreeIterator4(data_tree): + assert(data_tree.num_axes == 4) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3 in v2.keys(): + yield (k0, k1, k2, k3,) + + def DataTreeIterator5(data_tree): + assert(data_tree.num_axes == 5) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + for k4 in v3.keys(): + yield (k0, k1, k2, k3, k4,) + + class DataTree: + + def __init__(self, kind, type, axes, args=None, func=None): + self.kind = kind + self.type = type + self.axes = axes + self.num_axes = len(self.axes) / 2 + + self.args = args + self.func = func + + if self.args: + self.num_args = len(self.args) / 2 + + self.data = None + + def __iter__(self): + if self.num_axes == 0: + return DataTreeIterator0(self) + elif self.num_axes == 1: + return DataTreeIterator1(self) + elif self.num_axes == 2: + return DataTreeIterator2(self) + elif self.num_axes == 3: + return DataTreeIterator3(self) + elif self.num_axes == 4: + return DataTreeIterator4(self) + elif self.num_axes == 5: + return DataTreeIterator5(self) + else: + raise ValueError + + + # has info derivable from first kind "time(s)" which is read from files + kinds = { "Problem size": DataTree("Problem size", "info", info_axes), + "Reps": DataTree("Reps", "info", info_axes), + "Iterations/rep": DataTree("Iterations/rep", "info", info_axes), + "Kernels/rep": DataTree("Kernels/rep", "info", info_axes), + "Bytes/rep": DataTree("Bytes/rep", "info", info_axes), + "FLOPS/rep": DataTree("FLOPS/rep", "info", info_axes), + + "time(s)": DataTree("time(s)", "data", data_axes), + "time(ms)": DataTree("time(ms)", "computed", data_axes, ["time(s)"], lambda t: t * 1000.0), + "time(us)": DataTree("time(us)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000.0), + "time(ns)": DataTree("time(ns)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000000.0), + + "time/rep(s)": DataTree("time/rep(s)", "computed", data_axes, ["time(s)", "Reps"], lambda t, r: t / r), + "time/rep(ms)": DataTree("time/rep(ms)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000.0), + "time/rep(us)": DataTree("time/rep(us)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000.0), + "time/rep(ns)": DataTree("time/rep(ns)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000000.0), + + "time/it(s)": DataTree("time/it(s)", "computed", data_axes, ["time/rep(s)", "Iterations/rep"], lambda tpr, ipr: tpr / ipr), + "time/it(ms)": DataTree("time/it(ms)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000.0), + "time/it(us)": DataTree("time/it(us)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000.0), + "time/it(ns)": DataTree("time/it(ns)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000000.0), + + "time/kernel(s)": DataTree("time/kernel(s)", "computed", data_axes, ["time/rep(s)", "Kernels/rep"], lambda tpr, kpr: tpr / kpr), + "time/kernel(ms)": DataTree("time/kernel(ms)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000.0), + "time/kernel(us)": DataTree("time/kernel(us)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000.0), + "time/kernel(ns)": DataTree("time/kernel(ns)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000000.0), + + "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "computed", data_axes, ["time/rep(s)", "Problem size"], lambda tpr, ps: ps / tpr), + "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), + "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), + "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), + "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), + "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), + "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), + "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000000.0), + + "bandwidth(B/s)": DataTree("bandwidth(B/s)", "computed", data_axes, ["time/rep(s)", "Bytes/rep"], lambda tpr, bpr: bpr / tpr), + "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000.0), + "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000.0), + "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000.0), + "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000000.0), + "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1024.0), + "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1048576.0), + "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1073741824.0), + "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1099511627776.0), + + "FLOPS": DataTree("FLOPS", "computed", data_axes, ["time/rep(s)", "FLOPS/rep"], lambda tpr, fpr: fpr / tpr), + "KFLOPS": DataTree("KFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000.0), + "MFLOPS": DataTree("MFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000.0), + "GFLOPS": DataTree("GFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000.0), + "TFLOPS": DataTree("TFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000000.0), + + "avg_time(s)": DataTree("avg_time(s)", "reduced", run_size_reduced_axes, ["time(s)"], avg), + "stddev_time(s)": DataTree("stddev_time(s)", "reduced", run_size_reduced_axes, ["time(s)"], stddev), + + } + + + + def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) @@ -269,39 +332,39 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): for c in range(1, len(row)): info_kind = row[c].strip() # print(c, info_kind) - if not info_kind in g_kinds: + if not info_kind in Data.kinds: + # add new kind to global data print("Unknown kernel info {0}".format(info_kind)) - g_kinds[info_kind] = { "type": "info" } + Data.kinds[info_kind] = Data.DataTree(info_kind, "info", Data.info_axes) if info_kind in c_to_info_kinds: print("Repeated kernel info {0}".format(info_kind)) sys.exit(1) - if not info_kind in g_info: - # add new kind to global data - g_info[info_kind] = {} - if not sweep_dir_name in g_info[info_kind]: + if not Data.kinds[info_kind].data: + # add data to kind + Data.kinds[info_kind].data = {} + if not sweep_dir_name in Data.kinds[info_kind].data: # add new sweep to global data - g_info[info_kind][sweep_dir_name] = {} - if run_size in g_info[info_kind][sweep_dir_name]: + Data.kinds[info_kind].data[sweep_dir_name] = {} + if run_size in Data.kinds[info_kind].data[sweep_dir_name]: print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size)) sys.exit(1) else: # add new size to global data - g_info[info_kind][sweep_dir_name][run_size] = {} + Data.kinds[info_kind].data[sweep_dir_name][run_size] = {} # make map of columns to names c_to_info_kinds[c] = info_kind c_to_info_kinds[info_kind] = c elif not ignore: kernel_index = -1 kernel_name = row[0].strip() - if kernel_name in g_kernels: - kernel_index = g_kernels[kernel_name] - elif (len(g_include_kernels) == 0 or kernel_name in g_include_kernels) and (not kernel_name in g_exclude_kernels): + if kernel_name in Data.kernels: + kernel_index = Data.kernels[kernel_name] + elif (len(Data.include_kernels) == 0 or kernel_name in Data.include_kernels) and (not kernel_name in Data.exclude_kernels): # add kernel to global list - global g_num_kernels - kernel_index = g_num_kernels - g_num_kernels += 1 - g_kernels[kernel_name] = kernel_index - g_kernels[kernel_index] = kernel_name + kernel_index = Data.num_kernels + Data.num_kernels += 1 + Data.kernels[kernel_name] = kernel_index + Data.kernels[kernel_index] = kernel_name else: continue # skip this kernel @@ -311,7 +374,7 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): # add data to global structure val = int(row[c].strip()) # print(kernel_index, kernel_name, info_kind, val) - g_info[info_kind][sweep_dir_name][run_size][kernel_index] = val + Data.kinds[info_kind].data[sweep_dir_name][run_size][kernel_index] = val except ValueError: pass # could not convert data to int @@ -321,12 +384,14 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): file_reader = csv.reader(file, delimiter=',') data_kind = g_timing_file_kind - if not data_kind in g_data: - g_data[data_kind] = {} - if not sweep_dir_name in g_data[data_kind]: - g_data[data_kind][sweep_dir_name] = {} - if not run_size in g_data[data_kind][sweep_dir_name]: - g_data[data_kind][sweep_dir_name][run_size] = {} + if not data_kind in Data.kinds: + raise NameError("Unknown kind {}".format(data_kind)) + if not Data.kinds[data_kind].data: + Data.kinds[data_kind].data = {} + if not sweep_dir_name in Data.kinds[data_kind].data: + Data.kinds[data_kind].data[sweep_dir_name] = {} + if not run_size in Data.kinds[data_kind].data[sweep_dir_name]: + Data.kinds[data_kind].data[sweep_dir_name][run_size] = {} else: raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size)) @@ -338,58 +403,56 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if len(c_to_variant_index) == 0: for c in range(1, len(row)): variant_name = row[c].strip() - if variant_name in g_variants: + if variant_name in Data.variants: pass - elif (len(g_include_variants) == 0 or variant_name in g_include_variants) and (not variant_name in g_exclude_variants): - global g_num_variants - variant_index = g_num_variants - g_num_variants += 1 - g_variants[variant_name] = variant_index - g_variants[variant_index] = variant_name + elif (len(Data.include_variants) == 0 or variant_name in Data.include_variants) and (not variant_name in Data.exclude_variants): + variant_index = Data.num_variants + Data.num_variants += 1 + Data.variants[variant_name] = variant_index + Data.variants[variant_index] = variant_name if variant_name in g_known_variants: variant_color = g_known_variants[variant_name]["color"] - g_variant_colors[variant_name] = variant_color - g_variant_colors[variant_index] = variant_color + Data.variant_colors[variant_name] = variant_color + Data.variant_colors[variant_index] = variant_color else: print("Unknown variant {0}".format(variant_name)) sys.exit(1) else: - g_variants[variant_name] = -1 + Data.variants[variant_name] = -1 - c_to_variant_index[c] = g_variants[variant_name] + c_to_variant_index[c] = Data.variants[variant_name] elif len(c_to_tuning_index) == 0: for c in range(1, len(row)): tuning_name = row[c].strip() - if tuning_name in g_tunings: + if tuning_name in Data.tunings: pass - elif (len(g_include_tunings) == 0 or tuning_name in g_include_tunings) and (not tuning_name in g_exclude_tunings): - global g_num_tunings - tuning_index = g_num_tunings - g_num_tunings += 1 - g_tunings[tuning_name] = tuning_index - g_tunings[tuning_index] = tuning_name + elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): + tuning_index = Data.num_tunings + Data.num_tunings += 1 + Data.tunings[tuning_name] = tuning_index + Data.tunings[tuning_index] = tuning_name if tuning_name in g_known_tunings: tuning_format = g_known_tunings[tuning_name]["format"] - g_tuning_formats[tuning_name] = tuning_format - g_tuning_formats[tuning_index] = tuning_format + Data.tuning_formats[tuning_name] = tuning_format + Data.tuning_formats[tuning_index] = tuning_format else: print("Unknown tuning {0}".format(tuning_name)) sys.exit(1) else: - g_tunings[tuning_name] = -1 - c_to_tuning_index[c] = g_tunings[tuning_name] + Data.tunings[tuning_name] = -1 + c_to_tuning_index[c] = Data.tunings[tuning_name] else: print("Unknown row {0}".format(row)) sys.exit(1); elif len(c_to_variant_index) > 0 and len(c_to_tuning_index) > 0: kernel_index = -1 kernel_name = row[0].strip() - if kernel_name in g_kernels: - kernel_index = g_kernels[kernel_name] + if kernel_name in Data.kernels: + kernel_index = Data.kernels[kernel_name] else: continue # skip kernel - g_data[data_kind][sweep_dir_name][run_size][kernel_index] = {} + Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index] = {} for c in range(1, len(row)): variant_index = c_to_variant_index[c] tuning_index = c_to_tuning_index[c] @@ -398,80 +461,121 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): try: val = float(row[c].strip()) # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) - if not variant_index in g_data[data_kind][sweep_dir_name][run_size][kernel_index]: - g_data[data_kind][sweep_dir_name][run_size][kernel_index][variant_index] = {} - g_data[data_kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + if not variant_index in Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index]: + Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} + Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val except ValueError: pass # could not convert data to float def compute_data(kind): - if not kind in g_kinds: - raise NameError("Unknown data kind {0}".format(kind)) - - if g_kinds[kind]["type"] == "info": - if kind in g_info: - return # already calculated - else: - raise NameError("Invalid info kind {0}".format(kind)) - elif g_kinds[kind]["type"] == "data": - if kind in g_data: - return # already calculated - - if not g_kinds[kind]["type"] == "computed": - raise NameError("Invalid data kind {0}".format(kind)) - - if not ("func" in g_kinds[kind] and "args" in g_kinds[kind]): - raise NameError("Computing data is not yet supported for kind {0}".format(kind)) - - compute_args = g_kinds[kind]["args"] - compute_func = g_kinds[kind]["func"] - - for arg_kind in compute_args: - # calculate data for arg_kind - compute_data(arg_kind) - - model_kind = g_model_kind - compute_data(model_kind) - if not model_kind in g_data: - raise NameError("Model data not available {0}, no args".format(model_kind)) - - g_data[kind] = {} - for sweep_dir_name, model_sweep_data in g_data[model_kind].items(): - g_data[kind][sweep_dir_name] = {} - for run_size, model_run_data in model_sweep_data.items(): - g_data[kind][sweep_dir_name][run_size] = {} - for kernel_index, model_kernel_data in model_run_data.items(): - kernel_name = g_kernels[kernel_index] - g_data[kind][sweep_dir_name][run_size][kernel_index] = {} - for variant_index, model_variant_data in model_kernel_data.items(): - variant_name = g_variants[variant_index] - g_data[kind][sweep_dir_name][run_size][kernel_index][variant_index] = {} - for tuning_index, model_val in model_variant_data.items(): - tuning_name = g_tunings[tuning_index] - - args_val = () - for arg_kind in compute_args: - if g_kinds[arg_kind]["type"] == "info": - arg_val = g_info[arg_kind][sweep_dir_name][run_size][kernel_index] - elif g_kinds[arg_kind]["type"] == "data" or g_kinds[arg_kind]["type"] == "computed": - arg_val = g_data[arg_kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] - else: - raise NameError("Invalid data kind {0}".format(arg_kind)) - args_val = args_val + (arg_val,) - - val = compute_func(*args_val) - g_data[kind][sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + if not kind in Data.kinds: + raise NameError("Unknown data kind {}".format(kind)) + + if Data.kinds[kind].data: + return # already calculated + + + if Data.kinds[kind].type == "computed": + + if not (Data.kinds[kind].args and Data.kinds[kind].func): + raise NameError("Computing data is not supported for kind {0}".format(kind)) + + compute_args = Data.kinds[kind].args + compute_func = Data.kinds[kind].func + + for arg_kind in compute_args: + # calculate data for arg_kind + compute_data(arg_kind) + + model_kind = Data.model_kind + compute_data(model_kind) + if not model_kind in Data.kinds: + raise NameError("Model data not available {0}, no args".format(model_kind)) + + Data.kinds[kind].data = {} + for sweep_dir_name, model_sweep_data in Data.kinds[model_kind].data.items(): + Data.kinds[kind].data[sweep_dir_name] = {} + for run_size, model_run_data in model_sweep_data.items(): + Data.kinds[kind].data[sweep_dir_name][run_size] = {} + for kernel_index, model_kernel_data in model_run_data.items(): + kernel_name = Data.kernels[kernel_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} + for variant_index, model_variant_data in model_kernel_data.items(): + variant_name = Data.variants[variant_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} + for tuning_index, model_val in model_variant_data.items(): + tuning_name = Data.tunings[tuning_index] + + args_val = () + for arg_kind in compute_args: + if Data.kinds[arg_kind].type == "info": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] + elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val = args_val + (arg_val,) + + val = compute_func(*args_val) + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + + elif Data.kinds[kind].type == "reduced": + + if not ("func" in Data.kinds[kind] and "args" in Data.kinds[kind] and "axis" in Data.kinds[kind]): + raise NameError("Reducing data is not supported for kind {0}".format(kind)) + + reduce_axis = Data.kinds[kind].axis + reduce_args = Data.kinds[kind].args + reduce_func = Data.kinds[kind].func + + for arg_kind in reduce_args: + # calculate data for arg_kind + reduce_data(arg_kind) + + model_kind = Data.model_kind + reduce_data(model_kind) + if not model_kind in Data.kinds: + raise NameError("Model data not available {0}, no args".format(model_kind)) + + Data.kinds[kind].data = {} + for sweep_dir_name, model_sweep_data in Data.kinds[model_kind].data.items(): + Data.kinds[kind].data[sweep_dir_name] = {} + for run_size, model_run_data in model_sweep_data.items(): + Data.kinds[kind].data[sweep_dir_name][run_size] = {} + for kernel_index, model_kernel_data in model_run_data.items(): + kernel_name = Data.kernels[kernel_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} + for variant_index, model_variant_data in model_kernel_data.items(): + variant_name = Data.variants[variant_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} + for tuning_index, model_val in model_variant_data.items(): + tuning_name = Data.tunings[tuning_index] + + args_val = () + for arg_kind in reduce_args: + if Data.kinds[arg_kind].type == "info": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] + elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "reduced": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val = args_val + (arg_val,) + + val = reduce_func(*args_val) + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + else: + raise NameError("Unknown kind type {}".format(Data.kinds[kind].type)) def get_run_size_data(kind, kernel): - if not kind in g_kinds: + if not kind in Data.kinds: raise NameError("Unknown kind {}".format(kind)) kernel_index = kernel if isinstance(kernel, str): - if kernel in g_kernels: - kernel_index = g_kernels[kernel] + if kernel in Data.kernels: + kernel_index = Data.kernels[kernel] else: raise NameError("Unknown kernel {}".format(kernel)) elif isinstance(kernel, int): @@ -479,18 +583,18 @@ def get_run_size_data(kind, kernel): else: raise NameError("Unknown kernel {}".format(kernel)) - if not kernel_index in g_kernels: + if not kernel_index in Data.kernels: raise NameError("Unknown kernel {}".format(kernel_index)) - kernel_name = g_kernels[kernel_index] + kernel_name = Data.kernels[kernel_index] data = {} - kind_meta = g_kinds[kind] - if kind_meta["type"] == "info": + kind_meta = Data.kinds[kind] + if kind_meta.type == "info": - if not kind in g_info: + if not kind in Data.kinds: raise NameError("Unknown info kind {}".format(kind)) - kind_info = g_info[kind] + kind_info = Data.kinds[kind].data for sweep_dir_name, sweep_info in kind_info.items(): @@ -506,14 +610,14 @@ def get_run_size_data(kind, kernel): val = run_info[kernel_index] data[sweep_dir_name][kind]["data"].append(val) - elif kind_meta["type"] == "data" or kind_meta["type"] == "computed": + elif kind_meta.type == "data" or kind_meta.type == "computed": - if kind_meta["type"] == "computed": + if kind_meta.type == "computed": compute_data(kind) - if not kind in g_data: + if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) - kind_data = g_data[kind] + kind_data = Data.kinds[kind].data for sweep_dir_name, sweep_data in kind_data.items(): @@ -527,9 +631,9 @@ def get_run_size_data(kind, kernel): kernel_data = run_data[kernel_index] for variant_index, variant_data in kernel_data.items(): - variant_name = g_variants[variant_index] + variant_name = Data.variants[variant_index] for tuning_index, val in variant_data.items(): - tuning_name = g_tunings[tuning_index] + tuning_name = Data.tunings[tuning_index] data_name = "{}-{}".format(variant_name, tuning_name) @@ -542,14 +646,16 @@ def get_run_size_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) else: - raise NameError("Unknown kind {} type {}".format(kind, kind_meta["type"])) + raise NameError("Unknown kind {} type {}".format(kind, kind_meta.type)) return data + + def plot_data(outputfile_name, ykind): - print(outputfile_name, ykind) + print("plotting {} {}".format(outputfile_name, ykind)) - if not ykind in g_kinds: + if not ykind in Data.kinds: raise NameError("Unknown kind {}".format(ykind)) ylabel = ykind @@ -561,15 +667,15 @@ def plot_data(outputfile_name, ykind): xscale = "log" xlim = None - for kernel_index in range(0, g_num_kernels): - kernel_name = g_kernels[kernel_index] + for kernel_index in range(0, Data.num_kernels): + kernel_name = Data.kernels[kernel_index] xaxes = get_run_size_data(xkind, kernel_index) yaxes = get_run_size_data(ykind, kernel_index) - for sweep_index in range(0, g_num_sweeps): - sweep_dir_name = g_sweeps[sweep_index] - sweep_marker = g_sweep_markers[sweep_index] + for sweep_index in range(0, Data.num_sweeps): + sweep_dir_name = Data.sweeps[sweep_index] + sweep_marker = Data.sweep_markers[sweep_index] if not sweep_dir_name in xaxes: raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) @@ -584,8 +690,8 @@ def plot_data(outputfile_name, ykind): if ydata["type"] == "data": variant_index = ydata["variant"] tuning_index = ydata["tuning"] - ycolor = g_variant_colors[variant_index] - yformat = "{}{}".format(sweep_marker, g_tuning_formats[tuning_index]) + ycolor = Data.variant_colors[variant_index] + yformat = "{}{}".format(sweep_marker, Data.tuning_formats[tuning_index]) if data_name in xaxes[sweep_dir_name]: xaxis = xaxes[sweep_dir_name][data_name]["data"] @@ -621,31 +727,39 @@ def plot_data(outputfile_name, ykind): plt.clf() def print_data(kind): - print(kind) + print("printing {}".format(kind)) - if kind in g_info: - kind_info = g_info[kind] + compute_data(kind) + + type = None + if not kind in Data.kinds: + return + + if Data.kinds[kind].type == "info": + kind_info = Data.kinds[kind].data for sweep_dir_name, sweep_info in kind_info.items(): - print(sweep_dir_name) for run_size, run_info in sweep_info.items(): - print(run_size) for kernel_index, val in run_info.items(): - kernel_name = g_kernels[kernel_index] - print(kernel_name, val) + kernel_name = Data.kernels[kernel_index] + print("{} {} {} {}".format(sweep_dir_name, run_size, kernel_name, val)) - if kind in g_data: - kind_data = g_data[kind] + elif Data.kinds[kind].type == "data" or \ + Data.kinds[kind].type == "computed": + kind_data = Data.kinds[kind].data for sweep_dir_name, sweep_data in kind_data.items(): - print(sweep_dir_name) for run_size, run_data in sweep_data.items(): - print(run_size) for kernel_index, kernel_data in run_data.items(): - kernel_name = g_kernels[kernel_index] + kernel_name = Data.kernels[kernel_index] for variant_index, variant_data in kernel_data.items(): - variant_name = g_variants[variant_index] + variant_name = Data.variants[variant_index] for tuning_index, val in variant_data.items(): - tuning_name = g_tunings[tuning_index] - print(kernel_name, variant_name, tuning_name, val) + tuning_name = Data.tunings[tuning_index] + print("{} {} {} {} {} {}".format(sweep_dir_name, run_size, kernel_name, variant_name, tuning_name, val)) + + elif Data.kinds[kind].type == "reduced": + raise NameError("Unsupported type {}".format(Data.kinds[kind].type)) + else: + raise NameError("Unsupported type {}".format(Data.kinds[kind].type)) def main(argv): sweep_dir_paths = [] @@ -691,32 +805,32 @@ def fg(arg): elif opt in ("-k", "--kernels"): handle_num = -1 def fk(arg): - g_include_kernels[arg] = arg + Data.include_kernels[arg] = arg handle_arg = fk elif opt in ("-ek", "--exclude-kernels"): handle_num = -1 def fek(arg): - g_exclude_kernels[arg] = arg + Data.exclude_kernels[arg] = arg handle_arg = fek elif opt in ("-v", "--variants"): handle_num = -1 def fv(arg): - g_include_variants[arg] = arg + Data.include_variants[arg] = arg handle_arg = fv elif opt in ("-ev", "--exclude-variants"): handle_num = -1 def fev(arg): - g_exclude_variants[arg] = arg + Data.exclude_variants[arg] = arg handle_arg = fev elif opt in ("-t", "--tunings"): handle_num = -1 def ft(arg): - g_include_tunings[arg] = arg + Data.include_tunings[arg] = arg handle_arg = ft elif opt in ("-et", "--exclude-tunings"): handle_num = -1 def fet(arg): - g_exclude_tunings[arg] = arg + Data.exclude_tunings[arg] = arg handle_arg = fet if handle_num == 0: @@ -764,11 +878,10 @@ def fet(arg): try: run_size = get_size_from_dir_name(sweep_subdir_name) - if not str(run_size) in g_run_sizes: - global g_num_run_sizes - g_run_sizes[g_num_run_sizes] = run_size - g_run_sizes[str(run_size)] = g_num_run_sizes - g_num_run_sizes += 1 + if not str(run_size) in Data.run_sizes: + Data.run_sizes[Data.num_run_sizes] = run_size + Data.run_sizes[str(run_size)] = Data.num_run_sizes + Data.num_run_sizes += 1 sweep_subdir_timing_file_path = "" sweep_subdir_runinfo_file_path = "" @@ -790,48 +903,47 @@ def fet(arg): pass # could not convert data to int if got_something: - global g_num_sweeps - if sweep_dir_name in g_sweeps: + if sweep_dir_name in Data.sweeps: raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) - g_sweeps[g_num_sweeps] = sweep_dir_name - if g_num_sweeps >= len(g_markers): + Data.sweeps[Data.num_sweeps] = sweep_dir_name + if Data.num_sweeps >= len(g_markers): raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) - g_sweep_markers[g_num_sweeps] = g_markers[g_num_sweeps] - g_num_sweeps += 1 + Data.sweep_markers[Data.num_sweeps] = g_markers[Data.num_sweeps] + Data.num_sweeps += 1 kinds_string = "" - for kind in g_kinds: + for kind in Data.kinds: kinds_string += ", {}".format(kind) print("kinds") print(" {}".format(kinds_string[2:])) sweeps_string = "" - for v in range(0, g_num_sweeps): - sweeps_string += ", {}".format(g_sweeps[v]) + for v in range(0, Data.num_sweeps): + sweeps_string += ", {}".format(Data.sweeps[v]) print("sweeps") print(" {}".format(sweeps_string[2:])) run_sizes_string = "" - for v in range(0, g_num_run_sizes): - run_sizes_string += ", {}".format(g_run_sizes[v]) + for v in range(0, Data.num_run_sizes): + run_sizes_string += ", {}".format(Data.run_sizes[v]) print("run_sizes") print(" {}".format(run_sizes_string[2:])) kernel_string = "" - for v in range(0, g_num_kernels): - kernel_string += ", {}".format(g_kernels[v]) + for v in range(0, Data.num_kernels): + kernel_string += ", {}".format(Data.kernels[v]) print("kernels") print(" {}".format(kernel_string[2:])) variant_string = "" - for v in range(0, g_num_variants): - variant_string += ", {}".format(g_variants[v]) + for v in range(0, Data.num_variants): + variant_string += ", {}".format(Data.variants[v]) print("variants") print(" {}".format(variant_string[2:])) tuning_string = "" - for v in range(0, g_num_tunings): - tuning_string += ", {}".format(g_tunings[v]) + for v in range(0, Data.num_tunings): + tuning_string += ", {}".format(Data.tunings[v]) print("tunings") print(" {}".format(tuning_string[2:])) From 71a945130d895996eceecf3d87d594868bc9538f Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Fri, 20 May 2022 16:43:03 -0700 Subject: [PATCH 038/174] Add templated data computation This allows you to make new kinds of data from other kinds without having to write every kind out beforehand, like avg and avg. --- scripts/sweep_graph.py | 428 ++++++++++++++++++++++++----------------- 1 file changed, 253 insertions(+), 175 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 910376112..b7154be2d 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -101,6 +101,15 @@ def stddev(vals): stddev_val = math.sqrt(stddev_val) return stddev_val +def relstddev(vals): + avg_val = avg(vals) + stddev_val = 0 + for val in vals: + stddev_val += (val - avg_val)*(val - avg_val) + stddev_val /= len(vals) + stddev_val = math.sqrt(stddev_val) + return stddev_val / abs(avg_val) + class Data: @@ -129,31 +138,19 @@ class Data: exclude_tunings = {} # multi-dimensional array structured like this - # kind - time, bandwidth, etc (["info"]) # directory name - platform, compiler, etc # run size - problem size, for run_sizes # kernel index - for kernels - info = { "Problem size": { }, - "Reps": { }, - "Iterations/rep": { }, - "Kernels/rep": { }, - "Bytes/rep": { }, - "FLOPS/rep": { } - } - num_info_axes = 3 info_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", "run_size": 1, 1: "run_size", "kernel_index": 2, 2: "kernel_index", } # multi-dimensional array structured like this - # kind - time, bandwidth, etc (["data"]) # directory name - platform, compiler, etc # run size - problem size, for run_sizes # kernel index - for kernels # variant index - for variants # tuning index - for tunings - data = { } - num_data_axes = 5 data_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", "run_size": 1, 1: "run_size", "kernel_index": 2, 2: "kernel_index", @@ -161,38 +158,35 @@ class Data: "tuning_index": 4, 4: "tuning_index", } # multi-dimensional array structured like data but missing some dimensions - # kind - time, bandwidth, etc (["data"]) # directory name - platform, compiler, etc - # run size - problem size, for run_sizes - # kernel index - for kernels - # variant index - for variants - # tuning index - for tunings - reduced = { } + # kernel index - for kernels + # variant index - for variants + # tuning index - for tunings run_size_reduced_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", "kernel_index": 1, 1: "kernel_index", "variant_index": 2, 2: "variant_index", "tuning_index": 3, 3: "tuning_index", } - model_kind = "time(s)" + data_model_kind = "time(s)" - def DataTreeIterator0(data_tree): + def DataTreeIterator0(self, data_tree): assert(data_tree.num_axes == 0) yield data_tree.data - def DataTreeIterator1(data_tree): + def DataTreeIterator1(self, data_tree): assert(data_tree.num_axes == 1) assert(data_tree.data) for k0 in data_tree.data.keys(): yield (k0,) - def DataTreeIterator2(data_tree): + def DataTreeIterator2(self, data_tree): assert(data_tree.num_axes == 2) assert(data_tree.data) for k0, v0 in data_tree.data.items(): for k1 in v0.keys(): yield (k0, k1,) - def DataTreeIterator3(data_tree): + def DataTreeIterator3(self, data_tree): assert(data_tree.num_axes == 3) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -200,7 +194,7 @@ def DataTreeIterator3(data_tree): for k2 in v1.keys(): yield (k0, k1, k2,) - def DataTreeIterator4(data_tree): + def DataTreeIterator4(self, data_tree): assert(data_tree.num_axes == 4) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -209,7 +203,7 @@ def DataTreeIterator4(data_tree): for k3 in v2.keys(): yield (k0, k1, k2, k3,) - def DataTreeIterator5(data_tree): + def DataTreeIterator5(self, data_tree): assert(data_tree.num_axes == 5) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -237,20 +231,72 @@ def __init__(self, kind, type, axes, args=None, func=None): def __iter__(self): if self.num_axes == 0: - return DataTreeIterator0(self) + return Data.DataTreeIterator0(self) elif self.num_axes == 1: - return DataTreeIterator1(self) + return Data.DataTreeIterator1(self) elif self.num_axes == 2: - return DataTreeIterator2(self) + return Data.DataTreeIterator2(self) elif self.num_axes == 3: - return DataTreeIterator3(self) + return Data.DataTreeIterator3(self) elif self.num_axes == 4: - return DataTreeIterator4(self) + return Data.DataTreeIterator4(self) elif self.num_axes == 5: - return DataTreeIterator5(self) + return Data.DataTreeIterator5(self) else: raise ValueError + def printData(self): + if self.data: + print("printData {}:".format(self.kind)) + else: + print("printData {}: empty".format(self.kind)) + return + + if self.type == "info": + for sweep_dir_name, sweep_info in self.data.items(): + for run_size, run_info in sweep_info.items(): + for kernel_index, val in run_info.items(): + kernel_name = Data.kernels[kernel_index] + print("{} {} {} {}".format(sweep_dir_name, run_size, kernel_name, val)) + + elif self.type == "data" or \ + self.type == "computed": + for sweep_dir_name, sweep_data in self.data.items(): + for run_size, run_data in sweep_data.items(): + for kernel_index, kernel_data in run_data.items(): + kernel_name = Data.kernels[kernel_index] + for variant_index, variant_data in kernel_data.items(): + variant_name = Data.variants[variant_index] + for tuning_index, val in variant_data.items(): + tuning_name = Data.tunings[tuning_index] + print("{} {} {} {} {} {}".format(sweep_dir_name, run_size, kernel_name, variant_name, tuning_name, val)) + + elif self.type == "run_size_reduced": + for sweep_dir_name, sweep_data in self.data.items(): + for kernel_index, kernel_data in sweep_data.items(): + kernel_name = Data.kernels[kernel_index] + for variant_index, variant_data in kernel_data.items(): + variant_name = Data.variants[variant_index] + for tuning_index, val in variant_data.items(): + tuning_name = Data.tunings[tuning_index] + print("{} {} {} {} {}".format(sweep_dir_name, kernel_name, variant_name, tuning_name, val)) + + else: + raise NameError("Can not print type {}".format(self.type)) + + class DataTreeTemplate: + + def __init__(self, kind_template, type, axes, arg_templates, func): + self.kind_template = kind_template + self.type = type + self.axes = axes + self.arg_templates = arg_templates + self.func = func + + def makeDataTree(self, template_args): + kind = self.kind_template.format(*template_args) + args = [ arg.format(*template_args) for arg in self.arg_templates ] + return Data.DataTree(kind, self.type, self.axes, args, self.func) # has info derivable from first kind "time(s)" which is read from files kinds = { "Problem size": DataTree("Problem size", "info", info_axes), @@ -305,12 +351,170 @@ def __iter__(self): "GFLOPS": DataTree("GFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000.0), "TFLOPS": DataTree("TFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000000.0), - "avg_time(s)": DataTree("avg_time(s)", "reduced", run_size_reduced_axes, ["time(s)"], avg), - "stddev_time(s)": DataTree("stddev_time(s)", "reduced", run_size_reduced_axes, ["time(s)"], stddev), + } + + kind_templates = { + "avg": DataTreeTemplate("avg<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], avg), + "stddev": DataTreeTemplate("stddev<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], stddev), + "relstddev": DataTreeTemplate("relstddev<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], relstddev), + } + + def compute_data(kind): + if not kind in Data.kinds: + raise NameError("Unknown data kind {}".format(kind)) + + if Data.kinds[kind].data: + return # already calculated + + + if Data.kinds[kind].type == "computed": + + if not (Data.kinds[kind].args and Data.kinds[kind].func): + raise NameError("Computing data is not supported for kind {0}".format(kind)) + + compute_args = Data.kinds[kind].args + compute_func = Data.kinds[kind].func + + for arg_kind in compute_args: + # calculate data for arg_kind + Data.compute(arg_kind) + + if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): + raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) + + Data.kinds[kind].data = {} + for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.items(): + Data.kinds[kind].data[sweep_dir_name] = {} + for run_size, model_run_data in model_sweep_data.items(): + Data.kinds[kind].data[sweep_dir_name][run_size] = {} + for kernel_index, model_kernel_data in model_run_data.items(): + kernel_name = Data.kernels[kernel_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} + for variant_index, model_variant_data in model_kernel_data.items(): + variant_name = Data.variants[variant_index] + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} + for tuning_index, model_val in model_variant_data.items(): + tuning_name = Data.tunings[tuning_index] + + args_val = () + for arg_kind in compute_args: + if Data.kinds[arg_kind].type == "info": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] + elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val = args_val + (arg_val,) + + val = compute_func(*args_val) + Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + + elif Data.kinds[kind].type == "run_size_reduced": + + if not (Data.kinds[kind].func and Data.kinds[kind].args): + raise NameError("Reducing data is not supported for kind {0}".format(kind)) + + reduce_args = Data.kinds[kind].args + reduce_func = Data.kinds[kind].func + + for arg_kind in reduce_args: + # calculate data for arg_kind + Data.compute(arg_kind) + + if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): + raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) + + Data.kinds[kind].data = {} + for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.items(): + Data.kinds[kind].data[sweep_dir_name] = {} + for run_size, model_run_data in model_sweep_data.items(): + for kernel_index, model_kernel_data in model_run_data.items(): + kernel_name = Data.kernels[kernel_index] + if not kernel_index in Data.kinds[kind].data[sweep_dir_name]: + Data.kinds[kind].data[sweep_dir_name][kernel_index] = {} + for variant_index, model_variant_data in model_kernel_data.items(): + variant_name = Data.variants[variant_index] + if not variant_index in Data.kinds[kind].data[sweep_dir_name][kernel_index]: + Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index] = {} + for tuning_index, model_val in model_variant_data.items(): + tuning_name = Data.tunings[tuning_index] + + if not tuning_index in Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index]: + args_val = () + for arg_kind in reduce_args: + if Data.kinds[arg_kind].type == "info": + arg_val = [] + elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": + arg_val = [] + elif Data.kinds[arg_kind].type == "run_size_reduced": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val = args_val + (arg_val,) + Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] = args_val + else: + args_val = Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] + + args_idx = 0 + for arg_kind in reduce_args: + if Data.kinds[arg_kind].type == "info": + args_val[args_idx].append(Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index]) + elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": + args_val[args_idx].append(Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index]) + elif Data.kinds[arg_kind].type == "run_size_reduced": + pass + else: + raise NameError("Invalid data kind {0}".format(arg_kind)) + args_idx += 1 + + for sweep_dir_name, sweep_data in Data.kinds[kind].data.items(): + for kernel_index, kernel_data in sweep_data.items(): + for variant_index, variant_data in kernel_data.items(): + for tuning_index, args_val in variant_data.items(): + Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] = reduce_func(*args_val) + + else: + raise NameError("Unknown kind type {}".format(Data.kinds[kind].type)) + + def compute_templated_data(kind_template, template_args): + if kind_template in Data.kind_templates: + dataType = Data.kind_templates[kind_template].makeDataTree(template_args) + if not dataType.kind in Data.kinds: + Data.kinds[dataType.kind] = dataType + Data.compute(dataType.kind) + else: + raise NameError("Unkown kind template {}".format(kind_template)) + + def kind_template_scan(kind): + + template_args = None + + template_start_idx = kind.find("<") + template_end_idx = kind.rfind(">") + + if template_start_idx == -1 or template_end_idx == -1: + return kind, template_args - } + kind_template = kind[:template_start_idx] + template_args = kind[template_start_idx+1:template_end_idx].split(",") + for i in range(0,len(template_args)): + template_args[i] = template_args[i].strip() + return (kind_template, template_args) + + def compute(kind): + if kind in Data.kinds: + if not Data.kinds[kind].data: + Data.compute_data(kind) + return + + kind_template, template_args = Data.kind_template_scan(kind) + if kind_template in Data.kind_templates: + Data.compute_templated_data(kind_template, template_args) + return + + raise NameError("Unknown data kind {}".format(kind)) @@ -378,6 +582,7 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): except ValueError: pass # could not convert data to int + def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): # print(sweep_dir_name, sweep_subdir_timing_file_path, run_size) with open(sweep_subdir_timing_file_path, "r") as file: @@ -467,105 +672,6 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): except ValueError: pass # could not convert data to float -def compute_data(kind): - if not kind in Data.kinds: - raise NameError("Unknown data kind {}".format(kind)) - - if Data.kinds[kind].data: - return # already calculated - - - if Data.kinds[kind].type == "computed": - - if not (Data.kinds[kind].args and Data.kinds[kind].func): - raise NameError("Computing data is not supported for kind {0}".format(kind)) - - compute_args = Data.kinds[kind].args - compute_func = Data.kinds[kind].func - - for arg_kind in compute_args: - # calculate data for arg_kind - compute_data(arg_kind) - - model_kind = Data.model_kind - compute_data(model_kind) - if not model_kind in Data.kinds: - raise NameError("Model data not available {0}, no args".format(model_kind)) - - Data.kinds[kind].data = {} - for sweep_dir_name, model_sweep_data in Data.kinds[model_kind].data.items(): - Data.kinds[kind].data[sweep_dir_name] = {} - for run_size, model_run_data in model_sweep_data.items(): - Data.kinds[kind].data[sweep_dir_name][run_size] = {} - for kernel_index, model_kernel_data in model_run_data.items(): - kernel_name = Data.kernels[kernel_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} - for variant_index, model_variant_data in model_kernel_data.items(): - variant_name = Data.variants[variant_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} - for tuning_index, model_val in model_variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - args_val = () - for arg_kind in compute_args: - if Data.kinds[arg_kind].type == "info": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] - elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] - else: - raise NameError("Invalid data kind {0}".format(arg_kind)) - args_val = args_val + (arg_val,) - - val = compute_func(*args_val) - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val - - elif Data.kinds[kind].type == "reduced": - - if not ("func" in Data.kinds[kind] and "args" in Data.kinds[kind] and "axis" in Data.kinds[kind]): - raise NameError("Reducing data is not supported for kind {0}".format(kind)) - - reduce_axis = Data.kinds[kind].axis - reduce_args = Data.kinds[kind].args - reduce_func = Data.kinds[kind].func - - for arg_kind in reduce_args: - # calculate data for arg_kind - reduce_data(arg_kind) - - model_kind = Data.model_kind - reduce_data(model_kind) - if not model_kind in Data.kinds: - raise NameError("Model data not available {0}, no args".format(model_kind)) - - Data.kinds[kind].data = {} - for sweep_dir_name, model_sweep_data in Data.kinds[model_kind].data.items(): - Data.kinds[kind].data[sweep_dir_name] = {} - for run_size, model_run_data in model_sweep_data.items(): - Data.kinds[kind].data[sweep_dir_name][run_size] = {} - for kernel_index, model_kernel_data in model_run_data.items(): - kernel_name = Data.kernels[kernel_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} - for variant_index, model_variant_data in model_kernel_data.items(): - variant_name = Data.variants[variant_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} - for tuning_index, model_val in model_variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - args_val = () - for arg_kind in reduce_args: - if Data.kinds[arg_kind].type == "info": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] - elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "reduced": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] - else: - raise NameError("Invalid data kind {0}".format(arg_kind)) - args_val = args_val + (arg_val,) - - val = reduce_func(*args_val) - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val - - else: - raise NameError("Unknown kind type {}".format(Data.kinds[kind].type)) def get_run_size_data(kind, kernel): @@ -612,9 +718,6 @@ def get_run_size_data(kind, kernel): elif kind_meta.type == "data" or kind_meta.type == "computed": - if kind_meta.type == "computed": - compute_data(kind) - if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) kind_data = Data.kinds[kind].data @@ -651,7 +754,6 @@ def get_run_size_data(kind, kernel): return data - def plot_data(outputfile_name, ykind): print("plotting {} {}".format(outputfile_name, ykind)) @@ -726,40 +828,8 @@ def plot_data(outputfile_name, ykind): plt.savefig(fname, dpi=150.0) plt.clf() -def print_data(kind): - print("printing {}".format(kind)) - - compute_data(kind) - - type = None - if not kind in Data.kinds: - return - if Data.kinds[kind].type == "info": - kind_info = Data.kinds[kind].data - for sweep_dir_name, sweep_info in kind_info.items(): - for run_size, run_info in sweep_info.items(): - for kernel_index, val in run_info.items(): - kernel_name = Data.kernels[kernel_index] - print("{} {} {} {}".format(sweep_dir_name, run_size, kernel_name, val)) - elif Data.kinds[kind].type == "data" or \ - Data.kinds[kind].type == "computed": - kind_data = Data.kinds[kind].data - for sweep_dir_name, sweep_data in kind_data.items(): - for run_size, run_data in sweep_data.items(): - for kernel_index, kernel_data in run_data.items(): - kernel_name = Data.kernels[kernel_index] - for variant_index, variant_data in kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, val in variant_data.items(): - tuning_name = Data.tunings[tuning_index] - print("{} {} {} {} {} {}".format(sweep_dir_name, run_size, kernel_name, variant_name, tuning_name, val)) - - elif Data.kinds[kind].type == "reduced": - raise NameError("Unsupported type {}".format(Data.kinds[kind].type)) - else: - raise NameError("Unsupported type {}".format(Data.kinds[kind].type)) def main(argv): sweep_dir_paths = [] @@ -791,17 +861,17 @@ def main(argv): def fo(arg): outputfile = arg handle_arg = fo + # multi arg options elif opt in ("-p", "--print"): - handle_num = 1 + handle_num = -1 def p(arg): print_kinds.append(arg) handle_arg = p elif opt in ("-g", "--graph"): - handle_num = 1 + handle_num = -1 def fg(arg): graph_kinds.append(arg) handle_arg = fg - # multi arg options elif opt in ("-k", "--kernels"): handle_num = -1 def fk(arg): @@ -912,11 +982,17 @@ def fet(arg): Data.num_sweeps += 1 kinds_string = "" - for kind in Data.kinds: - kinds_string += ", {}".format(kind) + for kindTree in Data.kinds.values(): + kinds_string += ", {}".format(kindTree.kind) print("kinds") print(" {}".format(kinds_string[2:])) + kind_templates_string = "" + for kindTree_template in Data.kind_templates.values(): + kind_templates_string += ", {}".format(kindTree_template.kind_template) + print("kind_templates") + print(" {}".format(kind_templates_string[2:])) + sweeps_string = "" for v in range(0, Data.num_sweeps): sweeps_string += ", {}".format(Data.sweeps[v]) @@ -948,9 +1024,11 @@ def fet(arg): print(" {}".format(tuning_string[2:])) for kind in print_kinds: - print_data(kind) + Data.compute(kind) + Data.kinds[kind].printData() for kind in graph_kinds: + Data.compute(kind) plot_data(outputfile, kind) if __name__ == "__main__": From dd1bd5ccaaa8d95412541782d00867b32a4e0c26 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Mon, 23 May 2022 14:59:46 -0700 Subject: [PATCH 039/174] plot on same graph, add linear regression Now plotting multiple kinds of data will appear on the same graph Added support for linear regression and segmented linear regression --- scripts/sweep_graph.py | 398 ++++++++++++++++++++++++++++++----------- 1 file changed, 296 insertions(+), 102 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index b7154be2d..ccb4dfc2b 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -3,6 +3,7 @@ import math import os import sys +import re import getopt import csv import matplotlib.pyplot as plt @@ -85,12 +86,14 @@ def make_color_tuple(r, g, b): g_timing_file_kind = "time(s)" -def avg(vals): - avg_val = 0 +def sum(vals): + sum_val = 0 for val in vals: - avg_val += val - avg_val /= len(vals) - return avg_val + sum_val += val + return sum_val + +def avg(vals): + return sum(vals) / len(vals) def stddev(vals): avg_val = avg(vals) @@ -110,6 +113,142 @@ def relstddev(vals): stddev_val = math.sqrt(stddev_val) return stddev_val / abs(avg_val) +# returns (intercept, slope, correlation_coefficient) +def linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum): + assert(n>0) + if n == 1: + slope = 0.0 + intercept = ysum + correlation_coefficient = 1.0 + else: + slope = (n*xysum - xsum*ysum) / (n*x2sum - xsum*xsum) + intercept = (ysum - slope*xsum)/n + correlation_coefficient = (n*xysum - xsum*ysum) / math.sqrt((n*x2sum - xsum*xsum)*(n*y2sum - ysum*ysum)) + return (intercept, slope, correlation_coefficient) + +# returns (intercept, slope, correlation_coefficient) +def linearRegression(xvals, yvals): + assert(len(xvals) == len(yvals)) + n = len(xvals) + xsum = sum(xvals) + ysum = sum(yvals) + x2sum = sum([x*x for x in xvals]) + y2sum = sum([y*y for y in yvals]) + xysum = sum([xvals[i]*yvals[i] for i in range(0, n)]) + return linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) + +def eval_linearRegression(xval, lr_vals): + return lr_vals[0] + lr_vals[1]*xval + +# returns (intercept, slope, correlation_coefficient) +def linearRegression_loglog(xvals, yvals): + assert(len(xvals) == len(yvals)) + xlogvals = [math.log(x, 2) for x in xvals] + ylogvals = [math.log(y, 2) for y in yvals] + return linearRegression(xlogvals, ylogvals) + +def eval_linearRegression_loglog(xval, lr_vals): + return math.pow(2, lr_vals[0])*math.pow(xval, lr_vals[1]) + + +# returns (intercept, slope, correlation_coefficient) +def segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR): + sums[0] += xvals[i] + sums[1] += yvals[i] + sums[2] += xvals[i]*xvals[i] + sums[3] += yvals[i]*yvals[i] + sums[4] += xvals[i]*yvals[i] + xsum = sums[0] + ysum = sums[1] + x2sum = sums[2] + y2sum = sums[3] + xysum = sums[4] + LR[i] = linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, LR_right): + lr_vals_left = None + lr_vals_right = None + break_point = math.inf + + if i > 0: + lr_vals_left = LR_left[i-1] + if i < n: + lr_vals_right = LR_right[i] + break_point = xvals[i] + + numer = 0.0 + for j in range(0, n): + xval = xvals[j] + yval = yvals[j] + lr_vals = None + if xval < break_point: + lr_vals = lr_vals_left + else: + lr_vals = lr_vals_right + lr_yval = eval_linearRegression(xval, lr_vals) + numer += (yval - lr_yval)*(yval - lr_yval) + + correlation_coefficient = 1.0 - numer / denom + if correlation_coefficient > ret[2]: + ret[0] = [break_point,] + ret[1] = [lr_vals_left, lr_vals_right,] + ret[2] = correlation_coefficient + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression(xvals, yvals): + assert(len(xvals) == len(yvals)) + N = len(xvals) + + LR_left = [] + LR_right = [] + for i in range(0, N): + LR_left.append(None) + LR_right.append(None) + + sums = [0.0, 0.0, 0.0, 0.0, 0.0] + for ii in range(0, N): + i = N-ii-1 + n = ii+1 + segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_right) + + sums = [0.0, 0.0, 0.0, 0.0, 0.0] + for i in range(0, N): + n = i+1 + segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_left) + + yavg = avg(yvals) + denom = sum([(y-yavg)*(y-yavg) for y in yvals]) + ret = [[], [], -math.inf] + for i in range(0, N+1): + segmented_linearRegression_helper(ret, i, N, xvals, yvals, denom, LR_left, LR_right) + + return (*ret,) + +def find_segment(xval, break_points): + break_i = len(break_points) + for i in range(0, len(break_points)): + break_point = break_points[i] + if xval < break_point: + break_i = i + break + return break_i + +def eval_segmented_linearRegression(xval, slr_vals): + break_i = find_segment(xval, slr_vals[0]) + return eval_linearRegression(xval, slr_vals[1][break_i]) + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression_loglog(xvals, yvals): + assert(len(xvals) == len(yvals)) + xlogvals = [math.log(x, 2) for x in xvals] + ylogvals = [math.log(y, 2) for y in yvals] + return segmented_linearRegression(xlogvals, ylogvals) + +def eval_segmented_linearRegression_loglog(xval, slr_vals): + break_i = find_segment(math.log(xval, 2), slr_vals[0]) + return eval_linearRegression_loglog(xval, slr_vals[1][break_i]) + class Data: @@ -215,8 +354,9 @@ def DataTreeIterator5(self, data_tree): class DataTree: - def __init__(self, kind, type, axes, args=None, func=None): + def __init__(self, kind, label, type, axes, args=None, func=None): self.kind = kind + self.label = label self.type = type self.axes = axes self.num_axes = len(self.axes) / 2 @@ -286,77 +426,117 @@ def printData(self): class DataTreeTemplate: - def __init__(self, kind_template, type, axes, arg_templates, func): + def __init__(self, kind_template, label_template, type, axes, arg_templates, func): self.kind_template = kind_template + self.label_template = label_template self.type = type self.axes = axes self.arg_templates = arg_templates self.func = func + def getKind(self, template_args): + return self.kind_template.format(*template_args) + + def getLabel(self, template_args): + arg_labels = [Data.kinds[arg_kind].label for arg_kind in template_args] + return self.label_template.format(*arg_labels) + + def getArgs(self, template_args): + return [ arg.format(*template_args) for arg in self.arg_templates ] + def makeDataTree(self, template_args): - kind = self.kind_template.format(*template_args) - args = [ arg.format(*template_args) for arg in self.arg_templates ] - return Data.DataTree(kind, self.type, self.axes, args, self.func) + kind = self.getKind(template_args) + label = self.getLabel(template_args) + args = self.getArgs(template_args) + return Data.DataTree(kind, label, self.type, self.axes, args, self.func) # has info derivable from first kind "time(s)" which is read from files - kinds = { "Problem size": DataTree("Problem size", "info", info_axes), - "Reps": DataTree("Reps", "info", info_axes), - "Iterations/rep": DataTree("Iterations/rep", "info", info_axes), - "Kernels/rep": DataTree("Kernels/rep", "info", info_axes), - "Bytes/rep": DataTree("Bytes/rep", "info", info_axes), - "FLOPS/rep": DataTree("FLOPS/rep", "info", info_axes), - - "time(s)": DataTree("time(s)", "data", data_axes), - "time(ms)": DataTree("time(ms)", "computed", data_axes, ["time(s)"], lambda t: t * 1000.0), - "time(us)": DataTree("time(us)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000.0), - "time(ns)": DataTree("time(ns)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000000.0), - - "time/rep(s)": DataTree("time/rep(s)", "computed", data_axes, ["time(s)", "Reps"], lambda t, r: t / r), - "time/rep(ms)": DataTree("time/rep(ms)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000.0), - "time/rep(us)": DataTree("time/rep(us)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000.0), - "time/rep(ns)": DataTree("time/rep(ns)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000000.0), - - "time/it(s)": DataTree("time/it(s)", "computed", data_axes, ["time/rep(s)", "Iterations/rep"], lambda tpr, ipr: tpr / ipr), - "time/it(ms)": DataTree("time/it(ms)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000.0), - "time/it(us)": DataTree("time/it(us)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000.0), - "time/it(ns)": DataTree("time/it(ns)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000000.0), - - "time/kernel(s)": DataTree("time/kernel(s)", "computed", data_axes, ["time/rep(s)", "Kernels/rep"], lambda tpr, kpr: tpr / kpr), - "time/kernel(ms)": DataTree("time/kernel(ms)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000.0), - "time/kernel(us)": DataTree("time/kernel(us)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000.0), - "time/kernel(ns)": DataTree("time/kernel(ns)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000000.0), - - "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "computed", data_axes, ["time/rep(s)", "Problem size"], lambda tpr, ps: ps / tpr), - "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), - "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), - "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), - "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), - "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), - "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), - "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000000.0), - - "bandwidth(B/s)": DataTree("bandwidth(B/s)", "computed", data_axes, ["time/rep(s)", "Bytes/rep"], lambda tpr, bpr: bpr / tpr), - "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000.0), - "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000.0), - "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000.0), - "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000000.0), - "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1024.0), - "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1048576.0), - "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1073741824.0), - "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1099511627776.0), - - "FLOPS": DataTree("FLOPS", "computed", data_axes, ["time/rep(s)", "FLOPS/rep"], lambda tpr, fpr: fpr / tpr), - "KFLOPS": DataTree("KFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000.0), - "MFLOPS": DataTree("MFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000.0), - "GFLOPS": DataTree("GFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000.0), - "TFLOPS": DataTree("TFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000000.0), + kinds = { "Problem size": DataTree("Problem size", "Problem size", "info", info_axes), + "Reps": DataTree("Reps", "Reps", "info", info_axes), + "Iterations/rep": DataTree("Iterations/rep", "Iterations", "info", info_axes), + "Kernels/rep": DataTree("Kernels/rep", "Kernels", "info", info_axes), + "Bytes/rep": DataTree("Bytes/rep", "Bytes", "info", info_axes), + "FLOPS/rep": DataTree("FLOPS/rep", "FLOPS", "info", info_axes), + + "time(s)": DataTree("time(s)", "time(s)", "data", data_axes), + "time(ms)": DataTree("time(ms)", "time(ms)", "computed", data_axes, ["time(s)"], lambda t: t * 1000.0), + "time(us)": DataTree("time(us)", "time(us)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000.0), + "time(ns)": DataTree("time(ns)", "time(ns)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000000.0), + + "time/rep(s)": DataTree("time/rep(s)", "time(s)", "computed", data_axes, ["time(s)", "Reps"], lambda t, r: t / r), + "time/rep(ms)": DataTree("time/rep(ms)", "time(ms)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000.0), + "time/rep(us)": DataTree("time/rep(us)", "time(us)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000.0), + "time/rep(ns)": DataTree("time/rep(ns)", "time(ns)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000000.0), + + "time/it(s)": DataTree("time/it(s)", "time(s)", "computed", data_axes, ["time/rep(s)", "Iterations/rep"], lambda tpr, ipr: tpr / ipr), + "time/it(ms)": DataTree("time/it(ms)", "time(ms)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000.0), + "time/it(us)": DataTree("time/it(us)", "time(us)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000.0), + "time/it(ns)": DataTree("time/it(ns)", "time(ns)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000000.0), + + "time/kernel(s)": DataTree("time/kernel(s)", "time(s)", "computed", data_axes, ["time/rep(s)", "Kernels/rep"], lambda tpr, kpr: tpr / kpr), + "time/kernel(ms)": DataTree("time/kernel(ms)", "time(ms)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000.0), + "time/kernel(us)": DataTree("time/kernel(us)", "time(us)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000.0), + "time/kernel(ns)": DataTree("time/kernel(ns)", "time(ns)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000000.0), + + "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "throughput(Problem size/s)", "computed", data_axes, ["time/rep(s)", "Problem size"], lambda tpr, ps: ps / tpr), + "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "throughput(Problem size/ms)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), + "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "throughput(Problem size/us)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), + "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "throughput(Problem size/ns)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), + "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "throughput(KProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), + "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "throughput(MProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), + "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "throughput(GProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), + "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "throughput(TProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000000.0), + + "bandwidth(B/s)": DataTree("bandwidth(B/s)", "bandwidth(B/s)", "computed", data_axes, ["time/rep(s)", "Bytes/rep"], lambda tpr, bpr: bpr / tpr), + "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "bandwidth(KB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000.0), + "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "bandwidth(MB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000.0), + "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "bandwidth(GB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000.0), + "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "bandwidth(TB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000000.0), + "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "bandwidth(KiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1024.0), + "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "bandwidth(MiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1048576.0), + "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "bandwidth(GiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1073741824.0), + "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "bandwidth(TiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1099511627776.0), + + "FLOPS": DataTree("FLOPS", "FLOPS", "computed", data_axes, ["time/rep(s)", "FLOPS/rep"], lambda tpr, fpr: fpr / tpr), + "KFLOPS": DataTree("KFLOPS", "KFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000.0), + "MFLOPS": DataTree("MFLOPS", "MFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000.0), + "GFLOPS": DataTree("GFLOPS", "GFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000.0), + "TFLOPS": DataTree("TFLOPS", "TFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000000.0), } kind_templates = { - "avg": DataTreeTemplate("avg<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], avg), - "stddev": DataTreeTemplate("stddev<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], stddev), - "relstddev": DataTreeTemplate("relstddev<{0}>", "run_size_reduced", run_size_reduced_axes, ["{0}"], relstddev), + "min": DataTreeTemplate("min<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], min), + "max": DataTreeTemplate("max<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], max), + "sum": DataTreeTemplate("sum<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], sum), + "avg": DataTreeTemplate("avg<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], avg), + "stddev": DataTreeTemplate("stddev<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], stddev), + "relstddev": DataTreeTemplate("relstddev<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], relstddev), + + "_LR": DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], linearRegression), + "LR_intercept": DataTreeTemplate("LR_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[0]), + "LR_slope": DataTreeTemplate("LR_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[1]), + "LR_correlationCoefficient": DataTreeTemplate("LR_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[2]), + "LR": DataTreeTemplate("LR<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR<{0}>"], eval_linearRegression), + + "_LR_log": DataTreeTemplate("_LR_log<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], linearRegression_loglog), + "LR_log_intercept": DataTreeTemplate("LR_log_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[0]), + "LR_log_slope": DataTreeTemplate("LR_log_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[1]), + "LR_log_correlationCoefficient": DataTreeTemplate("LR_log_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[2]), + "LR_log": DataTreeTemplate("LR_log<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR_log<{0}>"], eval_linearRegression_loglog), + + "_LR2": DataTreeTemplate("_LR2<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], segmented_linearRegression), + "LR2_intercept": DataTreeTemplate("LR2_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[0]), + "LR2_slope": DataTreeTemplate("LR2_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[1]), + "LR2_correlationCoefficient": DataTreeTemplate("LR2_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[2]), + "LR2": DataTreeTemplate("LR2<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR2<{0}>"], eval_segmented_linearRegression), + + "_LR2_log": DataTreeTemplate("_LR2_log<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], segmented_linearRegression_loglog), + "LR2_log_intercept": DataTreeTemplate("LR2_log_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[0]), + "LR2_log_slope": DataTreeTemplate("LR2_log_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[1]), + "LR2_log_correlationCoefficient": DataTreeTemplate("LR2_log_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[2]), + "LR2_log": DataTreeTemplate("LR2_log<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR2_log<{0}>"], eval_segmented_linearRegression_loglog), + } def compute_data(kind): @@ -402,6 +582,8 @@ def compute_data(kind): arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] + elif Data.kinds[arg_kind].type == "run_size_reduced": + arg_val = Data.kinds[arg_kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] else: raise NameError("Invalid data kind {0}".format(arg_kind)) args_val = args_val + (arg_val,) @@ -478,10 +660,13 @@ def compute_data(kind): def compute_templated_data(kind_template, template_args): if kind_template in Data.kind_templates: - dataType = Data.kind_templates[kind_template].makeDataTree(template_args) - if not dataType.kind in Data.kinds: - Data.kinds[dataType.kind] = dataType - Data.compute(dataType.kind) + kind = Data.kind_templates[kind_template].getKind(template_args) + if not kind in Data.kinds: + # compute args first to ensure arg kinds exist + for arg_kind in Data.kind_templates[kind_template].getArgs(template_args): + Data.compute(arg_kind) + Data.kinds[kind] = Data.kind_templates[kind_template].makeDataTree(template_args) + Data.compute(kind) else: raise NameError("Unkown kind template {}".format(kind_template)) @@ -754,55 +939,62 @@ def get_run_size_data(kind, kernel): return data -def plot_data(outputfile_name, ykind): - print("plotting {} {}".format(outputfile_name, ykind)) +def plot_data(outputfile_name, ykinds): + print("plotting {} {}".format(outputfile_name, ykinds)) - if not ykind in Data.kinds: - raise NameError("Unknown kind {}".format(ykind)) - - ylabel = ykind + ylabel = None yscale = "log" ylim = None xkind = "Problem size" - xlabel = xkind + xlabel = Data.kinds[xkind].label xscale = "log" xlim = None + for ykind in ykinds: + if not ykind in Data.kinds: + raise NameError("Unknown kind {}".format(ykind)) + if not ylabel: + ylabel = Data.kinds[ykind].label + elif ylabel != Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) + for kernel_index in range(0, Data.num_kernels): kernel_name = Data.kernels[kernel_index] - xaxes = get_run_size_data(xkind, kernel_index) - yaxes = get_run_size_data(ykind, kernel_index) + for ykind in ykinds: - for sweep_index in range(0, Data.num_sweeps): - sweep_dir_name = Data.sweeps[sweep_index] - sweep_marker = Data.sweep_markers[sweep_index] + xaxes = get_run_size_data(xkind, kernel_index) + yaxes = get_run_size_data(ykind, kernel_index) - if not sweep_dir_name in xaxes: - raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) + for sweep_index in range(0, Data.num_sweeps): + sweep_dir_name = Data.sweeps[sweep_index] + sweep_marker = Data.sweep_markers[sweep_index] - for data_name, ydata in yaxes[sweep_dir_name].items(): + if not sweep_dir_name in xaxes: + raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) - yname = "{} {}".format(data_name, sweep_dir_name) - yformat = "{}-".format(sweep_marker) - ycolor = (0.0, 0.0, 0.0, 1.0) - yaxis = ydata["data"] + for data_name, ydata in yaxes[sweep_dir_name].items(): - if ydata["type"] == "data": - variant_index = ydata["variant"] - tuning_index = ydata["tuning"] - ycolor = Data.variant_colors[variant_index] - yformat = "{}{}".format(sweep_marker, Data.tuning_formats[tuning_index]) + yname = "{} {} {}".format(Data.kinds[ykind].kind, data_name, sweep_dir_name) + yformat = "{}-".format(sweep_marker) + ycolor = (0.0, 0.0, 0.0, 1.0) + yaxis = ydata["data"] - if data_name in xaxes[sweep_dir_name]: - xaxis = xaxes[sweep_dir_name][data_name]["data"] - elif xkind in xaxes[sweep_dir_name]: - xaxis = xaxes[sweep_dir_name][xkind]["data"] - else: - raise NameError("Unknown xaxis for {}".format(data_name)) + if ydata["type"] == "data": + variant_index = ydata["variant"] + tuning_index = ydata["tuning"] + ycolor = Data.variant_colors[variant_index] + yformat = "{}{}".format(sweep_marker, Data.tuning_formats[tuning_index]) + + if data_name in xaxes[sweep_dir_name]: + xaxis = xaxes[sweep_dir_name][data_name]["data"] + elif xkind in xaxes[sweep_dir_name]: + xaxis = xaxes[sweep_dir_name][xkind]["data"] + else: + raise NameError("Unknown xaxis for {}".format(data_name)) - plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) + plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) fname = "{}_{}.png".format(outputfile_name, kernel_name) gname = "{}".format(kernel_name) @@ -859,6 +1051,7 @@ def main(argv): if opt in ("-o", "--output"): handle_num = 1 def fo(arg): + nonlocal outputfile outputfile = arg handle_arg = fo # multi arg options @@ -1027,9 +1220,10 @@ def fet(arg): Data.compute(kind) Data.kinds[kind].printData() - for kind in graph_kinds: - Data.compute(kind) - plot_data(outputfile, kind) + if len(graph_kinds) > 0: + for kind in graph_kinds: + Data.compute(kind) + plot_data(outputfile, graph_kinds) if __name__ == "__main__": main(sys.argv[1:]) From 5dd7d4b56160bbd1edbc8a4c115899bc4e6388ff Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 15:17:54 -0700 Subject: [PATCH 040/174] Add ability to graph bar charts across kernels --- scripts/sweep_graph.py | 182 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 177 insertions(+), 5 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index ccb4dfc2b..1984953e8 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -86,6 +86,12 @@ def make_color_tuple(r, g, b): g_timing_file_kind = "time(s)" +def first(vals): + return vals[0] + +def last(vals): + return vals[len(vals)-1] + def sum(vals): sum_val = 0 for val in vals: @@ -506,6 +512,9 @@ def makeDataTree(self, template_args): } kind_templates = { + "first": DataTreeTemplate("first<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], first), + "last": DataTreeTemplate("last<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], last), + "min": DataTreeTemplate("min<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], min), "max": DataTreeTemplate("max<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], max), "sum": DataTreeTemplate("sum<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], sum), @@ -858,7 +867,7 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): pass # could not convert data to float -def get_run_size_data(kind, kernel): +def get_plot_data(kind, kernel): if not kind in Data.kinds: raise NameError("Unknown kind {}".format(kind)) @@ -933,14 +942,43 @@ def get_run_size_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) + elif kind_meta.type == "run_size_reduced": + + if not kind in Data.kinds: + raise NameError("Unknown data kind {}".format(kind)) + kind_data = Data.kinds[kind].data + + for sweep_dir_name, sweep_data in kind_data.items(): + + data[sweep_dir_name] = {} + + if not kernel_index in sweep_data: + raise NameError("Unknown info kernel_index {}".format(kernel_index)) + + kernel_data = sweep_data[kernel_index] + + for variant_index, variant_data in kernel_data.items(): + variant_name = Data.variants[variant_index] + for tuning_index, val in variant_data.items(): + tuning_name = Data.tunings[tuning_index] + + data_name = "{}-{}".format(variant_name, tuning_name) + + if not data_name in data[sweep_dir_name]: + data[sweep_dir_name][data_name] = {"type": "data", + "variant": variant_index, + "tuning": tuning_index, + "data": [] } + + data[sweep_dir_name][data_name]["data"].append(val) + else: raise NameError("Unknown kind {} type {}".format(kind, kind_meta.type)) return data -def plot_data(outputfile_name, ykinds): - print("plotting {} {}".format(outputfile_name, ykinds)) +def plot_data_problem_sizes(outputfile_name, ykinds): ylabel = None yscale = "log" @@ -964,8 +1002,8 @@ def plot_data(outputfile_name, ykinds): for ykind in ykinds: - xaxes = get_run_size_data(xkind, kernel_index) - yaxes = get_run_size_data(ykind, kernel_index) + xaxes = get_plot_data(xkind, kernel_index) + yaxes = get_plot_data(ykind, kernel_index) for sweep_index in range(0, Data.num_sweeps): sweep_dir_name = Data.sweeps[sweep_index] @@ -1020,6 +1058,140 @@ def plot_data(outputfile_name, ykinds): plt.savefig(fname, dpi=150.0) plt.clf() +def plot_data_kernels(outputfile_name, ykinds): + + gname = None + + xlabel = "Kernel" + xscale = None + xlim = None + + ylabel = None + yscale = None + ylim = None + ywidth = None + + for ykind in ykinds: + if gname: + gname = "{} {}".format(gname, ykind) + else: + gname = "{}".format(ykind) + if not ykind in Data.kinds: + raise NameError("Unknown kind {}".format(ykind)) + if not ylabel: + ylabel = Data.kinds[ykind].label + elif ylabel != Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) + + kernel_data = { "kernel_names": [], + "kernel_centers": [], + "ynames": {}, + "ydata": {}, } + + for kernel_index in range(0, Data.num_kernels): + kernel_name = Data.kernels[kernel_index] + + kernel_data["kernel_names"].append(kernel_name) + kernel_data["kernel_centers"].append(kernel_index) + + for ykind in ykinds: + + yaxes = get_plot_data(ykind, kernel_index) + + for sweep_index in range(0, Data.num_sweeps): + sweep_dir_name = Data.sweeps[sweep_index] + + if not sweep_dir_name in yaxes: + raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) + + for data_name, ydata in yaxes[sweep_dir_name].items(): + assert(len(ydata["data"]) == 1) + + yname = "{} {}".format(data_name, sweep_dir_name) + if len(ykinds) > 1: + yname = "{} {}".format(Data.kinds[ykind].kind, yname) + + ycolor = (0.0, 0.0, 0.0, 1.0) + + if ydata["type"] == "data": + variant_index = ydata["variant"] + # tuning_index = ydata["tuning"] + ycolor = Data.variant_colors[variant_index] + + if not yname in kernel_data["ynames"]: + kernel_data["ynames"][yname] = len(kernel_data["ynames"]) + kernel_data["ydata"][yname] = { "color": ycolor, + "data": [], } + + # pad with 0s if find missing data + while len(kernel_data["ydata"][yname]["data"])+1 < len(kernel_data["kernel_names"]): + kernel_data["ydata"][yname]["data"].append(0.0) + + kernel_data["ydata"][yname]["data"].append(ydata["data"][0]) + + num_xticks = len(kernel_data["kernel_centers"]) + plt.figure(figsize=(max(num_xticks*0.5, 4), 6,)) + + y_n = len(kernel_data["ydata"]) + ywidth = 1.0 / (y_n+1) + for yname in kernel_data["ynames"]: + + y_i = kernel_data["ynames"][yname] + ydata = kernel_data["ydata"][yname] + + xaxis = [c + (y_i+1)/(y_n+1) - 0.5 for c in kernel_data["kernel_centers"]] + yaxis = ydata["data"] + + # pad with 0s if find missing data + while len(yaxis) < len(kernel_data["kernel_names"]): + yaxis.append(0.0) + + ycolor = ydata["color"] + + plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor) # ,edgecolor="grey") + + fname = "{}.png".format(outputfile_name) + if not gname: + gname = "{}".format("bar") + + xticks = kernel_data["kernel_centers"] + xtick_names = kernel_data["kernel_names"] + + if ylabel: + plt.ylabel(ylabel) + if yscale: + plt.yscale(yscale) + if ylim: + plt.ylim(ylim) + + if xlabel: + plt.xlabel(xlabel) + if xscale: + plt.xscale(xscale) + if xlim: + plt.xlim(xlim) + + plt.xticks(xticks, xtick_names, rotation=90) + + plt.title(gname) + plt.legend() + plt.grid(True) + + plt.savefig(fname, dpi=150.0, bbox_inches="tight") + plt.clf() + +def plot_data(outputfile_name, ykinds): + print("plotting {} {}".format(outputfile_name, ykinds)) + + func = None + for ykind in ykinds: + if Data.kinds[ykind].type == "run_size_reduced": + func = plot_data_kernels + else: + func = plot_data_problem_sizes + + func(outputfile_name, ykinds) + From 59cc13c2eae683fabd8fd0a531baa1ca82697ee9 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 15:20:15 -0700 Subject: [PATCH 041/174] Clarify segmented linear regression breakpoints --- scripts/sweep_graph.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 1984953e8..b5149b4a9 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -175,13 +175,20 @@ def segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR): def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, LR_right): lr_vals_left = None lr_vals_right = None - break_point = math.inf + break_point = None - if i > 0: + if i == 0: + lr_vals_right = LR_right[i] + break_point = xvals[i] - 1.0 + elif i > 0 and i < n: lr_vals_left = LR_left[i-1] - if i < n: lr_vals_right = LR_right[i] - break_point = xvals[i] + break_point = (xvals[i-1] + xvals[i]) / 2.0 + elif i == n: + lr_vals_left = LR_left[i-1] + break_point = xvals[i-1] + 1.0 + else: + assert(0) numer = 0.0 for j in range(0, n): From a1e172ec5d0d45355fa5e55b08b3c7d00a24ed9d Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 15:21:59 -0700 Subject: [PATCH 042/174] Add option to exclude sweeps --- scripts/sweep_graph.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index b5149b4a9..775861f78 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -268,6 +268,7 @@ class Data: num_sweeps = 0 sweeps = {} sweep_markers = {} + exclude_sweeps = {} num_run_sizes = 0 run_sizes = {} @@ -1274,6 +1275,11 @@ def ft(arg): def fet(arg): Data.exclude_tunings[arg] = arg handle_arg = fet + elif opt in ("-es", "--exclude-sweeps"): + handle_num = -1 + def fes(arg): + Data.exclude_sweeps[arg] = arg + handle_arg = fes if handle_num == 0: print(help_string) @@ -1310,6 +1316,9 @@ def fet(arg): sweep_dir_name = os.path.basename(sweep_dir_path) # print(sweep_dir_name, sweep_dir_path) + if sweep_dir_name in Data.exclude_sweeps: + continue + got_something = False for r0,sweep_subdir_names,f0 in os.walk(sweep_dir_path): From c48821265067a33e2fb4f238fa273a584b76fa0a Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 15:23:11 -0700 Subject: [PATCH 043/174] Add kernel groups to simplify plotting --- scripts/sweep_graph.py | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 775861f78..3d166d3ff 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -85,6 +85,55 @@ def make_color_tuple(r, g, b): g_runinfo_filename = "RAJAPerf-kernels.csv" g_timing_file_kind = "time(s)" +# Kernels sorted into categories based on performance bottlenecks + +g_known_kernel_groups = { + "bandwidth": { + "kind": "bandwidth(GiB/s)", + "kernels": [ "Basic_DAXPY", "Basic_DAXPY_ATOMIC", "Basic_INIT3", + "Basic_INIT_VIEW1D", "Basic_INIT_VIEW1D_OFFSET", + "Basic_MULADDSUB", "Lcals_DIFF_PREDICT", "Lcals_EOS", + "Lcals_FIRST_DIFF", "Lcals_FIRST_SUM", "Lcals_GEN_LIN_RECUR", + "Lcals_HYDRO_1D", "Lcals_PLANCKIAN", "Lcals_TRIDIAG_ELIM", + "Polybench_JACOBI_1D", "Stream_ADD", "Stream_COPY", + "Stream_MUL", "Stream_TRIAD", + + "Basic_IF_QUAD", "Basic_INDEXLIST", "Basic_INDEXLIST_3LOOP", + "Basic_NESTED_INIT", "Lcals_HYDRO_2D", "Lcals_INT_PREDICT", + "Polybench_FDTD_2D", "Polybench_HEAT_3D", + "Polybench_JACOBI_2D", "Stream_DOT", "Apps_CONVECTION3DPA", + "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_ENERGY", + "Apps_FIR", "Apps_MASS3DPA", "Apps_NODAL_ACCUMULATION_3D", + "Apps_PRESSURE", "Apps_VOL3D", "Algorithm_SCAN", + "Algorithm_REDUCE_SUM", ], + }, + "flops": { + "kind": "GFLOPS", + "kernels": [ "Basic_MAT_MAT_SHARED", "Polybench_2MM", "Polybench_3MM", + "Polybench_GEMM", + + "Polybench_HEAT_3D", "Apps_CONVECTION3DPA", + "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_FIR", + "Apps_MASS3DPA", "Apps_VOL3D", ], + }, + "reduce": { + "kind": "throughput(GProblem size/s)", + "kernels": [ "Basic_PI_REDUCE", "Basic_REDUCE3_INT", "Basic_REDUCE_STRUCT", + "Basic_TRAP_INT", "Lcals_FIRST_MIN", "Stream_DOT", + "Algorithm_REDUCE_SUM", ] + }, + "other": { + "kind": "throughput(GProblem size/s)", + "kernels": [ "Polybench_ADI", "Polybench_ATAX", "Polybench_FLOYD_WARSHALL", + "Polybench_GEMVER", "Polybench_GESUMMV", "Polybench_MVT", + "Apps_LTIMES", "Apps_LTIMES_NOVIEW", "Algorithm_SORT", + "Algorithm_SORTPAIRS", ] + }, + "launch_bound": { + "kind": "time/rep(us)", + "kernels": [ "Apps_HALOEXCHANGE", "Apps_HALOEXCHANGE_FUSED", ] + }, + } def first(vals): return vals[0] @@ -273,6 +322,9 @@ class Data: num_run_sizes = 0 run_sizes = {} + include_kernel_groups = {} + exclude_kernel_groups = {} + num_kernels = 0 kernels = {} include_kernels = {} @@ -1245,6 +1297,16 @@ def p(arg): def fg(arg): graph_kinds.append(arg) handle_arg = fg + elif opt in ("-kg", "--kernel-groups"): + handle_num = -1 + def fkg(arg): + Data.include_kernel_groups[arg] = arg + handle_arg = fkg + elif opt in ("-ekg", "--exclude-kernel-groups"): + handle_num = -1 + def fekg(arg): + Data.exclude_kernel_groups[arg] = arg + handle_arg = fekg elif opt in ("-k", "--kernels"): handle_num = -1 def fk(arg): @@ -1309,6 +1371,22 @@ def fes(arg): sweep_dir_paths.append(opt) i += 1 + for kernel_group in Data.include_kernel_groups.keys(): + if kernel_group in g_known_kernel_groups: + for kernel_name in g_known_kernel_groups[kernel_group]["kernels"]: + Data.include_kernels[kernel_name] = kernel_name + else: + print("Unknown kernel group {}".format(kernel_group)) + sys.exit(2) + + for kernel_group in Data.exclude_kernel_groups.keys(): + if kernel_group in g_known_kernel_groups: + for kernel_name in g_known_kernel_groups[kernel_group]["kernels"]: + Data.exclude_kernels[kernel_name] = kernel_name + else: + print("Unknown kernel group {}".format(kernel_group)) + sys.exit(2) + print("Input directories are \"{0}\"".format(sweep_dir_paths)) print("Output file is \"{0}\"".format(outputfile)) @@ -1386,6 +1464,12 @@ def fes(arg): print("run_sizes") print(" {}".format(run_sizes_string[2:])) + kernel_groups_string = "" + for kernel_group in g_known_kernel_groups: + kernel_groups_string += ", {}".format(kernel_group) + print("kernel groups") + print(" {}".format(kernel_groups_string[2:])) + kernel_string = "" for v in range(0, Data.num_kernels): kernel_string += ", {}".format(Data.kernels[v]) From 2098f854187978936dd4fb8120f8e7e91b702695 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 17:30:55 -0700 Subject: [PATCH 044/174] Add more generic data tree class --- scripts/sweep_graph.py | 452 +++++++++++++++++++++++++---------------- 1 file changed, 281 insertions(+), 171 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 3d166d3ff..2ed539734 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -68,7 +68,9 @@ def make_color_tuple(r, g, b): "Lambda_HIP": {"color": color_mul(g_color_hip, g_color_lambda_factor)}, "RAJA_HIP": {"color": color_mul(g_color_hip, g_color_raja_factor)} } -g_known_tunings = { "default": {"format": "-"}, +g_best_tuning_name = "best" +g_known_tunings = { g_best_tuning_name: {"format": "-"}, + "default": {"format": "-"}, "block_25": {"format": "-"}, "block_32": {"format": ":"}, "block_64": {"format": "-."}, @@ -336,19 +338,67 @@ class Data: include_variants = {} exclude_variants = {} + use_best_tuning = False num_tunings = 0 tunings = {} tuning_formats = {} include_tunings = {} exclude_tunings = {} + def add_variant(variant_name): + variant_index = Data.num_variants + Data.num_variants += 1 + Data.variants[variant_name] = variant_index + Data.variants[variant_index] = variant_name + if variant_name in g_known_variants: + variant_color = g_known_variants[variant_name]["color"] + Data.variant_colors[variant_name] = variant_color + Data.variant_colors[variant_index] = variant_color + else: + print("Unknown variant {0}".format(variant_name)) + sys.exit(1) + + def add_tuning(tuning_name): + tuning_index = Data.num_tunings + Data.num_tunings += 1 + Data.tunings[tuning_name] = tuning_index + Data.tunings[tuning_index] = tuning_name + if tuning_name in g_known_tunings: + tuning_format = g_known_tunings[tuning_name]["format"] + Data.tuning_formats[tuning_name] = tuning_format + Data.tuning_formats[tuning_index] = tuning_format + else: + print("Unknown tuning {0}".format(tuning_name)) + sys.exit(1) + + + axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", + "run_size": 1, 1: "run_size", + "kernel_index": 2, 2: "kernel_index", + "variant_index": 3, 3: "variant_index", + "tuning_index": 4, 4: "tuning_index", } + + def get_index_name(axis_index, index): + if axis_index == Data.axes["sweep_dir_name"]: + return index # Data.sweeps[index] + elif axis_index == Data.axes["run_size"]: + return index; + elif axis_index == Data.axes["kernel_index"]: + return Data.kernels[index] + elif axis_index == Data.axes["variant_index"]: + return Data.variants[index] + elif axis_index == Data.axes["tuning_index"]: + return Data.tunings[index] + else: + raise NameError("Unknown axis index {}".format(axis_index)) + # multi-dimensional array structured like this # directory name - platform, compiler, etc # run size - problem size, for run_sizes # kernel index - for kernels - info_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", - "run_size": 1, 1: "run_size", - "kernel_index": 2, 2: "kernel_index", } + info_axes = [ axes["sweep_dir_name"], + axes["run_size"], + axes["kernel_index"], ] # multi-dimensional array structured like this # directory name - platform, compiler, etc @@ -356,67 +406,161 @@ class Data: # kernel index - for kernels # variant index - for variants # tuning index - for tunings - data_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", - "run_size": 1, 1: "run_size", - "kernel_index": 2, 2: "kernel_index", - "variant_index": 3, 3: "variant_index", - "tuning_index": 4, 4: "tuning_index", } + data_axes = [ axes["sweep_dir_name"], + axes["run_size"], + axes["kernel_index"], + axes["variant_index"], + axes["tuning_index"], ] # multi-dimensional array structured like data but missing some dimensions # directory name - platform, compiler, etc # kernel index - for kernels # variant index - for variants # tuning index - for tunings - run_size_reduced_axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", - "kernel_index": 1, 1: "kernel_index", - "variant_index": 2, 2: "variant_index", - "tuning_index": 3, 3: "tuning_index", } + run_size_reduced_axes = [ axes["sweep_dir_name"], + axes["kernel_index"], + axes["variant_index"], + axes["tuning_index"], ] data_model_kind = "time(s)" - def DataTreeIterator0(self, data_tree): - assert(data_tree.num_axes == 0) - yield data_tree.data - def DataTreeIterator1(self, data_tree): - assert(data_tree.num_axes == 1) + + def MultiAxesTreeIterator0(data_tree): + assert(len(data_tree.axes) == 0) + yield {} + + def MultiAxesTreeIterator1(data_tree): + assert(len(data_tree.axes) == 1) assert(data_tree.data) for k0 in data_tree.data.keys(): - yield (k0,) + yield {data_tree.axes[0]: k0,} - def DataTreeIterator2(self, data_tree): - assert(data_tree.num_axes == 2) + def MultiAxesTreeIterator2(data_tree): + assert(len(data_tree.axes) == 2) assert(data_tree.data) for k0, v0 in data_tree.data.items(): for k1 in v0.keys(): - yield (k0, k1,) + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1,} - def DataTreeIterator3(self, data_tree): - assert(data_tree.num_axes == 3) + def MultiAxesTreeIterator3(data_tree): + assert(len(data_tree.axes) == 3) assert(data_tree.data) for k0, v0 in data_tree.data.items(): for k1, v1 in v0.items(): for k2 in v1.keys(): - yield (k0, k1, k2,) + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2,} - def DataTreeIterator4(self, data_tree): - assert(data_tree.num_axes == 4) + def MultiAxesTreeIterator4(data_tree): + assert(len(data_tree.axes) == 4) assert(data_tree.data) for k0, v0 in data_tree.data.items(): for k1, v1 in v0.items(): for k2, v2 in v1.items(): for k3 in v2.keys(): - yield (k0, k1, k2, k3,) + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3,} - def DataTreeIterator5(self, data_tree): - assert(data_tree.num_axes == 5) + def MultiAxesTreeIterator5(data_tree): + assert(len(data_tree.axes) == 5) assert(data_tree.data) for k0, v0 in data_tree.data.items(): for k1, v1 in v0.items(): for k2, v2 in v1.items(): for k3, v3 in v2.items(): for k4 in v3.keys(): - yield (k0, k1, k2, k3, k4,) + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, + data_tree.axes[4]: k4,} + + class MultiAxesTree: + # axes is an array of axis_indices in the depth order they occur in the tree + # indices is a dictionary of axis_indices to indices + + def __init__(self, axes): + self.axes = axes + self.data = {} + + def check(self, axes_index): + data = self.data + for axis_index in self.axes: + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + return False + data = data[index] + return True + + def get(self, axes_index): + data = self.data + for axis_index in self.axes: + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + raise NameError("Missing index {}".format(index)) + data = data[index] + return data + + def set(self, axes_index, val): + data = self.data + for i in range(0, len(self.axes)-1): + axis_index = self.axes[i] + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + data[index] = {} + data = data[index] + axis_index = self.axes[len(self.axes)-1] + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + data[index] = val + + def print(self, axes_index): + data = self.data + buf = " " # leading two spaces + for axis_index in self.axes: + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + raise NameError("Missing index {}".format(index)) + data = data[index] + buf = "{} {}".format(buf, Data.get_index_name(axis_index, index)) + print("{} {}".format(buf, data)) + + def __iter__(self): + assert(self.data != None) + if len(self.axes) == 0: + return Data.MultiAxesTreeIterator0(self) + elif len(self.axes) == 1: + return Data.MultiAxesTreeIterator1(self) + elif len(self.axes) == 2: + return Data.MultiAxesTreeIterator2(self) + elif len(self.axes) == 3: + return Data.MultiAxesTreeIterator3(self) + elif len(self.axes) == 4: + return Data.MultiAxesTreeIterator4(self) + elif len(self.axes) == 5: + return Data.MultiAxesTreeIterator5(self) + else: + raise ValueError + class DataTree: @@ -425,7 +569,7 @@ def __init__(self, kind, label, type, axes, args=None, func=None): self.label = label self.type = type self.axes = axes - self.num_axes = len(self.axes) / 2 + self.num_axes = len(self.axes) self.args = args self.func = func @@ -435,60 +579,30 @@ def __init__(self, kind, label, type, axes, args=None, func=None): self.data = None + def makeData(self): + self.data = Data.MultiAxesTree(self.axes) + + def check(self, axes_index): + return self.data.check(axes_index) + + def get(self, axes_index): + return self.data.get(axes_index) + + def set(self, axes_index, val): + return self.data.set(axes_index, val) + def __iter__(self): - if self.num_axes == 0: - return Data.DataTreeIterator0(self) - elif self.num_axes == 1: - return Data.DataTreeIterator1(self) - elif self.num_axes == 2: - return Data.DataTreeIterator2(self) - elif self.num_axes == 3: - return Data.DataTreeIterator3(self) - elif self.num_axes == 4: - return Data.DataTreeIterator4(self) - elif self.num_axes == 5: - return Data.DataTreeIterator5(self) - else: - raise ValueError + return iter(self.data) def printData(self): - if self.data: + if self.data.data: print("printData {}:".format(self.kind)) else: print("printData {}: empty".format(self.kind)) return - if self.type == "info": - for sweep_dir_name, sweep_info in self.data.items(): - for run_size, run_info in sweep_info.items(): - for kernel_index, val in run_info.items(): - kernel_name = Data.kernels[kernel_index] - print("{} {} {} {}".format(sweep_dir_name, run_size, kernel_name, val)) - - elif self.type == "data" or \ - self.type == "computed": - for sweep_dir_name, sweep_data in self.data.items(): - for run_size, run_data in sweep_data.items(): - for kernel_index, kernel_data in run_data.items(): - kernel_name = Data.kernels[kernel_index] - for variant_index, variant_data in kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, val in variant_data.items(): - tuning_name = Data.tunings[tuning_index] - print("{} {} {} {} {} {}".format(sweep_dir_name, run_size, kernel_name, variant_name, tuning_name, val)) - - elif self.type == "run_size_reduced": - for sweep_dir_name, sweep_data in self.data.items(): - for kernel_index, kernel_data in sweep_data.items(): - kernel_name = Data.kernels[kernel_index] - for variant_index, variant_data in kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, val in variant_data.items(): - tuning_name = Data.tunings[tuning_index] - print("{} {} {} {} {}".format(sweep_dir_name, kernel_name, variant_name, tuning_name, val)) - - else: - raise NameError("Can not print type {}".format(self.type)) + for axes_index in self.data: + self.data.print(axes_index) class DataTreeTemplate: @@ -631,34 +745,29 @@ def compute_data(kind): if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) - Data.kinds[kind].data = {} - for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.items(): - Data.kinds[kind].data[sweep_dir_name] = {} + Data.kinds[kind].makeData() + for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.data.items(): for run_size, model_run_data in model_sweep_data.items(): - Data.kinds[kind].data[sweep_dir_name][run_size] = {} for kernel_index, model_kernel_data in model_run_data.items(): kernel_name = Data.kernels[kernel_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index] = {} for variant_index, model_variant_data in model_kernel_data.items(): variant_name = Data.variants[variant_index] - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} for tuning_index, model_val in model_variant_data.items(): tuning_name = Data.tunings[tuning_index] + axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, + Data.axes["run_size"]: run_size, + Data.axes["kernel_index"]: kernel_index, + Data.axes["variant_index"]: variant_index, + Data.axes["tuning_index"]: tuning_index, } + args_val = () for arg_kind in compute_args: - if Data.kinds[arg_kind].type == "info": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index] - elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] - elif Data.kinds[arg_kind].type == "run_size_reduced": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] - else: - raise NameError("Invalid data kind {0}".format(arg_kind)) + arg_val = Data.kinds[arg_kind].get(axes_index) args_val = args_val + (arg_val,) val = compute_func(*args_val) - Data.kinds[kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + Data.kinds[kind].set(axes_index, val) elif Data.kinds[kind].type == "run_size_reduced": @@ -675,54 +784,45 @@ def compute_data(kind): if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) - Data.kinds[kind].data = {} - for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.items(): - Data.kinds[kind].data[sweep_dir_name] = {} + Data.kinds[kind].makeData() + for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.data.items(): for run_size, model_run_data in model_sweep_data.items(): for kernel_index, model_kernel_data in model_run_data.items(): kernel_name = Data.kernels[kernel_index] - if not kernel_index in Data.kinds[kind].data[sweep_dir_name]: - Data.kinds[kind].data[sweep_dir_name][kernel_index] = {} for variant_index, model_variant_data in model_kernel_data.items(): variant_name = Data.variants[variant_index] - if not variant_index in Data.kinds[kind].data[sweep_dir_name][kernel_index]: - Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index] = {} for tuning_index, model_val in model_variant_data.items(): tuning_name = Data.tunings[tuning_index] - if not tuning_index in Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index]: + axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, + Data.axes["run_size"]: run_size, + Data.axes["kernel_index"]: kernel_index, + Data.axes["variant_index"]: variant_index, + Data.axes["tuning_index"]: tuning_index, } + + if not Data.kinds[kind].check(axes_index): args_val = () for arg_kind in reduce_args: - if Data.kinds[arg_kind].type == "info": - arg_val = [] - elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": - arg_val = [] - elif Data.kinds[arg_kind].type == "run_size_reduced": - arg_val = Data.kinds[arg_kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] + if Data.kinds[arg_kind].type == "run_size_reduced": + arg_val = Data.kinds[arg_kind].get(axes_index) else: - raise NameError("Invalid data kind {0}".format(arg_kind)) + arg_val = [] args_val = args_val + (arg_val,) - Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] = args_val + Data.kinds[kind].set(axes_index, args_val) else: - args_val = Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] + args_val = Data.kinds[kind].get(axes_index) args_idx = 0 for arg_kind in reduce_args: - if Data.kinds[arg_kind].type == "info": - args_val[args_idx].append(Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index]) - elif Data.kinds[arg_kind].type == "data" or Data.kinds[arg_kind].type == "computed": - args_val[args_idx].append(Data.kinds[arg_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index]) - elif Data.kinds[arg_kind].type == "run_size_reduced": + if Data.kinds[arg_kind].type == "run_size_reduced": pass else: - raise NameError("Invalid data kind {0}".format(arg_kind)) + args_val[args_idx].append(Data.kinds[arg_kind].get(axes_index)) args_idx += 1 - for sweep_dir_name, sweep_data in Data.kinds[kind].data.items(): - for kernel_index, kernel_data in sweep_data.items(): - for variant_index, variant_data in kernel_data.items(): - for tuning_index, args_val in variant_data.items(): - Data.kinds[kind].data[sweep_dir_name][kernel_index][variant_index][tuning_index] = reduce_func(*args_val) + for axes_index in Data.kinds[kind]: + args_val = Data.kinds[kind].get(axes_index) + Data.kinds[kind].set(axes_index, reduce_func(*args_val)) else: raise NameError("Unknown kind type {}".format(Data.kinds[kind].type)) @@ -799,16 +899,16 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): sys.exit(1) if not Data.kinds[info_kind].data: # add data to kind - Data.kinds[info_kind].data = {} - if not sweep_dir_name in Data.kinds[info_kind].data: + Data.kinds[info_kind].makeData() + if not sweep_dir_name in Data.kinds[info_kind].data.data: # add new sweep to global data - Data.kinds[info_kind].data[sweep_dir_name] = {} - if run_size in Data.kinds[info_kind].data[sweep_dir_name]: + Data.kinds[info_kind].data.data[sweep_dir_name] = {} + if run_size in Data.kinds[info_kind].data.data[sweep_dir_name]: print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size)) sys.exit(1) else: # add new size to global data - Data.kinds[info_kind].data[sweep_dir_name][run_size] = {} + Data.kinds[info_kind].data.data[sweep_dir_name][run_size] = {} # make map of columns to names c_to_info_kinds[c] = info_kind c_to_info_kinds[info_kind] = c @@ -832,7 +932,12 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): # add data to global structure val = int(row[c].strip()) # print(kernel_index, kernel_name, info_kind, val) - Data.kinds[info_kind].data[sweep_dir_name][run_size][kernel_index] = val + + axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, + Data.axes["run_size"]: run_size, + Data.axes["kernel_index"]: kernel_index, } + + Data.kinds[info_kind].set(axes_index, val) except ValueError: pass # could not convert data to int @@ -846,11 +951,11 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if not data_kind in Data.kinds: raise NameError("Unknown kind {}".format(data_kind)) if not Data.kinds[data_kind].data: - Data.kinds[data_kind].data = {} - if not sweep_dir_name in Data.kinds[data_kind].data: - Data.kinds[data_kind].data[sweep_dir_name] = {} - if not run_size in Data.kinds[data_kind].data[sweep_dir_name]: - Data.kinds[data_kind].data[sweep_dir_name][run_size] = {} + Data.kinds[data_kind].makeData() + if not sweep_dir_name in Data.kinds[data_kind].data.data: + Data.kinds[data_kind].data.data[sweep_dir_name] = {} + if not run_size in Data.kinds[data_kind].data.data[sweep_dir_name]: + Data.kinds[data_kind].data.data[sweep_dir_name][run_size] = {} else: raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size)) @@ -862,44 +967,34 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if len(c_to_variant_index) == 0: for c in range(1, len(row)): variant_name = row[c].strip() + variant_index = -1 if variant_name in Data.variants: - pass + variant_index = Data.variants[variant_name] elif (len(Data.include_variants) == 0 or variant_name in Data.include_variants) and (not variant_name in Data.exclude_variants): - variant_index = Data.num_variants - Data.num_variants += 1 - Data.variants[variant_name] = variant_index - Data.variants[variant_index] = variant_name - if variant_name in g_known_variants: - variant_color = g_known_variants[variant_name]["color"] - Data.variant_colors[variant_name] = variant_color - Data.variant_colors[variant_index] = variant_color - else: - print("Unknown variant {0}".format(variant_name)) - sys.exit(1) + Data.add_variant(variant_name) + variant_index = Data.variants[variant_name] else: - Data.variants[variant_name] = -1 + variant_index = -1 + c_to_variant_index[c] = variant_index - c_to_variant_index[c] = Data.variants[variant_name] elif len(c_to_tuning_index) == 0: for c in range(1, len(row)): tuning_name = row[c].strip() + tuning_index = None if tuning_name in Data.tunings: - pass + tuning_index = Data.tunings[tuning_name] elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): - tuning_index = Data.num_tunings - Data.num_tunings += 1 - Data.tunings[tuning_name] = tuning_index - Data.tunings[tuning_index] = tuning_name - if tuning_name in g_known_tunings: - tuning_format = g_known_tunings[tuning_name]["format"] - Data.tuning_formats[tuning_name] = tuning_format - Data.tuning_formats[tuning_index] = tuning_format + if Data.use_best_tuning: + if not g_best_tuning_name in Data.tunings: + Data.add_tuning(g_best_tuning_name) + tuning_index = Data.tunings[g_best_tuning_name] else: - print("Unknown tuning {0}".format(tuning_name)) - sys.exit(1) + Data.add_tuning(tuning_name) + tuning_index = Data.tunings[tuning_name] else: - Data.tunings[tuning_name] = -1 - c_to_tuning_index[c] = Data.tunings[tuning_name] + tuning_index = -1 + c_to_tuning_index[c] = tuning_index + else: print("Unknown row {0}".format(row)) sys.exit(1); @@ -911,18 +1006,28 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): else: continue # skip kernel - Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index] = {} + Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index] = {} for c in range(1, len(row)): variant_index = c_to_variant_index[c] tuning_index = c_to_tuning_index[c] if variant_index < 0 or tuning_index < 0: continue # ignore data + + axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, + Data.axes["run_size"]: run_size, + Data.axes["kernel_index"]: kernel_index, + Data.axes["variant_index"]: variant_index, + Data.axes["tuning_index"]: tuning_index, } + try: val = float(row[c].strip()) # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) - if not variant_index in Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index]: - Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index][variant_index] = {} - Data.kinds[data_kind].data[sweep_dir_name][run_size][kernel_index][variant_index][tuning_index] = val + if not variant_index in Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index]: + Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index][variant_index] = {} + if Data.use_best_tuning and tuning_index in Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index][variant_index]: + Data.kinds[data_kind].set(axes_index, min(val, Data.kinds[data_kind].get(axes_index))) + else: + Data.kinds[data_kind].set(axes_index, val) except ValueError: pass # could not convert data to float @@ -954,7 +1059,7 @@ def get_plot_data(kind, kernel): if not kind in Data.kinds: raise NameError("Unknown info kind {}".format(kind)) - kind_info = Data.kinds[kind].data + kind_info = Data.kinds[kind].data.data for sweep_dir_name, sweep_info in kind_info.items(): @@ -974,7 +1079,7 @@ def get_plot_data(kind, kernel): if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) - kind_data = Data.kinds[kind].data + kind_data = Data.kinds[kind].data.data for sweep_dir_name, sweep_data in kind_data.items(): @@ -1006,7 +1111,7 @@ def get_plot_data(kind, kernel): if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) - kind_data = Data.kinds[kind].data + kind_data = Data.kinds[kind].data.data for sweep_dir_name, sweep_data in kind_data.items(): @@ -1272,13 +1377,15 @@ def main(argv): sys.exit(2) elif opt[0] == "-": + handle_num = None + handle_arg = None # no arg options if opt in ("-h", "--help"): print(help_string) sys.exit() - - handle_num = 0 - handle_arg = None + elif opt in ("-ubt", "--use-best-tuning"): + handle_num = 0 + Data.use_best_tuning = True # single arg options if opt in ("-o", "--output"): handle_num = 1 @@ -1343,10 +1450,12 @@ def fes(arg): Data.exclude_sweeps[arg] = arg handle_arg = fes - if handle_num == 0: + # error unknown opt + if handle_num == None: print(help_string) sys.exit(2) + # fixed num args elif handle_num > 0: if not i+handle_num < len(argv): print("Missing option to {}".format(opt)) @@ -1359,7 +1468,8 @@ def fes(arg): handle_arg(arg) i += handle_num - else: + # unfixed num args + elif handle_num < 0: while i+1 < len(argv): arg = argv[i+1] if arg[0] == "-": From 1e3824c2c66e1aa79bc7564702b795da01b97d0e Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 21:00:48 -0700 Subject: [PATCH 045/174] remove use test tuning --- scripts/sweep_graph.py | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 2ed539734..b2faf139b 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -68,9 +68,7 @@ def make_color_tuple(r, g, b): "Lambda_HIP": {"color": color_mul(g_color_hip, g_color_lambda_factor)}, "RAJA_HIP": {"color": color_mul(g_color_hip, g_color_raja_factor)} } -g_best_tuning_name = "best" -g_known_tunings = { g_best_tuning_name: {"format": "-"}, - "default": {"format": "-"}, +g_known_tunings = { "default": {"format": "-"}, "block_25": {"format": "-"}, "block_32": {"format": ":"}, "block_64": {"format": "-."}, @@ -338,7 +336,6 @@ class Data: include_variants = {} exclude_variants = {} - use_best_tuning = False num_tunings = 0 tunings = {} tuning_formats = {} @@ -984,13 +981,8 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if tuning_name in Data.tunings: tuning_index = Data.tunings[tuning_name] elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): - if Data.use_best_tuning: - if not g_best_tuning_name in Data.tunings: - Data.add_tuning(g_best_tuning_name) - tuning_index = Data.tunings[g_best_tuning_name] - else: - Data.add_tuning(tuning_name) - tuning_index = Data.tunings[tuning_name] + Data.add_tuning(tuning_name) + tuning_index = Data.tunings[tuning_name] else: tuning_index = -1 c_to_tuning_index[c] = tuning_index @@ -1006,7 +998,6 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): else: continue # skip kernel - Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index] = {} for c in range(1, len(row)): variant_index = c_to_variant_index[c] tuning_index = c_to_tuning_index[c] @@ -1022,12 +1013,7 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): try: val = float(row[c].strip()) # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) - if not variant_index in Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index]: - Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index][variant_index] = {} - if Data.use_best_tuning and tuning_index in Data.kinds[data_kind].data.data[sweep_dir_name][run_size][kernel_index][variant_index]: - Data.kinds[data_kind].set(axes_index, min(val, Data.kinds[data_kind].get(axes_index))) - else: - Data.kinds[data_kind].set(axes_index, val) + Data.kinds[data_kind].set(axes_index, val) except ValueError: pass # could not convert data to float @@ -1383,9 +1369,6 @@ def main(argv): if opt in ("-h", "--help"): print(help_string) sys.exit() - elif opt in ("-ubt", "--use-best-tuning"): - handle_num = 0 - Data.use_best_tuning = True # single arg options if opt in ("-o", "--output"): handle_num = 1 From 0d3e5be331d3d73cbe047b7836db2fa0667a1633 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 21:02:11 -0700 Subject: [PATCH 046/174] rename some variables --- scripts/sweep_graph.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index b2faf139b..9fce04c18 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1040,12 +1040,10 @@ def get_plot_data(kind, kernel): data = {} - kind_meta = Data.kinds[kind] - if kind_meta.type == "info": + kind_data = Data.kinds[kind] + if kind_data.type == "info": - if not kind in Data.kinds: - raise NameError("Unknown info kind {}".format(kind)) - kind_info = Data.kinds[kind].data.data + kind_info = kind_data.data.data for sweep_dir_name, sweep_info in kind_info.items(): @@ -1061,11 +1059,9 @@ def get_plot_data(kind, kernel): val = run_info[kernel_index] data[sweep_dir_name][kind]["data"].append(val) - elif kind_meta.type == "data" or kind_meta.type == "computed": + elif kind_data.type == "data" or kind_data.type == "computed": - if not kind in Data.kinds: - raise NameError("Unknown data kind {}".format(kind)) - kind_data = Data.kinds[kind].data.data + kind_data = kind_data.data.data for sweep_dir_name, sweep_data in kind_data.items(): @@ -1093,11 +1089,9 @@ def get_plot_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) - elif kind_meta.type == "run_size_reduced": + elif kind_data.type == "run_size_reduced": - if not kind in Data.kinds: - raise NameError("Unknown data kind {}".format(kind)) - kind_data = Data.kinds[kind].data.data + kind_data = kind_data.data.data for sweep_dir_name, sweep_data in kind_data.items(): @@ -1124,7 +1118,7 @@ def get_plot_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) else: - raise NameError("Unknown kind {} type {}".format(kind, kind_meta.type)) + raise NameError("Unknown kind {} type {}".format(kind, kind_data.type)) return data From e2eb0bfdbc609e8b07b70b9bffe956b0281740b9 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 24 May 2022 23:55:09 -0700 Subject: [PATCH 047/174] Switched to more flexible copmute scheme Now you can reduce over arbitrary axes for example min[tuning_index] will yield the min time across all tunings. --- scripts/sweep_graph.py | 603 ++++++++++++++++++++++++----------------- 1 file changed, 359 insertions(+), 244 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 9fce04c18..f1a79e1a6 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -182,7 +182,7 @@ def linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum): return (intercept, slope, correlation_coefficient) # returns (intercept, slope, correlation_coefficient) -def linearRegression(xvals, yvals): +def linearRegression(yvals, xvals): assert(len(xvals) == len(yvals)) n = len(xvals) xsum = sum(xvals) @@ -192,17 +192,17 @@ def linearRegression(xvals, yvals): xysum = sum([xvals[i]*yvals[i] for i in range(0, n)]) return linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) -def eval_linearRegression(xval, lr_vals): +def eval_linearRegression(lr_vals, xval): return lr_vals[0] + lr_vals[1]*xval # returns (intercept, slope, correlation_coefficient) -def linearRegression_loglog(xvals, yvals): +def linearRegression_loglog(yvals, xvals): assert(len(xvals) == len(yvals)) xlogvals = [math.log(x, 2) for x in xvals] ylogvals = [math.log(y, 2) for y in yvals] - return linearRegression(xlogvals, ylogvals) + return linearRegression(ylogvals, xlogvals) -def eval_linearRegression_loglog(xval, lr_vals): +def eval_linearRegression_loglog(lr_vals, xval): return math.pow(2, lr_vals[0])*math.pow(xval, lr_vals[1]) @@ -248,7 +248,7 @@ def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, L lr_vals = lr_vals_left else: lr_vals = lr_vals_right - lr_yval = eval_linearRegression(xval, lr_vals) + lr_yval = eval_linearRegression(lr_vals, xval) numer += (yval - lr_yval)*(yval - lr_yval) correlation_coefficient = 1.0 - numer / denom @@ -258,7 +258,7 @@ def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, L ret[2] = correlation_coefficient # returns ([break points...], [linear regressions...], correlation_coefficient) -def segmented_linearRegression(xvals, yvals): +def segmented_linearRegression(yvals, xvals): assert(len(xvals) == len(yvals)) N = len(xvals) @@ -287,7 +287,7 @@ def segmented_linearRegression(xvals, yvals): return (*ret,) -def find_segment(xval, break_points): +def find_segment(break_points, xval): break_i = len(break_points) for i in range(0, len(break_points)): break_point = break_points[i] @@ -296,20 +296,20 @@ def find_segment(xval, break_points): break return break_i -def eval_segmented_linearRegression(xval, slr_vals): - break_i = find_segment(xval, slr_vals[0]) - return eval_linearRegression(xval, slr_vals[1][break_i]) +def eval_segmented_linearRegression(slr_vals, xval): + break_i = find_segment(slr_vals[0], xval) + return eval_linearRegression(slr_vals[1][break_i], xval) # returns ([break points...], [linear regressions...], correlation_coefficient) -def segmented_linearRegression_loglog(xvals, yvals): +def segmented_linearRegression_loglog(yvals, xvals): assert(len(xvals) == len(yvals)) xlogvals = [math.log(x, 2) for x in xvals] ylogvals = [math.log(y, 2) for y in yvals] - return segmented_linearRegression(xlogvals, ylogvals) + return segmented_linearRegression(ylogvals, xlogvals) -def eval_segmented_linearRegression_loglog(xval, slr_vals): - break_i = find_segment(math.log(xval, 2), slr_vals[0]) - return eval_linearRegression_loglog(xval, slr_vals[1][break_i]) +def eval_segmented_linearRegression_loglog(slr_vals, xval): + break_i = find_segment(slr_vals[0], math.log(xval, 2)) + return eval_linearRegression_loglog(slr_vals[1][break_i], xval) class Data: @@ -368,7 +368,7 @@ def add_tuning(tuning_name): print("Unknown tuning {0}".format(tuning_name)) sys.exit(1) - + num_axes = 5 axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", "run_size": 1, 1: "run_size", "kernel_index": 2, 2: "kernel_index", @@ -423,17 +423,18 @@ def get_index_name(axis_index, index): - def MultiAxesTreeIterator0(data_tree): + def MultiAxesTreeKeyGenerator0(data_tree): assert(len(data_tree.axes) == 0) - yield {} + if False: + yield {} - def MultiAxesTreeIterator1(data_tree): + def MultiAxesTreeKeyGenerator1(data_tree): assert(len(data_tree.axes) == 1) assert(data_tree.data) for k0 in data_tree.data.keys(): yield {data_tree.axes[0]: k0,} - def MultiAxesTreeIterator2(data_tree): + def MultiAxesTreeKeyGenerator2(data_tree): assert(len(data_tree.axes) == 2) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -441,7 +442,7 @@ def MultiAxesTreeIterator2(data_tree): yield {data_tree.axes[0]: k0, data_tree.axes[1]: k1,} - def MultiAxesTreeIterator3(data_tree): + def MultiAxesTreeKeyGenerator3(data_tree): assert(len(data_tree.axes) == 3) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -451,7 +452,7 @@ def MultiAxesTreeIterator3(data_tree): data_tree.axes[1]: k1, data_tree.axes[2]: k2,} - def MultiAxesTreeIterator4(data_tree): + def MultiAxesTreeKeyGenerator4(data_tree): assert(len(data_tree.axes) == 4) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -463,7 +464,7 @@ def MultiAxesTreeIterator4(data_tree): data_tree.axes[2]: k2, data_tree.axes[3]: k3,} - def MultiAxesTreeIterator5(data_tree): + def MultiAxesTreeKeyGenerator5(data_tree): assert(len(data_tree.axes) == 5) assert(data_tree.data) for k0, v0 in data_tree.data.items(): @@ -477,11 +478,67 @@ def MultiAxesTreeIterator5(data_tree): data_tree.axes[3]: k3, data_tree.axes[4]: k4,} + def MultiAxesTreeItemGenerator0(data_tree): + assert(len(data_tree.axes) == 0) + if False: + yield ({},None,) + + def MultiAxesTreeItemGenerator1(data_tree): + assert(len(data_tree.axes) == 1) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + yield ({data_tree.axes[0]: k0,}, v0,) + + def MultiAxesTreeItemGenerator2(data_tree): + assert(len(data_tree.axes) == 2) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1,}, v1,) + + def MultiAxesTreeItemGenerator3(data_tree): + assert(len(data_tree.axes) == 3) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2,}, v2,) + + def MultiAxesTreeItemGenerator4(data_tree): + assert(len(data_tree.axes) == 4) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3,}, v3,) + + def MultiAxesTreeItemGenerator5(data_tree): + assert(len(data_tree.axes) == 5) + assert(data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + for k4, v4 in v3.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, + data_tree.axes[4]: k4,}, v4,) + class MultiAxesTree: # axes is an array of axis_indices in the depth order they occur in the tree # indices is a dictionary of axis_indices to indices def __init__(self, axes): + assert(axes) self.axes = axes self.data = {} @@ -541,44 +598,80 @@ def print(self, axes_index): buf = "{} {}".format(buf, Data.get_index_name(axis_index, index)) print("{} {}".format(buf, data)) - def __iter__(self): + def keys(self): assert(self.data != None) if len(self.axes) == 0: - return Data.MultiAxesTreeIterator0(self) + return Data.MultiAxesTreeKeyGenerator0(self) elif len(self.axes) == 1: - return Data.MultiAxesTreeIterator1(self) + return Data.MultiAxesTreeKeyGenerator1(self) elif len(self.axes) == 2: - return Data.MultiAxesTreeIterator2(self) + return Data.MultiAxesTreeKeyGenerator2(self) elif len(self.axes) == 3: - return Data.MultiAxesTreeIterator3(self) + return Data.MultiAxesTreeKeyGenerator3(self) elif len(self.axes) == 4: - return Data.MultiAxesTreeIterator4(self) + return Data.MultiAxesTreeKeyGenerator4(self) elif len(self.axes) == 5: - return Data.MultiAxesTreeIterator5(self) + return Data.MultiAxesTreeKeyGenerator5(self) else: raise ValueError + def items(self): + assert(self.data != None) + if len(self.axes) == 0: + return Data.MultiAxesTreeItemGenerator0(self) + elif len(self.axes) == 1: + return Data.MultiAxesTreeItemGenerator1(self) + elif len(self.axes) == 2: + return Data.MultiAxesTreeItemGenerator2(self) + elif len(self.axes) == 3: + return Data.MultiAxesTreeItemGenerator3(self) + elif len(self.axes) == 4: + return Data.MultiAxesTreeItemGenerator4(self) + elif len(self.axes) == 5: + return Data.MultiAxesTreeItemGenerator5(self) + else: + raise ValueError + + def __iter__(self): + return self.keys() + class DataTree: - def __init__(self, kind, label, type, axes, args=None, func=None): + def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): self.kind = kind self.label = label - self.type = type self.axes = axes - self.num_axes = len(self.axes) - self.args = args self.func = func - - if self.args: - self.num_args = len(self.args) / 2 - + self.model_kind = model_kind + if not self.model_kind and self.args: + self.model_kind = self.args[0] self.data = None - def makeData(self): + def makeData(self, axes=None): + if not self.axes: + if axes: + self.axes = axes + elif self.model_kind and self.model_kind in Data.kinds: + self.axes = Data.kinds[self.model_kind].axes + assert(self.axes) self.data = Data.MultiAxesTree(self.axes) + def sameAxes(self, other_axes): + if len(self.axes) != len(other_axes): + return False + for axis_index in other_axes: + if not axis_index in self.axes: + return False + return True + + def missingAxes(self, other_axes): + for axis_index in other_axes: + if not axis_index in self.axes: + return True + return False + def check(self, axes_index): return self.data.check(axes_index) @@ -588,6 +681,12 @@ def get(self, axes_index): def set(self, axes_index, val): return self.data.set(axes_index, val) + def keys(self): + return self.data.keys() + + def items(self): + return self.data.items() + def __iter__(self): return iter(self.data) @@ -598,124 +697,152 @@ def printData(self): print("printData {}: empty".format(self.kind)) return - for axes_index in self.data: - self.data.print(axes_index) + for axes_index, val in self.data.items(): + buf = " " + for axis_index, index in axes_index.items(): + buf = "{} {}".format(buf, Data.get_index_name(axis_index, index)) + print("{} {}".format(buf, val)) class DataTreeTemplate: - def __init__(self, kind_template, label_template, type, axes, arg_templates, func): + def __init__(self, kind_template, label_template, + combined_axis=None, model_kind=None, args=None, func=None): self.kind_template = kind_template self.label_template = label_template - self.type = type - self.axes = axes - self.arg_templates = arg_templates + self.combined_axis_template = combined_axis + self.model_kind_template = model_kind + self.arg_templates = args self.func = func def getKind(self, template_args): return self.kind_template.format(*template_args) def getLabel(self, template_args): - arg_labels = [Data.kinds[arg_kind].label for arg_kind in template_args] + arg_labels = [arg_kind in Data.kinds and Data.kinds[arg_kind].label or None for arg_kind in template_args] return self.label_template.format(*arg_labels) def getArgs(self, template_args): return [ arg.format(*template_args) for arg in self.arg_templates ] + def getCombinedAxis(self, template_args): + return self.combined_axis_template.format(*template_args) + + def getModelKind(self, args, template_args): + assert(len(args) > 0) + model_kind = args[0] + if self.model_kind_template: + model_kind = self.model_kind_template.format(*template_args) + return model_kind + + def getAxes(self, model_kind, template_args): + model_axes = Data.kinds[model_kind].axes + combined_axis_index = None + if self.combined_axis_template: + combined_axis_name = self.getCombinedAxis(template_args) + combined_axis_index = Data.axes[combined_axis_name] + axes = [] + for axis_index in model_axes: + if axis_index != combined_axis_index: + axes.append(axis_index) + return axes + def makeDataTree(self, template_args): kind = self.getKind(template_args) label = self.getLabel(template_args) args = self.getArgs(template_args) - return Data.DataTree(kind, label, self.type, self.axes, args, self.func) + model_kind = self.getModelKind(args, template_args) + axes = self.getAxes(model_kind, template_args) + return Data.DataTree(kind, label, model_kind=model_kind, axes=axes, args=args, func=self.func) # has info derivable from first kind "time(s)" which is read from files - kinds = { "Problem size": DataTree("Problem size", "Problem size", "info", info_axes), - "Reps": DataTree("Reps", "Reps", "info", info_axes), - "Iterations/rep": DataTree("Iterations/rep", "Iterations", "info", info_axes), - "Kernels/rep": DataTree("Kernels/rep", "Kernels", "info", info_axes), - "Bytes/rep": DataTree("Bytes/rep", "Bytes", "info", info_axes), - "FLOPS/rep": DataTree("FLOPS/rep", "FLOPS", "info", info_axes), - - "time(s)": DataTree("time(s)", "time(s)", "data", data_axes), - "time(ms)": DataTree("time(ms)", "time(ms)", "computed", data_axes, ["time(s)"], lambda t: t * 1000.0), - "time(us)": DataTree("time(us)", "time(us)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000.0), - "time(ns)": DataTree("time(ns)", "time(ns)", "computed", data_axes, ["time(s)"], lambda t: t * 1000000000.0), - - "time/rep(s)": DataTree("time/rep(s)", "time(s)", "computed", data_axes, ["time(s)", "Reps"], lambda t, r: t / r), - "time/rep(ms)": DataTree("time/rep(ms)", "time(ms)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000.0), - "time/rep(us)": DataTree("time/rep(us)", "time(us)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000.0), - "time/rep(ns)": DataTree("time/rep(ns)", "time(ns)", "computed", data_axes, ["time/rep(s)"], lambda tpr: tpr * 1000000000.0), - - "time/it(s)": DataTree("time/it(s)", "time(s)", "computed", data_axes, ["time/rep(s)", "Iterations/rep"], lambda tpr, ipr: tpr / ipr), - "time/it(ms)": DataTree("time/it(ms)", "time(ms)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000.0), - "time/it(us)": DataTree("time/it(us)", "time(us)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000.0), - "time/it(ns)": DataTree("time/it(ns)", "time(ns)", "computed", data_axes, ["time/it(s)"], lambda tpi: tpi * 1000000000.0), - - "time/kernel(s)": DataTree("time/kernel(s)", "time(s)", "computed", data_axes, ["time/rep(s)", "Kernels/rep"], lambda tpr, kpr: tpr / kpr), - "time/kernel(ms)": DataTree("time/kernel(ms)", "time(ms)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000.0), - "time/kernel(us)": DataTree("time/kernel(us)", "time(us)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000.0), - "time/kernel(ns)": DataTree("time/kernel(ns)", "time(ns)", "computed", data_axes, ["time/kernel(s)"], lambda tpk: tpk * 1000000000.0), - - "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "throughput(Problem size/s)", "computed", data_axes, ["time/rep(s)", "Problem size"], lambda tpr, ps: ps / tpr), - "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "throughput(Problem size/ms)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), - "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "throughput(Problem size/us)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), - "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "throughput(Problem size/ns)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), - "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "throughput(KProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000.0), - "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "throughput(MProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000.0), - "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "throughput(GProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000.0), - "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "throughput(TProblem size/s)", "computed", data_axes, ["throughput(Problem size/s)"], lambda thr: thr / 1000000000000.0), - - "bandwidth(B/s)": DataTree("bandwidth(B/s)", "bandwidth(B/s)", "computed", data_axes, ["time/rep(s)", "Bytes/rep"], lambda tpr, bpr: bpr / tpr), - "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "bandwidth(KB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000.0), - "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "bandwidth(MB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000.0), - "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "bandwidth(GB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000.0), - "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "bandwidth(TB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1000000000000.0), - "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "bandwidth(KiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1024.0), - "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "bandwidth(MiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1048576.0), - "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "bandwidth(GiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1073741824.0), - "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "bandwidth(TiB/s)", "computed", data_axes, ["bandwidth(B/s)"], lambda bps: bps / 1099511627776.0), - - "FLOPS": DataTree("FLOPS", "FLOPS", "computed", data_axes, ["time/rep(s)", "FLOPS/rep"], lambda tpr, fpr: fpr / tpr), - "KFLOPS": DataTree("KFLOPS", "KFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000.0), - "MFLOPS": DataTree("MFLOPS", "MFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000.0), - "GFLOPS": DataTree("GFLOPS", "GFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000.0), - "TFLOPS": DataTree("TFLOPS", "TFLOPS", "computed", data_axes, ["FLOPS"], lambda fps: fps / 1000000000000.0), + kinds = { "Problem size": DataTree("Problem size", "Problem size", axes=info_axes), + "Reps": DataTree("Reps", "Reps", axes=info_axes), + "Iterations/rep": DataTree("Iterations/rep", "Iterations", axes=info_axes), + "Kernels/rep": DataTree("Kernels/rep", "Kernels", axes=info_axes), + "Bytes/rep": DataTree("Bytes/rep", "Bytes", axes=info_axes), + "FLOPS/rep": DataTree("FLOPS/rep", "FLOPS", axes=info_axes), + + "time(s)": DataTree("time(s)", "time(s)", axes=data_axes), + + "time(ms)": DataTree("time(ms)", "time(ms)", args=["time(s)"], func=lambda t: t * 1000.0), + "time(us)": DataTree("time(us)", "time(us)", args=["time(s)"], func=lambda t: t * 1000000.0), + "time(ns)": DataTree("time(ns)", "time(ns)", args=["time(s)"], func=lambda t: t * 1000000000.0), + + "time/rep(s)": DataTree("time/rep(s)", "time(s)", args=["time(s)", "Reps"], func=lambda t, r: t / r), + "time/rep(ms)": DataTree("time/rep(ms)", "time(ms)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000.0), + "time/rep(us)": DataTree("time/rep(us)", "time(us)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000000.0), + "time/rep(ns)": DataTree("time/rep(ns)", "time(ns)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000000000.0), + + "time/it(s)": DataTree("time/it(s)", "time(s)", args=["time/rep(s)", "Iterations/rep"], func=lambda tpr, ipr: tpr / ipr), + "time/it(ms)": DataTree("time/it(ms)", "time(ms)", args=["time/it(s)"], func=lambda tpi: tpi * 1000.0), + "time/it(us)": DataTree("time/it(us)", "time(us)", args=["time/it(s)"], func=lambda tpi: tpi * 1000000.0), + "time/it(ns)": DataTree("time/it(ns)", "time(ns)", args=["time/it(s)"], func=lambda tpi: tpi * 1000000000.0), + + "time/kernel(s)": DataTree("time/kernel(s)", "time(s)", args=["time/rep(s)", "Kernels/rep"], func=lambda tpr, kpr: tpr / kpr), + "time/kernel(ms)": DataTree("time/kernel(ms)", "time(ms)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000.0), + "time/kernel(us)": DataTree("time/kernel(us)", "time(us)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000000.0), + "time/kernel(ns)": DataTree("time/kernel(ns)", "time(ns)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000000000.0), + + "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "throughput(Problem size/s)", args=["time/rep(s)", "Problem size"], func=lambda tpr, ps: ps / tpr), + "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "throughput(Problem size/ms)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), + "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "throughput(Problem size/us)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), + "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "throughput(Problem size/ns)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000.0), + "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "throughput(KProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), + "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "throughput(MProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), + "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "throughput(GProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000.0), + "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "throughput(TProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000000.0), + + "bandwidth(B/s)": DataTree("bandwidth(B/s)", "bandwidth(B/s)", args=["time/rep(s)", "Bytes/rep"], func=lambda tpr, bpr: bpr / tpr), + "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "bandwidth(KB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000.0), + "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "bandwidth(MB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000.0), + "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "bandwidth(GB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000000.0), + "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "bandwidth(TB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000000000.0), + "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "bandwidth(KiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1024.0), + "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "bandwidth(MiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1048576.0), + "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "bandwidth(GiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1073741824.0), + "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "bandwidth(TiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1099511627776.0), + + "FLOPS": DataTree("FLOPS", "FLOPS", args=["time/rep(s)", "FLOPS/rep"], func=lambda tpr, fpr: fpr / tpr), + "KFLOPS": DataTree("KFLOPS", "KFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000.0), + "MFLOPS": DataTree("MFLOPS", "MFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000.0), + "GFLOPS": DataTree("GFLOPS", "GFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000000.0), + "TFLOPS": DataTree("TFLOPS", "TFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000000000.0), } kind_templates = { - "first": DataTreeTemplate("first<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], first), - "last": DataTreeTemplate("last<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], last), - - "min": DataTreeTemplate("min<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], min), - "max": DataTreeTemplate("max<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], max), - "sum": DataTreeTemplate("sum<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], sum), - "avg": DataTreeTemplate("avg<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], avg), - "stddev": DataTreeTemplate("stddev<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], stddev), - "relstddev": DataTreeTemplate("relstddev<{0}>", "{0}", "run_size_reduced", run_size_reduced_axes, ["{0}"], relstddev), - - "_LR": DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], linearRegression), - "LR_intercept": DataTreeTemplate("LR_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[0]), - "LR_slope": DataTreeTemplate("LR_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[1]), - "LR_correlationCoefficient": DataTreeTemplate("LR_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR<{0}>"], lambda lr: lr[2]), - "LR": DataTreeTemplate("LR<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR<{0}>"], eval_linearRegression), - - "_LR_log": DataTreeTemplate("_LR_log<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], linearRegression_loglog), - "LR_log_intercept": DataTreeTemplate("LR_log_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[0]), - "LR_log_slope": DataTreeTemplate("LR_log_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[1]), - "LR_log_correlationCoefficient": DataTreeTemplate("LR_log_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR_log<{0}>"], lambda lr: lr[2]), - "LR_log": DataTreeTemplate("LR_log<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR_log<{0}>"], eval_linearRegression_loglog), - - "_LR2": DataTreeTemplate("_LR2<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], segmented_linearRegression), - "LR2_intercept": DataTreeTemplate("LR2_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[0]), - "LR2_slope": DataTreeTemplate("LR2_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[1]), - "LR2_correlationCoefficient": DataTreeTemplate("LR2_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR2<{0}>"], lambda lr: lr[2]), - "LR2": DataTreeTemplate("LR2<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR2<{0}>"], eval_segmented_linearRegression), - - "_LR2_log": DataTreeTemplate("_LR2_log<{0}>", "intercept, slope, correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["Problem size", "{0}"], segmented_linearRegression_loglog), - "LR2_log_intercept": DataTreeTemplate("LR2_log_intercept<{0}>", "intercept", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[0]), - "LR2_log_slope": DataTreeTemplate("LR2_log_slope<{0}>", "slope", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[1]), - "LR2_log_correlationCoefficient": DataTreeTemplate("LR2_log_correlationCoefficient<{0}>", "correlation coefficient", "run_size_reduced", run_size_reduced_axes, ["_LR2_log<{0}>"], lambda lr: lr[2]), - "LR2_log": DataTreeTemplate("LR2_log<{0}>", "{0}", "computed", data_axes, ["Problem size", "_LR2_log<{0}>"], eval_segmented_linearRegression_loglog), + "first": DataTreeTemplate("first<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=first), + "last": DataTreeTemplate("last<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=last), + "min": DataTreeTemplate("min<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=min), + "max": DataTreeTemplate("max<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=max), + "sum": DataTreeTemplate("sum<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=sum), + "avg": DataTreeTemplate("avg<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=avg), + "stddev": DataTreeTemplate("stddev<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=stddev), + "relstddev": DataTreeTemplate("relstddev<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=relstddev), + + "_LR": DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=linearRegression), + "LR_intercept": DataTreeTemplate("LR_intercept<{0}>", "intercept", args=["_LR<{0}>"], func=lambda lr: lr[0]), + "LR_slope": DataTreeTemplate("LR_slope<{0}>", "slope", args=["_LR<{0}>"], func=lambda lr: lr[1]), + "LR_correlationCoefficient": DataTreeTemplate("LR_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR<{0}>"], func=lambda lr: lr[2]), + "LR": DataTreeTemplate("LR<{0}>", "{0}", model_kind="{0}", args=["_LR<{0}>", "Problem size"], func=eval_linearRegression), + + "_LR_log": DataTreeTemplate("_LR_log<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=linearRegression_loglog), + "LR_log_intercept": DataTreeTemplate("LR_log_intercept<{0}>", "intercept", args=["_LR_log<{0}>"], func=lambda lr: lr[0]), + "LR_log_slope": DataTreeTemplate("LR_log_slope<{0}>", "slope", args=["_LR_log<{0}>"], func=lambda lr: lr[1]), + "LR_log_correlationCoefficient": DataTreeTemplate("LR_log_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR_log<{0}>"], func=lambda lr: lr[2]), + "LR_log": DataTreeTemplate("LR_log<{0}>", "{0}", model_kind="{0}", args=["_LR_log<{0}>", "Problem size"], func=eval_linearRegression_loglog), + + "_LR2": DataTreeTemplate("_LR2<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=segmented_linearRegression), + "LR2_intercept": DataTreeTemplate("LR2_intercept<{0}>", "intercept", args=["_LR2<{0}>"], func=lambda lr: lr[0]), + "LR2_slope": DataTreeTemplate("LR2_slope<{0}>", "slope", args=["_LR2<{0}>"], func=lambda lr: lr[1]), + "LR2_correlationCoefficient": DataTreeTemplate("LR2_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR2<{0}>"], func=lambda lr: lr[2]), + "LR2": DataTreeTemplate("LR2<{0}>", "{0}", model_kind="{0}", args=["_LR2<{0}>", "Problem size"], func=eval_segmented_linearRegression), + + "_LR2_log": DataTreeTemplate("_LR2_log<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=segmented_linearRegression_loglog), + "LR2_log_intercept": DataTreeTemplate("LR2_log_intercept<{0}>", "intercept", args=["_LR2_log<{0}>"], func=lambda lr: lr[0]), + "LR2_log_slope": DataTreeTemplate("LR2_log_slope<{0}>", "slope", args=["_LR2_log<{0}>"], func=lambda lr: lr[1]), + "LR2_log_correlationCoefficient": DataTreeTemplate("LR2_log_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR2_log<{0}>"], func=lambda lr: lr[2]), + "LR2_log": DataTreeTemplate("LR2_log<{0}>", "{0}", model_kind="{0}", args=["_LR2_log<{0}>", "Problem size"], func=eval_segmented_linearRegression_loglog), } @@ -723,106 +850,59 @@ def compute_data(kind): if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) - if Data.kinds[kind].data: + datatree = Data.kinds[kind] + if datatree.data: return # already calculated + if not (datatree.model_kind and datatree.args and datatree.func): + raise NameError("Computing data is not supported for kind {0}".format(kind)) - if Data.kinds[kind].type == "computed": - - if not (Data.kinds[kind].args and Data.kinds[kind].func): - raise NameError("Computing data is not supported for kind {0}".format(kind)) - - compute_args = Data.kinds[kind].args - compute_func = Data.kinds[kind].func - - for arg_kind in compute_args: - # calculate data for arg_kind - Data.compute(arg_kind) - - if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): - raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) - - Data.kinds[kind].makeData() - for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.data.items(): - for run_size, model_run_data in model_sweep_data.items(): - for kernel_index, model_kernel_data in model_run_data.items(): - kernel_name = Data.kernels[kernel_index] - for variant_index, model_variant_data in model_kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, model_val in model_variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, - Data.axes["run_size"]: run_size, - Data.axes["kernel_index"]: kernel_index, - Data.axes["variant_index"]: variant_index, - Data.axes["tuning_index"]: tuning_index, } - - args_val = () - for arg_kind in compute_args: - arg_val = Data.kinds[arg_kind].get(axes_index) - args_val = args_val + (arg_val,) - - val = compute_func(*args_val) - Data.kinds[kind].set(axes_index, val) - - elif Data.kinds[kind].type == "run_size_reduced": - - if not (Data.kinds[kind].func and Data.kinds[kind].args): - raise NameError("Reducing data is not supported for kind {0}".format(kind)) - - reduce_args = Data.kinds[kind].args - reduce_func = Data.kinds[kind].func - - for arg_kind in reduce_args: - # calculate data for arg_kind - Data.compute(arg_kind) - - if (not Data.data_model_kind in Data.kinds) or (not Data.kinds[Data.data_model_kind].data): - raise NameError("Model data not available {0}, no args".format(Data.data_model_kind)) - - Data.kinds[kind].makeData() - for sweep_dir_name, model_sweep_data in Data.kinds[Data.data_model_kind].data.data.items(): - for run_size, model_run_data in model_sweep_data.items(): - for kernel_index, model_kernel_data in model_run_data.items(): - kernel_name = Data.kernels[kernel_index] - for variant_index, model_variant_data in model_kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, model_val in model_variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, - Data.axes["run_size"]: run_size, - Data.axes["kernel_index"]: kernel_index, - Data.axes["variant_index"]: variant_index, - Data.axes["tuning_index"]: tuning_index, } - - if not Data.kinds[kind].check(axes_index): - args_val = () - for arg_kind in reduce_args: - if Data.kinds[arg_kind].type == "run_size_reduced": - arg_val = Data.kinds[arg_kind].get(axes_index) - else: - arg_val = [] - args_val = args_val + (arg_val,) - Data.kinds[kind].set(axes_index, args_val) - else: - args_val = Data.kinds[kind].get(axes_index) - - args_idx = 0 - for arg_kind in reduce_args: - if Data.kinds[arg_kind].type == "run_size_reduced": - pass - else: - args_val[args_idx].append(Data.kinds[arg_kind].get(axes_index)) - args_idx += 1 - - for axes_index in Data.kinds[kind]: - args_val = Data.kinds[kind].get(axes_index) - Data.kinds[kind].set(axes_index, reduce_func(*args_val)) + model_kind = datatree.model_kind + compute_args = datatree.args + compute_func = datatree.func - else: - raise NameError("Unknown kind type {}".format(Data.kinds[kind].type)) + if model_kind != kind: + Data.compute(model_kind) + + arg_datatrees = () + for arg_kind in compute_args: + # calculate data for arg_kind + Data.compute(arg_kind) + arg_datatree = Data.kinds[arg_kind] + arg_datatrees = arg_datatrees + (arg_datatree,) + + if (not model_kind in Data.kinds) or (not Data.kinds[model_kind].data): + raise NameError("Model data not available {0}, no args".format(model_kind)) + + datatree.makeData() + + use_lists = () + for arg_datatree in arg_datatrees: + use_list = datatree.missingAxes(arg_datatree.axes) + use_lists = use_lists + (use_list,) + + for axes_index in Data.kinds[model_kind]: + + if not datatree.check(axes_index): + args_val = () + for i in range(0, len(arg_datatrees)): + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + if use_lists[i]: + arg_val = [arg_val,] + args_val = args_val + (arg_val,) + datatree.set(axes_index, args_val) + else: + args_val = datatree.get(axes_index) + for i in range(0, len(arg_datatrees)): + if use_lists[i]: + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + args_val[i].append(arg_val) + + for axes_index, args_val in datatree.items(): + val = compute_func(*args_val) + datatree.set(axes_index, val) def compute_templated_data(kind_template, template_args): if kind_template in Data.kind_templates: @@ -838,21 +918,50 @@ def compute_templated_data(kind_template, template_args): def kind_template_scan(kind): - template_args = None - - template_start_idx = kind.find("<") - template_end_idx = kind.rfind(">") - - if template_start_idx == -1 or template_end_idx == -1: - return kind, template_args - - kind_template = kind[:template_start_idx] - template_args = kind[template_start_idx+1:template_end_idx].split(",") + kind_prefix = None + + template_args = [] + + template_arg_start_idx = -1 + + template_depth = 0 + index_depth = 0 + + for i in range(0, len(kind)): + c = kind[i] + if c == "<" or c == "[": + if template_depth == 0 and index_depth == 0: + template_arg_start_idx = i+1 + if not kind_prefix: + kind_prefix = kind[:i] + if c == "<": + template_depth += 1 + elif c == "[": + index_depth += 1 + elif c == ",": + if template_depth == 0 and index_depth == 1 or \ + template_depth == 1 and index_depth == 0: + template_args.append(kind[template_arg_start_idx:i]) + template_arg_start_idx = i+1 + elif c == ">" or c == "]": + if c == ">": + template_depth -= 1 + elif c == "]": + index_depth -= 1 + if template_depth == 0 and index_depth == 0: + template_args.append(kind[template_arg_start_idx:i]) + template_arg_start_idx = -1 + assert(template_arg_start_idx == -1) + assert(template_depth == 0) + assert(index_depth == 0) + + if not kind_prefix: + kind_prefix = kind for i in range(0,len(template_args)): template_args[i] = template_args[i].strip() - return (kind_template, template_args) + return (kind_prefix, template_args) def compute(kind): if kind in Data.kinds: @@ -1041,7 +1150,7 @@ def get_plot_data(kind, kernel): data = {} kind_data = Data.kinds[kind] - if kind_data.type == "info": + if kind_data.sameAxes(Data.info_axes): kind_info = kind_data.data.data @@ -1059,7 +1168,7 @@ def get_plot_data(kind, kernel): val = run_info[kernel_index] data[sweep_dir_name][kind]["data"].append(val) - elif kind_data.type == "data" or kind_data.type == "computed": + elif kind_data.sameAxes(Data.data_axes): kind_data = kind_data.data.data @@ -1089,7 +1198,7 @@ def get_plot_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) - elif kind_data.type == "run_size_reduced": + elif kind_data.sameAxes(Data.run_size_reduced_axes): kind_data = kind_data.data.data @@ -1118,7 +1227,7 @@ def get_plot_data(kind, kernel): data[sweep_dir_name][data_name]["data"].append(val) else: - raise NameError("Unknown kind {} type {}".format(kind, kind_data.type)) + raise NameError("Unknown kind {} axes {}".format(kind, kind_data)) return data @@ -1330,7 +1439,7 @@ def plot_data(outputfile_name, ykinds): func = None for ykind in ykinds: - if Data.kinds[ykind].type == "run_size_reduced": + if Data.kinds[ykind].sameAxes(Data.run_size_reduced_axes): func = plot_data_kernels else: func = plot_data_problem_sizes @@ -1539,6 +1648,12 @@ def fes(arg): print("kind_templates") print(" {}".format(kind_templates_string[2:])) + axes_string = "" + for v in range(0, Data.num_axes): + axes_string += ", {}".format(Data.axes[v]) + print("axes") + print(" {}".format(axes_string[2:])) + sweeps_string = "" for v in range(0, Data.num_sweeps): sweeps_string += ", {}".format(Data.sweeps[v]) From 059e4dfe18d3fb1fbdff141bfcad33be56fe18e7 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Wed, 25 May 2022 15:45:29 -0700 Subject: [PATCH 048/174] Generalize graphing implementation Only finished bar graphs so far --- scripts/sweep_graph.py | 367 ++++++++++++++++++++++------------------- 1 file changed, 193 insertions(+), 174 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index f1a79e1a6..a07480280 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -533,6 +533,62 @@ def MultiAxesTreeItemGenerator5(data_tree): data_tree.axes[3]: k3, data_tree.axes[4]: k4,}, v4,) + def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, + val, depth): + if data_tree.axes[depth] in partial_axes_index: + key = partial_axes_index[data_tree.axes[depth]] + val = val[key] + axes_index[data_tree.axes[depth]] = key + if depth+1 == len(data_tree.axes): + yield (axes_index.copy(), leftover_axes_index.copy(), val,) + else: + gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, val, depth+1) + for yld in gen: + yield yld + else: + for key, val in val.items(): + axes_index[data_tree.axes[depth]] = key + leftover_axes_index[data_tree.axes[depth]] = key + if depth+1 == len(data_tree.axes): + yield (axes_index.copy(), leftover_axes_index.copy(), val,) + else: + gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, val, depth+1) + for yld in gen: + yield yld + + def MultiAxesTreePartialItemGenerator0(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 0) + if False: + yield ({},None,) + + def MultiAxesTreePartialItemGenerator1(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 1) + assert(data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator2(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 2) + assert(data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator3(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 3) + assert(data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator4(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 4) + assert(data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator5(data_tree, partial_axes_index): + assert(len(data_tree.axes) == 5) + assert(data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + class MultiAxesTree: # axes is an array of axis_indices in the depth order they occur in the tree # indices is a dictionary of axis_indices to indices @@ -584,19 +640,38 @@ def set(self, axes_index, val): index = axes_index[axis_index] data[index] = val - def print(self, axes_index): - data = self.data - buf = " " # leading two spaces + def indexName(self, axes_index): + name = "" + for axis_index, index in axes_index.items(): + if name: + name = "{} {}".format(name, Data.get_index_name(axis_index, index)) + else: + name = Data.get_index_name(axis_index, index) + return name + + def axesString(self): + axes_names = "" for axis_index in self.axes: - if not axis_index in axes_index: - axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) - index = axes_index[axis_index] - if not index in data: - raise NameError("Missing index {}".format(index)) - data = data[index] - buf = "{} {}".format(buf, Data.get_index_name(axis_index, index)) - print("{} {}".format(buf, data)) + if axes_names: + axes_names = "{}, {}".format(axes_names, Data.axes[axis_index]) + else: + axes_names = "[{}".format(Data.axes[axis_index]) + return "{}]".format(axes_names) + + def dataString(self): + buf = "" + for axes_index, val in self.data.items(): + index_buf = " " + for axis_index, index in axes_index.items(): + index_buf = "{} {}".format(index_buf, Data.get_index_name(axis_index, index)) + buf += "{} {}".format(buf, val) + return buf + + def __repr__(self): + return "MultiAxesTree({}):\n{}".format(self.axesString(), self.dataString()) + + def __str__(self): + return "MultiAxesTree({})".format(self.axesString()) def keys(self): assert(self.data != None) @@ -632,6 +707,28 @@ def items(self): else: raise ValueError + def partial_match_items(self, partial_axes_index): + assert(self.data != None) + num_matching_indices = 0 + for axis_index in self.axes: + if axis_index in partial_axes_index: + num_matching_indices += 1 + assert(num_matching_indices == len(partial_axes_index)) + if len(self.axes) == 0: + return Data.MultiAxesTreePartialItemGenerator0(self, partial_axes_index) + elif len(self.axes) == 1: + return Data.MultiAxesTreePartialItemGenerator1(self, partial_axes_index) + elif len(self.axes) == 2: + return Data.MultiAxesTreePartialItemGenerator2(self, partial_axes_index) + elif len(self.axes) == 3: + return Data.MultiAxesTreePartialItemGenerator3(self, partial_axes_index) + elif len(self.axes) == 4: + return Data.MultiAxesTreePartialItemGenerator4(self, partial_axes_index) + elif len(self.axes) == 5: + return Data.MultiAxesTreePartialItemGenerator5(self, partial_axes_index) + else: + raise ValueError + def __iter__(self): return self.keys() @@ -658,14 +755,17 @@ def makeData(self, axes=None): assert(self.axes) self.data = Data.MultiAxesTree(self.axes) - def sameAxes(self, other_axes): - if len(self.axes) != len(other_axes): - return False + def hasAxes(self, other_axes): for axis_index in other_axes: if not axis_index in self.axes: return False return True + def sameAxes(self, other_axes): + if len(self.axes) != len(other_axes): + return False + self.hasAxes(other_axes) + def missingAxes(self, other_axes): for axis_index in other_axes: if not axis_index in self.axes: @@ -687,21 +787,26 @@ def keys(self): def items(self): return self.data.items() + def partial_match_items(self, partial_axes_index): + return self.data.partial_match_items(partial_axes_index) + def __iter__(self): return iter(self.data) - def printData(self): - if self.data.data: - print("printData {}:".format(self.kind)) - else: - print("printData {}: empty".format(self.kind)) - return + def indexName(self, axes_index): + return self.data.indexName(axes_index) - for axes_index, val in self.data.items(): - buf = " " - for axis_index, index in axes_index.items(): - buf = "{} {}".format(buf, Data.get_index_name(axis_index, index)) - print("{} {}".format(buf, val)) + def axesString(self): + return self.data.axesString() + + def dataString(self): + return self.data.dataString() + + def __repr__(self): + return "DataTree({} {} {}):\n{}".format(self.kind, self.label, self.axesString(), self.dataString()) + + def __str__(self): + return "DataTree({} {} {})".format(self.kind, self.label, self.axesString()) class DataTreeTemplate: @@ -1127,118 +1232,35 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): pass # could not convert data to float -def get_plot_data(kind, kernel): +def get_plot_data(kind, partial_axes_index): if not kind in Data.kinds: raise NameError("Unknown kind {}".format(kind)) - kernel_index = kernel - if isinstance(kernel, str): - if kernel in Data.kernels: - kernel_index = Data.kernels[kernel] - else: - raise NameError("Unknown kernel {}".format(kernel)) - elif isinstance(kernel, int): - kernel_index = kernel - else: - raise NameError("Unknown kernel {}".format(kernel)) - - if not kernel_index in Data.kernels: - raise NameError("Unknown kernel {}".format(kernel_index)) - kernel_name = Data.kernels[kernel_index] - - data = {} - kind_data = Data.kinds[kind] - if kind_data.sameAxes(Data.info_axes): - - kind_info = kind_data.data.data - - for sweep_dir_name, sweep_info in kind_info.items(): - - data[sweep_dir_name] = {} - data[sweep_dir_name][kind] = {"type": "info", - "data": [] } - - for run_size, run_info in sweep_info.items(): - - if not kernel_index in run_info: - raise NameError("Unknown info kernel_index {}".format(kernel_index)) - - val = run_info[kernel_index] - data[sweep_dir_name][kind]["data"].append(val) - - elif kind_data.sameAxes(Data.data_axes): - - kind_data = kind_data.data.data - - for sweep_dir_name, sweep_data in kind_data.items(): - - data[sweep_dir_name] = {} - - for run_size, run_data in sweep_data.items(): - - if not kernel_index in run_data: - raise NameError("Unknown info kernel_index {}".format(kernel_index)) - - kernel_data = run_data[kernel_index] - - for variant_index, variant_data in kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, val in variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - data_name = "{}-{}".format(variant_name, tuning_name) - - if not data_name in data[sweep_dir_name]: - data[sweep_dir_name][data_name] = {"type": "data", - "variant": variant_index, - "tuning": tuning_index, - "data": [] } - - data[sweep_dir_name][data_name]["data"].append(val) - - elif kind_data.sameAxes(Data.run_size_reduced_axes): - - kind_data = kind_data.data.data - - for sweep_dir_name, sweep_data in kind_data.items(): - - data[sweep_dir_name] = {} - if not kernel_index in sweep_data: - raise NameError("Unknown info kernel_index {}".format(kernel_index)) + assert(kind_data.hasAxes(partial_axes_index)) - kernel_data = sweep_data[kernel_index] - - for variant_index, variant_data in kernel_data.items(): - variant_name = Data.variants[variant_index] - for tuning_index, val in variant_data.items(): - tuning_name = Data.tunings[tuning_index] - - data_name = "{}-{}".format(variant_name, tuning_name) - - if not data_name in data[sweep_dir_name]: - data[sweep_dir_name][data_name] = {"type": "data", - "variant": variant_index, - "tuning": tuning_index, - "data": [] } - - data[sweep_dir_name][data_name]["data"].append(val) - - else: - raise NameError("Unknown kind {} axes {}".format(kind, kind_data)) + data = [] + for axes_index, leftover_axes_index, value in kind_data.partial_match_items(partial_axes_index): + index_name = kind_data.indexName(leftover_axes_index) + data.append({ "name": index_name, + "axes_index": leftover_axes_index, + "data": [value] }) return data -def plot_data_problem_sizes(outputfile_name, ykinds): +def plot_data_split_line(outputfile_name, split_axis, xkind, ykinds): + print("plotting {} {} {} {}".format(outputfile_name, split_axis, xkind, ykinds)) + + assert(split_axis == "kernel_index") + assert(xkind == "Problem size") ylabel = None yscale = "log" ylim = None - xkind = "Problem size" xlabel = Data.kinds[xkind].label xscale = "log" xlim = None @@ -1312,7 +1334,10 @@ def plot_data_problem_sizes(outputfile_name, ykinds): plt.savefig(fname, dpi=150.0) plt.clf() -def plot_data_kernels(outputfile_name, ykinds): +def plot_data_bar(outputfile_name, xaxis, ykinds): + print("plotting {} {} {}".format(outputfile_name, xaxis, ykinds)) + + assert(xaxis == "kernel_index") gname = None @@ -1340,6 +1365,7 @@ def plot_data_kernels(outputfile_name, ykinds): kernel_data = { "kernel_names": [], "kernel_centers": [], "ynames": {}, + "ycolor": {}, "ydata": {}, } for kernel_index in range(0, Data.num_kernels): @@ -1350,38 +1376,33 @@ def plot_data_kernels(outputfile_name, ykinds): for ykind in ykinds: - yaxes = get_plot_data(ykind, kernel_index) + axes_index = { Data.axes["kernel_index"]: kernel_index } - for sweep_index in range(0, Data.num_sweeps): - sweep_dir_name = Data.sweeps[sweep_index] + ydata_list = get_plot_data(ykind, axes_index) - if not sweep_dir_name in yaxes: - raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) + for ydata in ydata_list: - for data_name, ydata in yaxes[sweep_dir_name].items(): - assert(len(ydata["data"]) == 1) + assert(len(ydata["data"]) == 1) - yname = "{} {}".format(data_name, sweep_dir_name) - if len(ykinds) > 1: - yname = "{} {}".format(Data.kinds[ykind].kind, yname) + yname = ydata["name"] + if len(ykinds) > 1: + yname = "{} {}".format(Data.kinds[ykind].kind, yname) - ycolor = (0.0, 0.0, 0.0, 1.0) + ycolor = (0.0, 0.0, 0.0, 1.0) + if Data.axes["variant_index"] in ydata["axes_index"]: + variant_index = ydata["axes_index"][Data.axes["variant_index"]] + ycolor = Data.variant_colors[variant_index] - if ydata["type"] == "data": - variant_index = ydata["variant"] - # tuning_index = ydata["tuning"] - ycolor = Data.variant_colors[variant_index] + if not yname in kernel_data["ynames"]: + kernel_data["ynames"][yname] = len(kernel_data["ynames"]) + kernel_data["ycolor"][yname] = ycolor + kernel_data["ydata"][yname] = [] - if not yname in kernel_data["ynames"]: - kernel_data["ynames"][yname] = len(kernel_data["ynames"]) - kernel_data["ydata"][yname] = { "color": ycolor, - "data": [], } + # pad with 0s if find missing data + while len(kernel_data["ydata"][yname])+1 < len(kernel_data["kernel_names"]): + kernel_data["ydata"][yname].append(0.0) - # pad with 0s if find missing data - while len(kernel_data["ydata"][yname]["data"])+1 < len(kernel_data["kernel_names"]): - kernel_data["ydata"][yname]["data"].append(0.0) - - kernel_data["ydata"][yname]["data"].append(ydata["data"][0]) + kernel_data["ydata"][yname].append(ydata["data"][0]) num_xticks = len(kernel_data["kernel_centers"]) plt.figure(figsize=(max(num_xticks*0.5, 4), 6,)) @@ -1391,17 +1412,15 @@ def plot_data_kernels(outputfile_name, ykinds): for yname in kernel_data["ynames"]: y_i = kernel_data["ynames"][yname] - ydata = kernel_data["ydata"][yname] + ycolor = kernel_data["ycolor"][yname] + yaxis = kernel_data["ydata"][yname] xaxis = [c + (y_i+1)/(y_n+1) - 0.5 for c in kernel_data["kernel_centers"]] - yaxis = ydata["data"] # pad with 0s if find missing data while len(yaxis) < len(kernel_data["kernel_names"]): yaxis.append(0.0) - ycolor = ydata["color"] - plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor) # ,edgecolor="grey") fname = "{}.png".format(outputfile_name) @@ -1434,20 +1453,6 @@ def plot_data_kernels(outputfile_name, ykinds): plt.savefig(fname, dpi=150.0, bbox_inches="tight") plt.clf() -def plot_data(outputfile_name, ykinds): - print("plotting {} {}".format(outputfile_name, ykinds)) - - func = None - for ykind in ykinds: - if Data.kinds[ykind].sameAxes(Data.run_size_reduced_axes): - func = plot_data_kernels - else: - func = plot_data_problem_sizes - - func(outputfile_name, ykinds) - - - def main(argv): sweep_dir_paths = [] @@ -1456,7 +1461,8 @@ def main(argv): runinfo_filename = g_runinfo_filename timing_filename = g_timing_filename print_kinds = [] - graph_kinds = [] + split_line_graph_kind_lists = [] + bar_graph_kind_lists = [] i = 0 while i < len(argv): @@ -1485,11 +1491,18 @@ def fo(arg): def p(arg): print_kinds.append(arg) handle_arg = p - elif opt in ("-g", "--graph"): + elif opt in ("-slg", "--split-line-graphs"): handle_num = -1 - def fg(arg): - graph_kinds.append(arg) - handle_arg = fg + split_line_graph_kind_lists.append([]) + def fslg(arg): + split_line_graph_kind_lists[len(split_line_graph_kind_lists)-1].append(arg) + handle_arg = fslg + elif opt in ("-bg", "--bar-graph"): + handle_num = -1 + bar_graph_kind_lists.append([]) + def fbg(arg): + bar_graph_kind_lists[len(bar_graph_kind_lists)-1].append(arg) + handle_arg = fbg elif opt in ("-kg", "--kernel-groups"): handle_num = -1 def fkg(arg): @@ -1692,12 +1705,18 @@ def fes(arg): for kind in print_kinds: Data.compute(kind) - Data.kinds[kind].printData() + print("Print Data {}:".format(Data.kinds[kind].kind)) + print(Data.kinds[kind].dataString()) + + for kind_list in split_line_graph_kind_lists: + for kind in kind_list: + Data.compute(kind) + plot_data_split_line(outputfile, "kernel_index", "Problem size", kind_list) - if len(graph_kinds) > 0: - for kind in graph_kinds: + for kind_list in bar_graph_kind_lists: + for kind in kind_list: Data.compute(kind) - plot_data(outputfile, graph_kinds) + plot_data_bar(outputfile, "kernel_index", kind_list) if __name__ == "__main__": main(sys.argv[1:]) From 4a176b665c9d7510e18d2e2e08cdba47c53e58a2 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Thu, 26 May 2022 09:38:54 -0700 Subject: [PATCH 049/174] Fix division by 0 error Add tiny amount --- scripts/sweep_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index a07480280..bc2e382ef 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -176,9 +176,9 @@ def linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum): intercept = ysum correlation_coefficient = 1.0 else: - slope = (n*xysum - xsum*ysum) / (n*x2sum - xsum*xsum) + slope = (n*xysum - xsum*ysum) / ((n*x2sum - xsum*xsum)+1e-80) intercept = (ysum - slope*xsum)/n - correlation_coefficient = (n*xysum - xsum*ysum) / math.sqrt((n*x2sum - xsum*xsum)*(n*y2sum - ysum*ysum)) + correlation_coefficient = (n*xysum - xsum*ysum) / (math.sqrt((n*x2sum - xsum*xsum)*(n*y2sum - ysum*ysum))+1e-80) return (intercept, slope, correlation_coefficient) # returns (intercept, slope, correlation_coefficient) From a26f65f482cc645cd2b93df2a52362e7aba33bfc Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Thu, 26 May 2022 09:39:08 -0700 Subject: [PATCH 050/174] fix split line plotting --- scripts/sweep_graph.py | 151 ++++++++++++++++++++++++++++------------- 1 file changed, 103 insertions(+), 48 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index bc2e382ef..59e04a770 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1250,68 +1250,122 @@ def get_plot_data(kind, partial_axes_index): return data +def get_plot_data2(xkind, ykind, partial_axes_index): -def plot_data_split_line(outputfile_name, split_axis, xkind, ykinds): - print("plotting {} {} {} {}".format(outputfile_name, split_axis, xkind, ykinds)) + if not ykind in Data.kinds: + raise NameError("Unknown kind {}".format(ykind)) + if not xkind in Data.kinds: + raise NameError("Unknown kind {}".format(xkind)) - assert(split_axis == "kernel_index") - assert(xkind == "Problem size") + ykind_data = Data.kinds[ykind] + xkind_data = Data.kinds[xkind] - ylabel = None - yscale = "log" - ylim = None + assert(ykind_data.hasAxes(partial_axes_index)) + assert(xkind_data.hasAxes(partial_axes_index)) - xlabel = Data.kinds[xkind].label - xscale = "log" - xlim = None + data = [] + for axes_index, leftover_axes_index, yvalue in ykind_data.partial_match_items(partial_axes_index): + index_name = ykind_data.indexName(leftover_axes_index) + xvalue = xkind_data.get(axes_index) + data.append({ "name": index_name, + "axes_index": leftover_axes_index, + "ydata": [yvalue], + "xdata": [xvalue] }) - for ykind in ykinds: - if not ykind in Data.kinds: - raise NameError("Unknown kind {}".format(ykind)) - if not ylabel: - ylabel = Data.kinds[ykind].label - elif ylabel != Data.kinds[ykind].label: - raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) + return data - for kernel_index in range(0, Data.num_kernels): - kernel_name = Data.kernels[kernel_index] + +def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds): + print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) + + assert(split_axis_name == "kernel_index") + for split_index in range(0, Data.num_kernels): + split_name = Data.kernels[split_index] + + ylabel = None + yscale = "log" + ylim = None + + xlabel = Data.kinds[xkind].label + xscale = "log" + xlim = None + + gname = None + if len(ykinds) == 1: + gname = "{}".format(ykinds[0]) for ykind in ykinds: + if gname: + gname = "{} {}".format(gname, ykind) + else: + gname = "{}".format(ykind) + if not ykind in Data.kinds: + raise NameError("Unknown kind {}".format(ykind)) + if not ylabel: + ylabel = Data.kinds[ykind].label + elif ylabel != Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) - xaxes = get_plot_data(xkind, kernel_index) - yaxes = get_plot_data(ykind, kernel_index) + split_data = { "ynames": [], + "ycolor": {}, + "yformat": {}, + "ydata": {}, + "xdata": {}, } - for sweep_index in range(0, Data.num_sweeps): - sweep_dir_name = Data.sweeps[sweep_index] - sweep_marker = Data.sweep_markers[sweep_index] - if not sweep_dir_name in xaxes: - raise NameError("Unknown sweep_dir_name {}".format(sweep_dir_name)) + assert(xaxis_name == "run_size") + for x_i in range(0, Data.num_run_sizes): + x_index = Data.run_sizes[x_i] - for data_name, ydata in yaxes[sweep_dir_name].items(): + axes_index = { Data.axes[split_axis_name]: split_index, + Data.axes[xaxis_name]: x_index } - yname = "{} {} {}".format(Data.kinds[ykind].kind, data_name, sweep_dir_name) - yformat = "{}-".format(sweep_marker) - ycolor = (0.0, 0.0, 0.0, 1.0) - yaxis = ydata["data"] + data_list = get_plot_data2(xkind, ykind, axes_index) - if ydata["type"] == "data": - variant_index = ydata["variant"] - tuning_index = ydata["tuning"] - ycolor = Data.variant_colors[variant_index] - yformat = "{}{}".format(sweep_marker, Data.tuning_formats[tuning_index]) + for data in data_list: + yname = data["name"] - if data_name in xaxes[sweep_dir_name]: - xaxis = xaxes[sweep_dir_name][data_name]["data"] - elif xkind in xaxes[sweep_dir_name]: - xaxis = xaxes[sweep_dir_name][xkind]["data"] - else: - raise NameError("Unknown xaxis for {}".format(data_name)) + if not yname in split_data["ydata"]: + + ycolor = (0.0, 0.0, 0.0, 1.0) + if Data.axes["variant_index"] in data["axes_index"]: + variant_index = data["axes_index"][Data.axes["variant_index"]] + ycolor = Data.variant_colors[variant_index] + + ymarker = "" + if Data.axes["sweep_dir_name"] in data["axes_index"]: + sweep_dir_name = data["axes_index"][Data.axes["sweep_dir_name"]] + sweep_index = Data.sweeps[sweep_dir_name] + ymarker = Data.sweep_markers[sweep_index] + + yformat = "{}-".format(ymarker) + if Data.axes["tuning_index"] in data["axes_index"]: + tuning_index = data["axes_index"][Data.axes["tuning_index"]] + yformat = "{}{}".format(ymarker, Data.tuning_formats[tuning_index]) + + split_data["ynames"].append(yname) + split_data["ycolor"][yname] = ycolor + split_data["yformat"][yname] = yformat + split_data["ydata"][yname] = [] + split_data["xdata"][yname] = [] - plt.plot(xaxis,yaxis,yformat,color=ycolor,label=yname) + split_data["ydata"][yname].append(data["ydata"][0]) + split_data["xdata"][yname].append(data["xdata"][0]) - fname = "{}_{}.png".format(outputfile_name, kernel_name) - gname = "{}".format(kernel_name) + for yname in split_data["ynames"]: + + ycolor = split_data["ycolor"][yname] + yformat = split_data["yformat"][yname] + ydata = split_data["ydata"][yname] + xdata = split_data["xdata"][yname] + + if len(ykinds) > 1: + yname = "{} {}".format(Data.kinds[ykind].kind, yname) + + plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) + + fname = "{}_{}.png".format(outputfile_name, split_name) + gname = "{}".format(split_name) if ylabel: plt.ylabel(ylabel) @@ -1374,9 +1428,9 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): kernel_data["kernel_names"].append(kernel_name) kernel_data["kernel_centers"].append(kernel_index) - for ykind in ykinds: + axes_index = { Data.axes["kernel_index"]: kernel_index } - axes_index = { Data.axes["kernel_index"]: kernel_index } + for ykind in ykinds: ydata_list = get_plot_data(ykind, axes_index) @@ -1644,6 +1698,7 @@ def fes(arg): if sweep_dir_name in Data.sweeps: raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) Data.sweeps[Data.num_sweeps] = sweep_dir_name + Data.sweeps[sweep_dir_name] = Data.num_sweeps if Data.num_sweeps >= len(g_markers): raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) Data.sweep_markers[Data.num_sweeps] = g_markers[Data.num_sweeps] @@ -1711,7 +1766,7 @@ def fes(arg): for kind_list in split_line_graph_kind_lists: for kind in kind_list: Data.compute(kind) - plot_data_split_line(outputfile, "kernel_index", "Problem size", kind_list) + plot_data_split_line(outputfile, "kernel_index", "run_size", "Problem size", kind_list) for kind_list in bar_graph_kind_lists: for kind in kind_list: From 0f2709fffc6dcf8c032146233e123b0eb8dcd489 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:32:45 -0700 Subject: [PATCH 051/174] Add more color utilities --- scripts/sweep_graph.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 59e04a770..0bf31924d 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -36,18 +36,31 @@ def color_mul(t, factor): new_t += (t[i]*factor,) return clamp_tuple(new_t) -def make_color_tuple(r, g, b): +def make_color_tuple_rgb(r, g, b): return (r/255.0, g/255.0, b/255.0) +def make_color_tuple_str(color_str): + color_str = color_str.strip() + if len(color_str) < 2 or color_str[0] != "(" or color_str[len(color_str)-1] != ")": + raise NameError("Expected a tuple of 3 floats in [0-1]") + color_str = color_str[1:len(color_str)-1] + rgb = color_str.split(",") + if len(rgb) != 3: + raise NameError("Expected a tuple of 3 floats in [0-1]") + r = float(rgb[0].strip()) + g = float(rgb[1].strip()) + b = float(rgb[2].strip()) + return clamp_tuple((r, g, b)) + g_color_base_factor = 1.0 g_color_lambda_factor = 0.7 g_color_raja_factor = 0.4 -g_color_seq = normalize_color_tuple(make_color_tuple(204, 119, 34)) # ocre -g_color_omp = normalize_color_tuple(make_color_tuple(0, 115, 125)) # omp teal -g_color_ompt = normalize_color_tuple(make_color_tuple(125, 10, 0)) # omp teal compliment -g_color_cuda = normalize_color_tuple(make_color_tuple(118, 185, 0)) # nvidia green -g_color_hip = normalize_color_tuple(make_color_tuple(237, 28, 36)) # amd red +g_color_seq = normalize_color_tuple(make_color_tuple_rgb(204, 119, 34)) # ocre +g_color_omp = normalize_color_tuple(make_color_tuple_rgb(0, 115, 125)) # omp teal +g_color_ompt = normalize_color_tuple(make_color_tuple_rgb(125, 10, 0)) # omp teal compliment +g_color_cuda = normalize_color_tuple(make_color_tuple_rgb(118, 185, 0)) # nvidia green +g_color_hip = normalize_color_tuple(make_color_tuple_rgb(237, 28, 36)) # amd red g_known_variants = { "Base_Seq": {"color": color_mul(g_color_seq, g_color_base_factor)}, "Lambda_Seq": {"color": color_mul(g_color_seq, g_color_lambda_factor)}, "RAJA_Seq": {"color": color_mul(g_color_seq, g_color_raja_factor)}, @@ -81,6 +94,10 @@ def make_color_tuple(r, g, b): } g_markers = [ "o", "s", "+", "x", "*", "d", "h", "p", "8" ] +# reformat or color series +# formatted as series_name: dictionary of "color": color, "format": format +g_series_reformat = {} + g_timing_filename = "RAJAPerf-timing-Minimum.csv" g_runinfo_filename = "RAJAPerf-kernels.csv" g_timing_file_kind = "time(s)" From 8cde548f4d8fc9e4d27b2996e7e34ea46c2cbb24 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:33:25 -0700 Subject: [PATCH 052/174] fixup arg handling --- scripts/sweep_graph.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 0bf31924d..fc60a5dac 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1625,20 +1625,22 @@ def fes(arg): print(help_string) sys.exit(2) - # fixed num args + # fixed num args, handled together elif handle_num > 0: if not i+handle_num < len(argv): print("Missing option to {}".format(opt)) sys.exit(2) + args = [] for h in range(1, handle_num+1): arg = argv[i+h] if arg[0] == "-": print("Missing option to {}".format(opt)) sys.exit(2) - handle_arg(arg) + args.append(arg) + handle_arg(*args) i += handle_num - # unfixed num args + # unfixed num args, handled one-by-one elif handle_num < 0: while i+1 < len(argv): arg = argv[i+1] From 5beb2b72803be67055039f7fd11c12051929d9b6 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:39:31 -0700 Subject: [PATCH 053/174] Add ability to change graph labels --- scripts/sweep_graph.py | 524 +++++++++++++++++++++++++++++------------ 1 file changed, 368 insertions(+), 156 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index fc60a5dac..e34da7410 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -359,6 +359,24 @@ class Data: include_tunings = {} exclude_tunings = {} + def add_sweep(sweep_name): + sweep_index = Data.num_sweeps + Data.num_sweeps += 1 + Data.sweeps[sweep_name] = sweep_index + Data.sweeps[sweep_index] = sweep_name + + def add_run_size(run_size_name): + run_size_index = Data.num_run_sizes + Data.num_run_sizes += 1 + Data.run_sizes[run_size_name] = run_size_index + Data.run_sizes[run_size_index] = run_size_name + + def add_kernel(kernel_name): + kernel_index = Data.num_kernels + Data.num_kernels += 1 + Data.kernels[kernel_name] = kernel_index + Data.kernels[kernel_index] = kernel_name + def add_variant(variant_name): variant_index = Data.num_variants Data.num_variants += 1 @@ -392,11 +410,17 @@ def add_tuning(tuning_name): "variant_index": 3, 3: "variant_index", "tuning_index": 4, 4: "tuning_index", } + def get_axis_name(axis_index): + if axis_index in Data.axes: + return Data.axes[axis_index] + else: + raise NameError("Unknown axis index {}".format(axis_index)) + def get_index_name(axis_index, index): if axis_index == Data.axes["sweep_dir_name"]: - return index # Data.sweeps[index] + return Data.sweeps[index] elif axis_index == Data.axes["run_size"]: - return index; + return Data.run_sizes[index] elif axis_index == Data.axes["kernel_index"]: return Data.kernels[index] elif axis_index == Data.axes["variant_index"]: @@ -406,6 +430,36 @@ def get_index_name(axis_index, index): else: raise NameError("Unknown axis index {}".format(axis_index)) + def get_axis_index_str(axis_index, index): + return "{}:{}".format(Data.get_axis_name(axis_index), Data.get_index_name(axis_index, index)) + + def get_axes_index_str(axes_index): + name = "{" + for axis_index, index in axes_index.items(): + name = "{}{},".format(name, Data.get_axis_index_str(axis_index, index)) + return "{}}}".format(name) + + def get_axis_index(axis_name, index_name): + if axis_name == "sweep_dir_name": + return {Data.axes[axis_name]: Data.sweeps[index_name],} + elif axis_name == "run_size": + return {Data.axes[axis_name]: Data.run_sizes[index_name],} + elif axis_name == "kernel_index": + return {Data.axes[axis_name]: Data.kernels[index_name],} + elif axis_name == "variant_index": + return {Data.axes[axis_name]: Data.variants[index_name],} + elif axis_name == "tuning_index": + return {Data.axes[axis_name]: Data.tunings[index_name],} + else: + raise NameError("Unknown axis name {}".format(axis_name)) + + def axes_difference(axes, partial_axes_index): + new_axes = [] + for axis_index in axes: + if not axis_index in partial_axes_index: + new_axes.append(axis_index) + return new_axes + # multi-dimensional array structured like this # directory name - platform, compiler, etc # run size - problem size, for run_sizes @@ -555,15 +609,21 @@ def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, val, depth): if data_tree.axes[depth] in partial_axes_index: key = partial_axes_index[data_tree.axes[depth]] - val = val[key] - axes_index[data_tree.axes[depth]] = key - if depth+1 == len(data_tree.axes): - yield (axes_index.copy(), leftover_axes_index.copy(), val,) + if key in val: + val = val[key] + axes_index[data_tree.axes[depth]] = key + if depth+1 == len(data_tree.axes): + yield (axes_index.copy(), leftover_axes_index.copy(), val,) + else: + gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, val, depth+1) + for yld in gen: + yield yld else: - gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, - axes_index, leftover_axes_index, val, depth+1) - for yld in gen: - yield yld + # print(data_tree, partial_axes_index, + # axes_index, leftover_axes_index, + # key, val, depth) + raise NameError("invalid index {} {}".format(Data.get_axes_index_str(axes_index), Data.get_axis_index_str(data_tree.axes[depth], key))) else: for key, val in val.items(): axes_index[data_tree.axes[depth]] = key @@ -851,9 +911,18 @@ def getCombinedAxis(self, template_args): def getModelKind(self, args, template_args): assert(len(args) > 0) - model_kind = args[0] + model_kind = None + # choose model_kind with most axes + for kind in args: + if kind in Data.kinds: + if not model_kind: + model_kind = kind + elif len(Data.kinds[kind].axes) > len(Data.kinds[model_kind].axes): + model_kind = kind + # use chosen model_kind if self.model_kind_template: model_kind = self.model_kind_template.format(*template_args) + assert(model_kind) return model_kind def getAxes(self, model_kind, template_args): @@ -969,6 +1038,7 @@ def makeDataTree(self, template_args): } def compute_data(kind): + # print("compute_data", kind) if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) @@ -1026,7 +1096,40 @@ def compute_data(kind): val = compute_func(*args_val) datatree.set(axes_index, val) + def compute_index(kind_preindex, index_args): + # print("compute_index", kind_preindex, index_args) + Data.compute(kind_preindex) + datatree_preindex = Data.kinds[kind_preindex] + + # extract axes and indices + partial_axis_index = {} + for index_str in index_args: + index_list = index_str.split("::") + if len(index_list) != 2: + raise NameError("Expected valid index ::: {}".format(index_str)) + axis_name = index_list[0].strip() + index_name = index_list[1].strip() + partial_axis_index.update(Data.get_axis_index(axis_name, index_name)) + + kind = "{}[{}]".format(kind_preindex, ",".join(index_args)) + + datatree = None + if kind in Data.kinds: + datatree = Data.kinds[kind] + if datatree.data: + return + else: + axes = Data.axes_difference(datatree_preindex.axes, partial_axis_index) + datatree = Data.DataTree(kind, datatree_preindex.label, axes=axes) + Data.kinds[kind] = datatree + + datatree.makeData() + + for axes_index, partial_axes_index, value in datatree_preindex.partial_match_items(partial_axis_index): + datatree.set(partial_axes_index, value) + def compute_templated_data(kind_template, template_args): + # print("compute_templated_data", kind_template, template_args) if kind_template in Data.kind_templates: kind = Data.kind_templates[kind_template].getKind(template_args) if not kind in Data.kinds: @@ -1039,73 +1142,98 @@ def compute_templated_data(kind_template, template_args): raise NameError("Unkown kind template {}".format(kind_template)) def kind_template_scan(kind): + # print("kind_template_scan", kind) kind_prefix = None template_args = [] - - template_arg_start_idx = -1 + index_args = [] template_depth = 0 index_depth = 0 - for i in range(0, len(kind)): + arg_end_idx = -1 + + # look through string backwards to find indexing or templating + for i_forward in range(0, len(kind)): + i = len(kind) - i_forward - 1 c = kind[i] - if c == "<" or c == "[": + if c == ">" or c == "]": if template_depth == 0 and index_depth == 0: - template_arg_start_idx = i+1 - if not kind_prefix: - kind_prefix = kind[:i] - if c == "<": + arg_end_idx = i + if c == ">": template_depth += 1 - elif c == "[": + elif c == "]": index_depth += 1 elif c == ",": - if template_depth == 0 and index_depth == 1 or \ - template_depth == 1 and index_depth == 0: - template_args.append(kind[template_arg_start_idx:i]) - template_arg_start_idx = i+1 - elif c == ">" or c == "]": - if c == ">": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i+1:arg_end_idx].strip()) + arg_end_idx = i + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i+1:arg_end_idx].strip()) + arg_end_idx = i + elif c == "<" or c == "[": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i+1:arg_end_idx].strip()) + arg_end_idx = -1 + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i+1:arg_end_idx].strip()) + arg_end_idx = -1 + if c == "<": template_depth -= 1 - elif c == "]": + elif c == "[": index_depth -= 1 if template_depth == 0 and index_depth == 0: - template_args.append(kind[template_arg_start_idx:i]) - template_arg_start_idx = -1 - assert(template_arg_start_idx == -1) + if not kind_prefix: + kind_prefix = kind[:i].strip() + break + assert(arg_end_idx == -1) assert(template_depth == 0) assert(index_depth == 0) + assert(kind_prefix) - if not kind_prefix: - kind_prefix = kind - - for i in range(0,len(template_args)): - template_args[i] = template_args[i].strip() + # reverse lists + for i in range(0, len(template_args)//2): + i_rev = len(template_args) - i - 1 + template_args[i], template_args[i_rev] = template_args[i_rev], template_args[i] + for i in range(0, len(index_args)//2): + i_rev = len(index_args) - i - 1 + index_args[i], index_args[i_rev] = index_args[i_rev], index_args[i] - return (kind_prefix, template_args) + return (kind_prefix, template_args, index_args) def compute(kind): if kind in Data.kinds: if not Data.kinds[kind].data: Data.compute_data(kind) - return - - kind_template, template_args = Data.kind_template_scan(kind) - if kind_template in Data.kind_templates: - Data.compute_templated_data(kind_template, template_args) - return - - raise NameError("Unknown data kind {}".format(kind)) + else: + pass + else: + kind_template, template_args, index_args = Data.kind_template_scan(kind) + # print("Data.kind_template_scan", kind_template, template_args, index_args) + if template_args: + if kind_template in Data.kind_templates: + Data.compute_templated_data(kind_template, template_args) + else: + raise NameError("Unknown data kind template {}".format(kind)) + elif index_args: + Data.compute_index(kind_template, index_args) + else: + raise NameError("Unknown data kind {}".format(kind)) def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) - return int(sweep_subdir_name.replace("SIZE_", "")); - -def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): - # print(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size) + run_size_name = sweep_subdir_name.replace("SIZE_", "") + try: + run_size = int(run_size_name) + return str(run_size) + except ValueError: + raise NameError("Expected SIZE_".format(sweep_subdir_name)) + +def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index): + # print(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) with open(sweep_subdir_runinfo_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') @@ -1128,15 +1256,17 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): if not Data.kinds[info_kind].data: # add data to kind Data.kinds[info_kind].makeData() - if not sweep_dir_name in Data.kinds[info_kind].data.data: + if not sweep_index in Data.kinds[info_kind].data.data: # add new sweep to global data - Data.kinds[info_kind].data.data[sweep_dir_name] = {} - if run_size in Data.kinds[info_kind].data.data[sweep_dir_name]: - print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size)) + Data.kinds[info_kind].data.data[sweep_index] = {} + if run_size_index in Data.kinds[info_kind].data.data[sweep_index]: + sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size_name)) sys.exit(1) else: # add new size to global data - Data.kinds[info_kind].data.data[sweep_dir_name][run_size] = {} + Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} # make map of columns to names c_to_info_kinds[c] = info_kind c_to_info_kinds[info_kind] = c @@ -1147,10 +1277,8 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): kernel_index = Data.kernels[kernel_name] elif (len(Data.include_kernels) == 0 or kernel_name in Data.include_kernels) and (not kernel_name in Data.exclude_kernels): # add kernel to global list - kernel_index = Data.num_kernels - Data.num_kernels += 1 - Data.kernels[kernel_name] = kernel_index - Data.kernels[kernel_index] = kernel_name + Data.add_kernel(kernel_name) + kernel_index = Data.kernels[kernel_name] else: continue # skip this kernel @@ -1161,8 +1289,8 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): val = int(row[c].strip()) # print(kernel_index, kernel_name, info_kind, val) - axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, - Data.axes["run_size"]: run_size, + axes_index = { Data.axes["sweep_dir_name"]: sweep_index, + Data.axes["run_size"]: run_size_index, Data.axes["kernel_index"]: kernel_index, } Data.kinds[info_kind].set(axes_index, val) @@ -1170,8 +1298,8 @@ def read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size): pass # could not convert data to int -def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): - # print(sweep_dir_name, sweep_subdir_timing_file_path, run_size) +def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index): + # print(sweep_index, sweep_subdir_timing_file_path, run_size_index) with open(sweep_subdir_timing_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') @@ -1180,12 +1308,14 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): raise NameError("Unknown kind {}".format(data_kind)) if not Data.kinds[data_kind].data: Data.kinds[data_kind].makeData() - if not sweep_dir_name in Data.kinds[data_kind].data.data: - Data.kinds[data_kind].data.data[sweep_dir_name] = {} - if not run_size in Data.kinds[data_kind].data.data[sweep_dir_name]: - Data.kinds[data_kind].data.data[sweep_dir_name][run_size] = {} + if not sweep_index in Data.kinds[data_kind].data.data: + Data.kinds[data_kind].data.data[sweep_index] = {} + if not run_size_index in Data.kinds[data_kind].data.data[sweep_index]: + Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} else: - raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size)) + sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) c_to_variant_index = {} c_to_tuning_index = {} @@ -1235,8 +1365,8 @@ def read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size): if variant_index < 0 or tuning_index < 0: continue # ignore data - axes_index = { Data.axes["sweep_dir_name"]: sweep_dir_name, - Data.axes["run_size"]: run_size, + axes_index = { Data.axes["sweep_dir_name"]: sweep_index, + Data.axes["run_size"]: run_size_index, Data.axes["kernel_index"]: kernel_index, Data.axes["variant_index"]: variant_index, Data.axes["tuning_index"]: tuning_index, } @@ -1291,48 +1421,55 @@ def get_plot_data2(xkind, ykind, partial_axes_index): return data +g_gname = None + +g_ylabel = None +g_yscale = None +g_ylim = None + +g_xlabel = None +g_xscale = None +g_xlim = None + +g_hbin_size = None def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds): - print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) + # print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) assert(split_axis_name == "kernel_index") for split_index in range(0, Data.num_kernels): split_name = Data.kernels[split_index] - ylabel = None - yscale = "log" - ylim = None + ylabel = g_ylabel + yscale = g_yscale or "log" + ylim = g_ylim + + xlabel = g_xlabel or Data.kinds[xkind].label + xscale = g_xscale or "log" + xlim = g_xlim - xlabel = Data.kinds[xkind].label - xscale = "log" - xlim = None + gname = g_gname - gname = None - if len(ykinds) == 1: - gname = "{}".format(ykinds[0]) + split_data = { "ynames": [], + "ycolor": {}, + "yformat": {}, + "ydata": {}, + "xdata": {}, } for ykind in ykinds: if gname: - gname = "{} {}".format(gname, ykind) + gname = "{}\n{}".format(gname, ykind) else: gname = "{}".format(ykind) if not ykind in Data.kinds: raise NameError("Unknown kind {}".format(ykind)) if not ylabel: ylabel = Data.kinds[ykind].label - elif ylabel != Data.kinds[ykind].label: + elif (not g_ylabel) and ylabel != Data.kinds[ykind].label: raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) - split_data = { "ynames": [], - "ycolor": {}, - "yformat": {}, - "ydata": {}, - "xdata": {}, } - - assert(xaxis_name == "run_size") - for x_i in range(0, Data.num_run_sizes): - x_index = Data.run_sizes[x_i] + for x_index in range(0, Data.num_run_sizes): axes_index = { Data.axes[split_axis_name]: split_index, Data.axes[xaxis_name]: x_index } @@ -1351,8 +1488,7 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk ymarker = "" if Data.axes["sweep_dir_name"] in data["axes_index"]: - sweep_dir_name = data["axes_index"][Data.axes["sweep_dir_name"]] - sweep_index = Data.sweeps[sweep_dir_name] + sweep_index = data["axes_index"][Data.axes["sweep_dir_name"]] ymarker = Data.sweep_markers[sweep_index] yformat = "{}-".format(ymarker) @@ -1369,20 +1505,32 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk split_data["ydata"][yname].append(data["ydata"][0]) split_data["xdata"][yname].append(data["xdata"][0]) - for yname in split_data["ynames"]: + fname = "{}_{}.png".format(outputfile_name, split_name) + if gname: + gname = "{}\n{}".format(split_name, gname) + else: + gname = "{}".format(split_name) - ycolor = split_data["ycolor"][yname] - yformat = split_data["yformat"][yname] - ydata = split_data["ydata"][yname] - xdata = split_data["xdata"][yname] + print("Plotting {}:".format(fname)) - if len(ykinds) > 1: - yname = "{} {}".format(Data.kinds[ykind].kind, yname) + for yname in split_data["ynames"]: - plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) + ycolor = split_data["ycolor"][yname] + yformat = split_data["yformat"][yname] + ydata = split_data["ydata"][yname] + xdata = split_data["xdata"][yname] - fname = "{}_{}.png".format(outputfile_name, split_name) - gname = "{}".format(split_name) + if yname in g_series_reformat and "format" in g_series_reformat[yname]: + yformat = g_series_reformat[yname]["format"] + if yname in g_series_reformat and "color" in g_series_reformat[yname]: + ycolor = g_series_reformat[yname]["color"] + + print(" series \"{}\" format \"{}\" color \"{}\"".format(yname, yformat, ycolor)) + + if len(ykinds) > 1: + yname = "{} {}".format(Data.kinds[ykind].kind, yname) + + plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) if ylabel: plt.ylabel(ylabel) @@ -1406,31 +1554,30 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk plt.clf() def plot_data_bar(outputfile_name, xaxis, ykinds): - print("plotting {} {} {}".format(outputfile_name, xaxis, ykinds)) + # print("plotting {} {} {}".format(outputfile_name, xaxis, ykinds)) assert(xaxis == "kernel_index") - gname = None + gname = g_gname - xlabel = "Kernel" - xscale = None - xlim = None + xlabel = g_xlabel or "Kernel" + xscale = g_xscale + xlim = g_xlim - ylabel = None - yscale = None - ylim = None - ywidth = None + ylabel = g_ylabel + yscale = g_yscale + ylim = g_ylim for ykind in ykinds: if gname: - gname = "{} {}".format(gname, ykind) + gname = "{}\n{}".format(gname, ykind) else: gname = "{}".format(ykind) if not ykind in Data.kinds: raise NameError("Unknown kind {}".format(ykind)) if not ylabel: ylabel = Data.kinds[ykind].label - elif ylabel != Data.kinds[ykind].label: + elif (not g_ylabel) and ylabel != Data.kinds[ykind].label: raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) kernel_data = { "kernel_names": [], @@ -1475,6 +1622,12 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): kernel_data["ydata"][yname].append(ydata["data"][0]) + fname = "{}.png".format(outputfile_name) + if not gname: + gname = "{}".format("bar") + + print("Plotting {}:".format(fname)) + num_xticks = len(kernel_data["kernel_centers"]) plt.figure(figsize=(max(num_xticks*0.5, 4), 6,)) @@ -1486,17 +1639,18 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): ycolor = kernel_data["ycolor"][yname] yaxis = kernel_data["ydata"][yname] + if yname in g_series_reformat and "color" in g_series_reformat[yname]: + ycolor = g_series_reformat[yname]["color"] + + print(" series \"{}\" color \"{}\"".format(yname, ycolor)) + xaxis = [c + (y_i+1)/(y_n+1) - 0.5 for c in kernel_data["kernel_centers"]] # pad with 0s if find missing data while len(yaxis) < len(kernel_data["kernel_names"]): yaxis.append(0.0) - plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor) # ,edgecolor="grey") - - fname = "{}.png".format(outputfile_name) - if not gname: - gname = "{}".format("bar") + plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor,zorder=3) # ,edgecolor="grey") xticks = kernel_data["kernel_centers"] xtick_names = kernel_data["kernel_names"] @@ -1519,7 +1673,10 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): plt.title(gname) plt.legend() - plt.grid(True) + plt.grid(True, zorder=0) + + plt.savefig(fname, dpi=150.0, bbox_inches="tight") + plt.clf() plt.savefig(fname, dpi=150.0, bbox_inches="tight") plt.clf() @@ -1556,6 +1713,69 @@ def fo(arg): nonlocal outputfile outputfile = arg handle_arg = fo + elif opt in ("-gname", "--graph-name"): + handle_num = 1 + def gn(arg): + global g_gname + g_gname = arg + handle_arg = gn + elif opt in ("-ylabel", "--y-axis-label"): + handle_num = 1 + def yl(arg): + global g_ylabel + g_ylabel = arg + handle_arg = yl + elif opt in ("-yscale", "--y-axis-scale"): + handle_num = 1 + def ys(arg): + global g_yscale + g_yscale = arg + handle_arg = ys + elif opt in ("-xlabel", "--x-axis-label"): + handle_num = 1 + def xl(arg): + global g_xlabel + g_xlabel = arg + handle_arg = xl + elif opt in ("-xscale", "--x-axis-scale"): + handle_num = 1 + def xs(arg): + global g_xscale + g_xscale = arg + handle_arg = xs + elif opt in ("-hbin", "--histogram-bin-size"): + handle_num = 1 + def hbin(arg): + global g_hbin_size + g_hbin_size = float(arg) + handle_arg = hbin + # two arg options + elif opt in ("-ylim", "--y-axis-limit"): + handle_num = 2 + def yl(ymin, ymax): + global g_ylim + g_ylim = (float(ymin), float(ymax)) + handle_arg = yl + elif opt in ("-xlim", "--x-axis-limit"): + handle_num = 2 + def xl(xmin, xmax): + global g_xlim + g_xlim = (float(xmin), float(xmax)) + handle_arg = xl + elif opt in ("--recolor"): + handle_num = 2 + def recolor(series_name, color_str): + if not series_name in g_series_reformat: + g_series_reformat[series_name] = {} + g_series_reformat[series_name]["color"] = make_color_tuple_str(color_str) + handle_arg = recolor + elif opt in ("--reformat"): + handle_num = 2 + def reformat(series_name, format_str): + if not series_name in g_series_reformat: + g_series_reformat[series_name] = {} + g_series_reformat[series_name]["format"] = format_str + handle_arg = reformat # multi arg options elif opt in ("-p", "--print"): handle_num = -1 @@ -1679,49 +1899,39 @@ def fes(arg): if sweep_dir_name in Data.exclude_sweeps: continue - got_something = False + if sweep_dir_name in Data.sweeps: + raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) + Data.add_sweep(sweep_dir_name) + sweep_index = Data.sweeps[sweep_dir_name] + if sweep_index >= len(g_markers): + raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) + Data.sweep_markers[sweep_index] = g_markers[sweep_index] for r0,sweep_subdir_names,f0 in os.walk(sweep_dir_path): for sweep_subdir_name in sweep_subdir_names: sweep_subdir_path = os.path.join(sweep_dir_path, sweep_subdir_name) # print(sweep_dir_name, sweep_subdir_path) - try: - run_size = get_size_from_dir_name(sweep_subdir_name) - - if not str(run_size) in Data.run_sizes: - Data.run_sizes[Data.num_run_sizes] = run_size - Data.run_sizes[str(run_size)] = Data.num_run_sizes - Data.num_run_sizes += 1 - - sweep_subdir_timing_file_path = "" - sweep_subdir_runinfo_file_path = "" - for r1,d1,sweep_subdir_file_names in os.walk(sweep_subdir_path): - for sweep_subdir_file_name in sweep_subdir_file_names: - sweep_subdir_file_path = os.path.join(sweep_subdir_path, sweep_subdir_file_name) - if sweep_subdir_file_name == timing_filename: - sweep_subdir_timing_file_path = sweep_subdir_file_path - elif sweep_subdir_file_name == runinfo_filename: - sweep_subdir_runinfo_file_path = sweep_subdir_file_path - - if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": - # print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) - read_runinfo_file(sweep_dir_name, sweep_subdir_runinfo_file_path, run_size) - read_timing_file(sweep_dir_name, sweep_subdir_timing_file_path, run_size) - got_something = True - except ValueError: - print("Couldn't get run size from \"{0}\"".format(sweep_subdir_name)) - pass # could not convert data to int - - if got_something: - if sweep_dir_name in Data.sweeps: - raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) - Data.sweeps[Data.num_sweeps] = sweep_dir_name - Data.sweeps[sweep_dir_name] = Data.num_sweeps - if Data.num_sweeps >= len(g_markers): - raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) - Data.sweep_markers[Data.num_sweeps] = g_markers[Data.num_sweeps] - Data.num_sweeps += 1 + run_size_name = get_size_from_dir_name(sweep_subdir_name) + + if not run_size_name in Data.run_sizes: + Data.add_run_size(run_size_name) + run_size_index = Data.run_sizes[run_size_name] + + sweep_subdir_timing_file_path = "" + sweep_subdir_runinfo_file_path = "" + for r1,d1,sweep_subdir_file_names in os.walk(sweep_subdir_path): + for sweep_subdir_file_name in sweep_subdir_file_names: + sweep_subdir_file_path = os.path.join(sweep_subdir_path, sweep_subdir_file_name) + if sweep_subdir_file_name == timing_filename: + sweep_subdir_timing_file_path = sweep_subdir_file_path + elif sweep_subdir_file_name == runinfo_filename: + sweep_subdir_runinfo_file_path = sweep_subdir_file_path + + if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": + # print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) + read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) + read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) kinds_string = "" for kindTree in Data.kinds.values(): @@ -1778,16 +1988,18 @@ def fes(arg): print(" {}".format(tuning_string[2:])) for kind in print_kinds: + print("Print Data {}:".format(kind)) Data.compute(kind) - print("Print Data {}:".format(Data.kinds[kind].kind)) print(Data.kinds[kind].dataString()) for kind_list in split_line_graph_kind_lists: + print("Plot split line graph {}:".format(kind_list)) for kind in kind_list: Data.compute(kind) plot_data_split_line(outputfile, "kernel_index", "run_size", "Problem size", kind_list) for kind_list in bar_graph_kind_lists: + print("Plot bar graph {}:".format(kind_list)) for kind in kind_list: Data.compute(kind) plot_data_bar(outputfile, "kernel_index", kind_list) From 9f7a00fcc5c11e0271182728afe012a8300a62b7 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:40:10 -0700 Subject: [PATCH 054/174] Add and update kind templates --- scripts/sweep_graph.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index e34da7410..a92edaa6a 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1002,14 +1002,23 @@ def makeDataTree(self, template_args): } kind_templates = { - "first": DataTreeTemplate("first<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=first), - "last": DataTreeTemplate("last<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=last), - "min": DataTreeTemplate("min<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=min), - "max": DataTreeTemplate("max<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=max), - "sum": DataTreeTemplate("sum<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=sum), - "avg": DataTreeTemplate("avg<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=avg), - "stddev": DataTreeTemplate("stddev<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=stddev), - "relstddev": DataTreeTemplate("relstddev<{0}>[{1}]", "{0}", combined_axis="{1}", args=["{0}"], func=relstddev), + "log10": DataTreeTemplate("log10<{0}>", "log10({0})", args=["{0}",], func=lambda val: math.log(val, 10)), + "log2": DataTreeTemplate("log2<{0}>", "log2({0})", args=["{0}",], func=lambda val: math.log(val, 2)), + "ln": DataTreeTemplate("ln<{0}>", "ln({0})", args=["{0}",], func=lambda val: math.log(val)), + + "add": DataTreeTemplate("add<{0},{1}>", "{0} + {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs + rhs), + "sub": DataTreeTemplate("sub<{0},{1}>", "{0} - {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs - rhs), + "mul": DataTreeTemplate("mul<{0},{1}>", "{0} * {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs * rhs), + "div": DataTreeTemplate("div<{0},{1}>", "{0} / {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs / rhs), + + "first": DataTreeTemplate("first<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=first), + "last": DataTreeTemplate("last<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=last), + "min": DataTreeTemplate("min<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=min), + "max": DataTreeTemplate("max<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=max), + "sum": DataTreeTemplate("sum<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=sum), + "avg": DataTreeTemplate("avg<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=avg), + "stddev": DataTreeTemplate("stddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=stddev), + "relstddev": DataTreeTemplate("relstddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=relstddev), "_LR": DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=linearRegression), "LR_intercept": DataTreeTemplate("LR_intercept<{0}>", "intercept", args=["_LR<{0}>"], func=lambda lr: lr[0]), From ed0621f0cfdddbb77d3b5ac13622898790796019 Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:40:22 -0700 Subject: [PATCH 055/174] Add histogram plotting --- scripts/sweep_graph.py | 176 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index a92edaa6a..365b3ebba 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1687,6 +1687,169 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): plt.savefig(fname, dpi=150.0, bbox_inches="tight") plt.clf() + +def plot_data_histogram(outputfile_name, haxis, hkinds): + # print("plotting {} {} {}".format(outputfile_name, haxis, hkinds)) + + assert(haxis == "kernel_index") + + gname = g_gname + + hbin_size = g_hbin_size + hbin_max = None + hbin_min = None + + xlabel = g_xlabel + xscale = g_xscale + xlim = g_xlim + + ylabel = g_ylabel or "Number" + yscale = g_yscale + ylim = g_ylim + + for ykind in hkinds: + if gname: + gname = "{}\n{}".format(gname, ykind) + else: + gname = "{}".format(ykind) + if not ykind in Data.kinds: + raise NameError("Unknown kind {}".format(ykind)) + if not xlabel: + xlabel = Data.kinds[ykind].label + elif (not g_xlabel) and xlabel != Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in hkinds])) + + if not hbin_size: + + hdata_all = [] + + for kernel_index in range(0, Data.num_kernels): + kernel_name = Data.kernels[kernel_index] + + axes_index = { Data.axes["kernel_index"]: kernel_index } + + for ykind in hkinds: + + hdata_list = get_plot_data(ykind, axes_index) + + for hdata in hdata_list: + + assert(len(hdata["data"]) == 1) + hdata_all.append(hdata["data"][0]) + + hdata_all.sort() + + num_hdata = len(hdata_all) + i_Q1 = math.floor(num_hdata * 0.25) + i_Q3 = math.floor(num_hdata * 0.75) + hdata_Q1 = hdata_all[i_Q1] + hdata_Q3 = hdata_all[i_Q3] + iqr = hdata_Q3 - hdata_Q1 + + hbin_size = 2.0 * iqr / num_hdata**(1.0/3.0) + + if hbin_size > 1.0: + hbin_size = math.floor(hbin_size) + elif hbin_size > 0.0: + hbin_size = 1.0 / math.ceil(1.0 / hbin_size) + else: + hbin_size = 1.0 + + kernel_data = { "hnames": {}, + "hcolor": {}, + "hbins": {}, } + + for kernel_index in range(0, Data.num_kernels): + kernel_name = Data.kernels[kernel_index] + + axes_index = { Data.axes["kernel_index"]: kernel_index } + + for ykind in hkinds: + + hdata_list = get_plot_data(ykind, axes_index) + + for hdata in hdata_list: + + assert(len(hdata["data"]) == 1) + + hname = hdata["name"] + if len(hkinds) > 1: + hname = "{} {}".format(Data.kinds[ykind].kind, hname) + + hcolor = (0.0, 0.0, 0.0, 1.0) + if Data.axes["variant_index"] in hdata["axes_index"]: + variant_index = hdata["axes_index"][Data.axes["variant_index"]] + hcolor = Data.variant_colors[variant_index] + + if not hname in kernel_data["hnames"]: + kernel_data["hnames"][hname] = len(kernel_data["hnames"]) + kernel_data["hcolor"][hname] = hcolor + kernel_data["hbins"][hname] = {} + + hbin = math.floor(hdata["data"][0] / hbin_size) + + if hbin_max == None or hbin > hbin_max: + hbin_max = hbin + if hbin_min == None or hbin < hbin_min: + hbin_min = hbin + + if not hbin in kernel_data["hbins"][hname]: + kernel_data["hbins"][hname][hbin] = 0 + kernel_data["hbins"][hname][hbin] += 1 + + fname = "{}.png".format(outputfile_name) + if not gname: + gname = "{}".format("histogram") + + print("Plotting {}:".format(fname)) + + num_xticks = hbin_max - hbin_min + 1 + if xlim: + num_xticks = math.ceil((xlim[1] - xlim[0]) / hbin_size) + plt.figure(figsize=(max(num_xticks*0.5, 4), 6,)) + + h_n = len(kernel_data["hnames"]) + hwidth = hbin_size / h_n + print(h_n, hwidth, hbin_size) + for hname in kernel_data["hnames"]: + + h_i = kernel_data["hnames"][hname] + xoffset = hbin_size * ((h_i+1)/(h_n+1) - 0.5) + hcolor = kernel_data["hcolor"][hname] + hbins = kernel_data["hbins"][hname] + + if hname in g_series_reformat and "color" in g_series_reformat[hname]: + hcolor = g_series_reformat[hname]["color"] + + print(" series \"{}\" color \"{}\" offset {}".format(hname, hcolor, xoffset)) + + xaxis = [] + haxis = [] + for i, hval in hbins.items(): + xval = (i + 0.5) * hbin_size + xoffset + xaxis.append(xval) + haxis.append(hval) + + plt.bar(xaxis,haxis,label=hname,width=hwidth,color=hcolor,zorder=3) # ,edgecolor="grey") + + if ylabel: + plt.ylabel(ylabel) + if yscale: + plt.yscale(yscale) + if ylim: + plt.ylim(ylim) + + if xlabel: + plt.xlabel(xlabel) + if xscale: + plt.xscale(xscale) + if xlim: + plt.xlim(xlim) + + plt.title(gname) + plt.legend() + plt.grid(True, zorder=0) + plt.savefig(fname, dpi=150.0, bbox_inches="tight") plt.clf() @@ -1700,6 +1863,7 @@ def main(argv): print_kinds = [] split_line_graph_kind_lists = [] bar_graph_kind_lists = [] + histogram_graph_kind_lists = [] i = 0 while i < len(argv): @@ -1803,6 +1967,12 @@ def fslg(arg): def fbg(arg): bar_graph_kind_lists[len(bar_graph_kind_lists)-1].append(arg) handle_arg = fbg + elif opt in ("-hg", "--histogram-graph"): + handle_num = -1 + histogram_graph_kind_lists.append([]) + def fhg(arg): + histogram_graph_kind_lists[len(histogram_graph_kind_lists)-1].append(arg) + handle_arg = fhg elif opt in ("-kg", "--kernel-groups"): handle_num = -1 def fkg(arg): @@ -2013,5 +2183,11 @@ def fes(arg): Data.compute(kind) plot_data_bar(outputfile, "kernel_index", kind_list) + for kind_list in histogram_graph_kind_lists: + print("Plot histogram graph {}:".format(kind_list)) + for kind in kind_list: + Data.compute(kind) + plot_data_histogram(outputfile, "kernel_index", kind_list) + if __name__ == "__main__": main(sys.argv[1:]) From 187e7d16cf7f17e8a823b97543dac42fab12a1cb Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:56:59 -0700 Subject: [PATCH 056/174] Add option to move legend --- scripts/sweep_graph.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 365b3ebba..8284eb96a 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -8,6 +8,13 @@ import csv import matplotlib.pyplot as plt +def make_tuple_str(astr): + astr = astr.strip() + if len(astr) < 2 or astr[0] != "(" or astr[len(astr)-1] != ")": + return None + astr = astr[1:len(astr)-1] + atup = astr.split(",") + return tuple((a.strip() for a in atup)) def normalize_color_tuple(t): len_t = 0.0 @@ -40,11 +47,7 @@ def make_color_tuple_rgb(r, g, b): return (r/255.0, g/255.0, b/255.0) def make_color_tuple_str(color_str): - color_str = color_str.strip() - if len(color_str) < 2 or color_str[0] != "(" or color_str[len(color_str)-1] != ")": - raise NameError("Expected a tuple of 3 floats in [0-1]") - color_str = color_str[1:len(color_str)-1] - rgb = color_str.split(",") + rgb = make_tuple_str(color_str) if len(rgb) != 3: raise NameError("Expected a tuple of 3 floats in [0-1]") r = float(rgb[0].strip()) @@ -1432,6 +1435,8 @@ def get_plot_data2(xkind, ykind, partial_axes_index): g_gname = None +g_lloc = 'best' + g_ylabel = None g_yscale = None g_ylim = None @@ -1449,6 +1454,8 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk for split_index in range(0, Data.num_kernels): split_name = Data.kernels[split_index] + lloc = g_lloc + ylabel = g_ylabel yscale = g_yscale or "log" ylim = g_ylim @@ -1556,7 +1563,7 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk plt.xlim(xlim) plt.title(gname) - plt.legend() + plt.legend(loc=lloc) plt.grid(True) plt.savefig(fname, dpi=150.0) @@ -1569,6 +1576,8 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): gname = g_gname + lloc = g_lloc + xlabel = g_xlabel or "Kernel" xscale = g_xscale xlim = g_xlim @@ -1681,7 +1690,7 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): plt.xticks(xticks, xtick_names, rotation=90) plt.title(gname) - plt.legend() + plt.legend(loc=lloc) plt.grid(True, zorder=0) plt.savefig(fname, dpi=150.0, bbox_inches="tight") @@ -1695,6 +1704,8 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): gname = g_gname + lloc = g_lloc + hbin_size = g_hbin_size hbin_max = None hbin_min = None @@ -1847,7 +1858,7 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): plt.xlim(xlim) plt.title(gname) - plt.legend() + plt.legend(loc=lloc) plt.grid(True, zorder=0) plt.savefig(fname, dpi=150.0, bbox_inches="tight") @@ -1892,6 +1903,19 @@ def gn(arg): global g_gname g_gname = arg handle_arg = gn + elif opt in ("-lloc", "--legend-location"): + handle_num = 1 + def gll(arg): + global g_lloc + atup = make_tuple_str(arg) + if not atup: + g_lloc = arg + elif len(atup) == 2: + g_lloc = (float(atup[0]), float(atup[1]),) + else: + print("Expected a string or tuple of 2 numbers: {}".format(arg)) + sys.exit(2) + handle_arg = gll elif opt in ("-ylabel", "--y-axis-label"): handle_num = 1 def yl(arg): From 700be35a49b2a5c702bd229a76e7242f2036f30e Mon Sep 17 00:00:00 2001 From: Jason Burmark Date: Tue, 31 May 2022 21:57:20 -0700 Subject: [PATCH 057/174] Move bar zorder to under axes --- scripts/sweep_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 8284eb96a..902acf029 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1668,7 +1668,7 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): while len(yaxis) < len(kernel_data["kernel_names"]): yaxis.append(0.0) - plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor,zorder=3) # ,edgecolor="grey") + plt.bar(xaxis,yaxis,label=yname,width=ywidth,color=ycolor,zorder=2) # ,edgecolor="grey") xticks = kernel_data["kernel_centers"] xtick_names = kernel_data["kernel_names"] @@ -1841,7 +1841,7 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): xaxis.append(xval) haxis.append(hval) - plt.bar(xaxis,haxis,label=hname,width=hwidth,color=hcolor,zorder=3) # ,edgecolor="grey") + plt.bar(xaxis,haxis,label=hname,width=hwidth,color=hcolor,zorder=2) # ,edgecolor="grey") if ylabel: plt.ylabel(ylabel) From 16b8340dc9f6cd55263583fa39d8269752f22cf9 Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 11 Jul 2022 09:04:04 -0700 Subject: [PATCH 058/174] Code formatting --- src/common/KernelBase.hpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 9bcfc4a84..04ccd70a0 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -38,7 +38,7 @@ #include #define CALI_START \ - if(doCaliperTiming) { \ + if (doCaliperTiming) { \ std::string kstr = getName(); \ std::string gstr = getGroupName(kstr); \ std::string vstr = getVariantName(running_variant); \ @@ -48,7 +48,7 @@ } #define CALI_STOP \ - if(doCaliperTiming) { \ + if (doCaliperTiming) { \ std::string kstr = getName(); \ std::string gstr = getGroupName(kstr); \ std::string vstr = getVariantName(running_variant); \ @@ -56,10 +56,14 @@ CALI_MARK_END(gstr.c_str()); \ CALI_MARK_END(vstr.c_str()); \ } + #else + #define CALI_START #define CALI_STOP + #endif + namespace rajaperf { /*! From 92955550681d92d660ee442d6bb5dd7ade71f022 Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 11 Jul 2022 09:19:31 -0700 Subject: [PATCH 059/174] Fix merge errors --- src/common/Executor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index d1d45a7ea..b0e50b1d9 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -43,6 +43,7 @@ namespace rajaperf { using namespace std; +#ifdef RAJAPERF_USE_CALIPER vector split(const string str, const string regex_str) { regex regexz(regex_str); @@ -51,6 +52,7 @@ vector split(const string str, const string regex_str) sregex_token_iterator() ); return list; } +#endif namespace { @@ -109,6 +111,8 @@ void Allreduce(const Checksum_type* send, Checksum_type* recv, int count, #endif +} // close unnamed namespace + Executor::Executor(int argc, char** argv) : run_params(argc, argv), From bc0573a1a9750e7048ead6e8d58ebe8082a66414 Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 18 Jul 2022 10:27:43 -0700 Subject: [PATCH 060/174] Update CMakeLists.txt Fix indentation formating Co-authored-by: Jason Burmark --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dcb9bac4e..6fe413b98 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,7 +157,7 @@ if (ENABLE_CUDA) set(RAJAPERF_COMPILER "${CUDA_NVCC_EXECUTABLE}") list(APPEND RAJAPERF_COMPILER ${CMAKE_CXX_COMPILER}) set(RAJAPERF_COMPILER_OPTIONS "${CUDA_NVCC_FLAGS}") - elseif (ENABLE_HIP) +elseif (ENABLE_HIP) set(RAJAPERF_COMPILER "${HIP_HIPCC_EXECUTABLE}") list(APPEND RAJAPERF_COMPILER ${CMAKE_CXX_COMPILER}) set(RAJAPERF_COMPILER_OPTIONS "${HIP_HIPCC_FLAGS}") From 2a761bb2d10db8cd70ebb3a7286b071ee5e314cf Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 18 Jul 2022 11:19:40 -0700 Subject: [PATCH 061/174] Update src/basic/PI_ATOMIC-OMP.cpp fix white space Co-authored-by: Jason Burmark --- src/basic/PI_ATOMIC-OMP.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/basic/PI_ATOMIC-OMP.cpp b/src/basic/PI_ATOMIC-OMP.cpp index 060a0d97a..c7b207d20 100644 --- a/src/basic/PI_ATOMIC-OMP.cpp +++ b/src/basic/PI_ATOMIC-OMP.cpp @@ -31,6 +31,7 @@ void PI_ATOMIC::runOpenMPVariant(VariantID vid, size_t RAJAPERF_UNUSED_ARG(tune_ switch ( vid ) { case Base_OpenMP : { + startTimer(); for (RepIndex_type irep = 0; irep < run_reps; ++irep) { From e79cf13ed7032cc575c483449623a2cc152b170f Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 18 Jul 2022 11:19:55 -0700 Subject: [PATCH 062/174] Update src/basic/PI_ATOMIC-OMP.cpp fix whitespace Co-authored-by: Jason Burmark --- src/basic/PI_ATOMIC-OMP.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/basic/PI_ATOMIC-OMP.cpp b/src/basic/PI_ATOMIC-OMP.cpp index c7b207d20..e7b65dca5 100644 --- a/src/basic/PI_ATOMIC-OMP.cpp +++ b/src/basic/PI_ATOMIC-OMP.cpp @@ -46,6 +46,7 @@ void PI_ATOMIC::runOpenMPVariant(VariantID vid, size_t RAJAPERF_UNUSED_ARG(tune_ } stopTimer(); + break; } From 81e29e44e87439f60c1a14c09078c0f69127a58c Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 18 Jul 2022 11:20:14 -0700 Subject: [PATCH 063/174] Update .gitmodules fix whitespace Co-authored-by: Jason Burmark --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 8691aacfb..9c56db234 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "blt"] path = blt - url = https://github.com/LLNL/blt.git - ignore = dirty + url = https://github.com/LLNL/blt.git + ignore = dirty [submodule "tpl/RAJA"] path = tpl/RAJA url = https://github.com/LLNL/RAJA.git From 53671b0672b9994e67348d40e3ad0657246e46dc Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 18 Jul 2022 11:20:31 -0700 Subject: [PATCH 064/174] Update src/basic/PI_ATOMIC-OMP.cpp fix whitespace Co-authored-by: Jason Burmark --- src/basic/PI_ATOMIC-OMP.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/basic/PI_ATOMIC-OMP.cpp b/src/basic/PI_ATOMIC-OMP.cpp index e7b65dca5..4296ed845 100644 --- a/src/basic/PI_ATOMIC-OMP.cpp +++ b/src/basic/PI_ATOMIC-OMP.cpp @@ -70,6 +70,7 @@ void PI_ATOMIC::runOpenMPVariant(VariantID vid, size_t RAJAPERF_UNUSED_ARG(tune_ } stopTimer(); + break; } From 14f0a39c71cdb533d7effafda0d1ad69315ce050 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 26 Jul 2022 13:25:59 -0700 Subject: [PATCH 065/174] add +caliper spec to package.py; add include_directories for adiak --- CMakeLists.txt | 3 ++- scripts/spack_packages/raja_perf/package.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fff6800e..8d5f30e44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,8 @@ if (RAJA_PERFSUITE_USE_CALIPER) find_package(adiak REQUIRED) # use ${adiak_LIBRARIES} since version could have adiak vs adiak::adiak export list(APPEND RAJA_PERFSUITE_DEPENDS ${adiak_LIBRARIES}) - message(STATUS "Using Adiak") + message(STATUS "Using Adiak INCLUDES: ${adiak_INCLUDE_DIRS}") + include_directories(${adiak_INCLUDE_DIRS}) if (ENABLE_CUDA) # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't diff --git a/scripts/spack_packages/raja_perf/package.py b/scripts/spack_packages/raja_perf/package.py index c0ba13602..352d5565f 100644 --- a/scripts/spack_packages/raja_perf/package.py +++ b/scripts/spack_packages/raja_perf/package.py @@ -76,10 +76,13 @@ class RajaPerf(CMakePackage, CudaPackage, ROCmPackage): variant('libcpp', default=False, description='Uses libc++ instead of libstdc++') variant('tests', default='basic', values=('none', 'basic', 'benchmarks'), multi=False, description='Tests to run') + variant('caliper',default=False, description='Build with support for Caliper based profiling') depends_on('cmake@3.9:', type='build') depends_on('blt@0.4.1', type='build', when='@main') depends_on('blt@0.4.1:', type='build') + depends_on('caliper@2.7.0',when='+caliper') + depends_on('caliper@2.7.0 +cuda',when='+caliper +cuda') conflicts('+openmp', when='+rocm') conflicts('~openmp', when='+openmp_target', msg='OpenMP target requires OpenMP') @@ -343,6 +346,7 @@ def hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write(cmake_cache_option("ENABLE_BENCHMARKS", 'tests=benchmarks' in spec)) cfg.write(cmake_cache_option("ENABLE_TESTS", not 'tests=none' in spec or self.run_tests)) + cfg.write(cmake_cache_option("RAJA_PERFSUITE_USE_CALIPER","+caliper" in spec)) ####################### # Close and save From 3b2de087c63fa57cdd75f62b725b0bc3056ecaad Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Tue, 26 Jul 2022 18:50:21 -0700 Subject: [PATCH 066/174] change set_target_properties for adiak target to for +cuda spec; we do this to be independent of adiak vs adiak::adiak target depending on spack version; eventually target should be set to adiak::adiak for versions of adiak 0.2.2+ introduced in newer versions of spack --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d5f30e44..a3c6a9dd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,7 @@ if (RAJA_PERFSUITE_USE_CALIPER) if (ENABLE_CUDA) # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't - set_target_properties(adiak PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") + set_target_properties(${adiak_LIBRARIES} PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") endif () endif () From 52ac292955cd79cfc18926ee4be5c69741c14cd4 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Mon, 1 Aug 2022 11:21:57 -0700 Subject: [PATCH 067/174] gen per kernel adiak keyval such as runreps, itersperrep, etc --- src/common/Executor.cpp | 18 ++++++++++++++++++ src/common/KernelBase.cpp | 17 +++++++++++++++++ src/common/KernelBase.hpp | 3 ++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 71fac9bd2..fb0b00e6a 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -185,6 +185,18 @@ Executor::Executor(int argc, char** argv) adiak::value("ProblemSize",run_params.getSize()); } + // Openmp section + // todo get lib : e.g libomp,libiomp5,libgomp etc : parse adiak::libraries via tool callback + // note version map only goes to 5.1; revise as needed +#if defined(_OPENMP) + std::unordered_map map{ + {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"},{201811,"5.0"},{202011,"5.1"}}; + string strval = map.at(_OPENMP); + adiak::value("omp_version",strval.c_str()); + strval = std::to_string(omp_get_max_threads()); + adiak::value("omp_max_threads",strval.c_str()); +#endif + #endif } @@ -979,6 +991,12 @@ void Executor::runSuite() } // loop over passes through suite #ifdef RAJA_PERFSUITE_USE_CALIPER + // setup per kernel Adiak meta data + for (size_t ik = 0; ik < kernels.size(); ++ik) { + KernelBase* kernel = kernels[ik]; + kernel->setKernelAdiakMeta(); + } // loop over kernels + // Flush Caliper data KernelBase::setCaliperMgrFlush(); #endif diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index dc0957b9f..bb6b7edfb 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -342,6 +342,23 @@ void KernelBase::print(std::ostream& os) const os << std::endl; } #ifdef RAJA_PERFSUITE_USE_CALIPER +void KernelBase::setKernelAdiakMeta() +{ + std::string problem_size = std::to_string(getActualProblemSize()); + std::string reps = std::to_string(getRunReps()); + std::string iters_rep = std::to_string(getItsPerRep()); + std::string kerns_rep = std::to_string(getKernelsPerRep()); + std::string bytes_rep = std::to_string(getBytesPerRep()); + std::string flops_rep = std::to_string(getFLOPsPerRep()); + + std::string valStr = "problem_size:"+problem_size; + valStr += ",reps:"+reps; + valStr += ",iters_rep:"+iters_rep; + valStr += ",kerns_rep:"+kerns_rep; + valStr += ",bytes_rep:"+bytes_rep; + valStr += ",flops_rep:"+flops_rep; + adiak::value(getName().c_str(),valStr.c_str()); +} // initialize a KernelBase static std::map KernelBase::mgr; #endif diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index ada64e95d..ed8891a1f 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -280,7 +280,8 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER void caliperOn() { doCaliperTiming = true; } - void caliperOff() { doCaliperTiming = false; } + void caliperOff() { doCaliperTiming = false; } + void setKernelAdiakMeta(); static void setCaliperMgrVariant(VariantID vid) { cali::ConfigManager m; From a4aec2bbb0dbd7567c89efca3575f4e5f7f7ea27 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 1 Aug 2022 12:06:04 -0700 Subject: [PATCH 068/174] add adiak_ prefix to rajaperf::configuration variables in caliper section --- src/common/Executor.cpp | 54 +++++++++++++++++++------------------- src/rajaperf_config.hpp.in | 33 ++++++++++++----------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index fb0b00e6a..4d847b763 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -124,18 +124,18 @@ Executor::Executor(int argc, char** argv) adiak::libraries(); adiak::cmdline(); adiak::clustername(); - adiak::value("perfsuite_version", cc.perfsuite_version); - adiak::value("raja_version", cc.raja_version); - adiak::value("cmake_build_type", cc.cmake_build_type); - adiak::value("cmake_cxx_flags", cc.cmake_cxx_flags); - adiak::value("cmake_exe_linker_flags", cc.cmake_exe_linker_flags); - adiak::value("rajaperf_compiler", cc.rajaperf_compiler); - adiak::value("rajaperf_compiler_options", cc.rajaperf_compiler_options); - adiak::value("compiler_version", cc.compiler_version); - - auto tokens = split(cc.rajaperf_compiler, "/"); + adiak::value("perfsuite_version", cc.adiak_perfsuite_version); + adiak::value("raja_version", cc.adiak_raja_version); + adiak::value("cmake_build_type", cc.adiak_cmake_build_type); + adiak::value("cmake_cxx_flags", cc.adiak_cmake_cxx_flags); + adiak::value("cmake_exe_linker_flags", cc.adiak_cmake_exe_linker_flags); + adiak::value("rajaperf_compiler", cc.adiak_rajaperf_compiler); + adiak::value("rajaperf_compiler_options", cc.adiak_rajaperf_compiler_options); + adiak::value("compiler_version", cc.adiak_compiler_version); + + auto tokens = split(cc.adiak_rajaperf_compiler, "/"); string compiler_exec = tokens.back(); - string compiler = compiler_exec + "-" + cc.compiler_version; + string compiler = compiler_exec + "-" + cc.adiak_compiler_version; cout << "Compiler: " << compiler << "\n"; adiak::value("compiler", compiler.c_str()); auto tsize = tokens.size(); @@ -151,29 +151,29 @@ Executor::Executor(int argc, char** argv) } } - if (strlen(cc.cuda_compiler_version) > 0) { - adiak::value("cuda_compiler_version", cc.cuda_compiler_version); + if (strlen(cc.adiak_cuda_compiler_version) > 0) { + adiak::value("cuda_compiler_version", cc.adiak_cuda_compiler_version); } - if (strlen(cc.gpu_targets) > 0) { - adiak::value("gpu_targets", cc.gpu_targets); + if (strlen(cc.adiak_gpu_targets) > 0) { + adiak::value("gpu_targets", cc.adiak_gpu_targets); } - if (strlen(cc.cmake_hip_architectures) > 0) { - adiak::value("cmake_hip_architectures", cc.cmake_hip_architectures); + if (strlen(cc.adiak_cmake_hip_architectures) > 0) { + adiak::value("cmake_hip_architectures", cc.adiak_cmake_hip_architectures); } - if (strlen(cc.gpu_targets_block_sizes) > 0) { - adiak::value("gpu_targets_block_sizes", cc.gpu_targets_block_sizes); + if (strlen(cc.adiak_gpu_targets_block_sizes) > 0) { + adiak::value("gpu_targets_block_sizes", cc.adiak_gpu_targets_block_sizes); } - if (strlen(cc.raja_hipcc_flags) > 0) { - adiak::value("raja_hipcc_flags", cc.raja_hipcc_flags); + if (strlen(cc.adiak_raja_hipcc_flags) > 0) { + adiak::value("raja_hipcc_flags", cc.adiak_raja_hipcc_flags); } - if (strlen(cc.mpi_cxx_compiler) > 0) { - adiak::value("mpi_cxx_compiler", cc.mpi_cxx_compiler); + if (strlen(cc.adiak_mpi_cxx_compiler) > 0) { + adiak::value("mpi_cxx_compiler", cc.adiak_mpi_cxx_compiler); } - if (strlen(cc.systype_build) > 0) { - adiak::value("systype_build", cc.systype_build); + if (strlen(cc.adiak_systype_build) > 0) { + adiak::value("systype_build", cc.adiak_systype_build); } - if (strlen(cc.machine_build) > 0) { - adiak::value("machine_build", cc.machine_build); + if (strlen(cc.adiak_machine_build) > 0) { + adiak::value("machine_build", cc.adiak_machine_build); } adiak::value("Tuning","default"); diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index 5039128f3..057bcf68c 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -32,23 +32,24 @@ namespace rajaperf { struct configuration { #ifdef RAJA_PERFSUITE_USE_CALIPER -constexpr static const char* perfsuite_version = "@CMAKE_PROJECT_VERSION@"; -constexpr static const char* raja_version = "@RAJA_LOADED@"; -constexpr static const char* cmake_build_type = "@CMAKE_BUILD_TYPE@"; -constexpr static const char* cmake_cxx_flags = "@CMAKE_CXX_FLAGS@"; -constexpr static const char* cmake_exe_linker_flags = "@CMAKE_EXE_LINKER_FLAGS@"; -constexpr static const char* rajaperf_compiler = "@RAJAPERF_COMPILER@"; -constexpr static const char* rajaperf_compiler_options = "@RAJAPERF_COMPILER_OPTIONS@"; -constexpr static const char* compiler_version = "@CMAKE_CXX_COMPILER_VERSION@"; -constexpr static const char* cuda_compiler_version = "@CMAKE_CUDA_COMPILER_VERSION@"; -constexpr static const char* gpu_targets = "@GPU_TARGETS@"; -constexpr static const char* cmake_hip_architectures = "@CMAKE_HIP_ARCHIECTURES@"; -constexpr static const char* gpu_targets_block_sizes = "@RAJA_PERFSUITE_GPU_BLOCKSIZES@"; -constexpr static const char* raja_hipcc_flags = "@RAJA_HIPCC_FLAGS@"; -constexpr static const char* mpi_cxx_compiler = "@MPI_CXX_COMPILER@"; -constexpr static const char* systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; -constexpr static const char* machine_build = "@RAJAPERF_BUILD_HOST@"; +constexpr static const char* adiak_perfsuite_version = "@CMAKE_PROJECT_VERSION@"; +constexpr static const char* adiak_raja_version = "@RAJA_LOADED@"; +constexpr static const char* adiak_cmake_build_type = "@CMAKE_BUILD_TYPE@"; +constexpr static const char* adiak_cmake_cxx_flags = "@CMAKE_CXX_FLAGS@"; +constexpr static const char* adiak_cmake_exe_linker_flags = "@CMAKE_EXE_LINKER_FLAGS@"; +constexpr static const char* adiak_rajaperf_compiler = "@RAJAPERF_COMPILER@"; +constexpr static const char* adiak_rajaperf_compiler_options = "@RAJAPERF_COMPILER_OPTIONS@"; +constexpr static const char* adiak_compiler_version = "@CMAKE_CXX_COMPILER_VERSION@"; +constexpr static const char* adiak_cuda_compiler_version = "@CMAKE_CUDA_COMPILER_VERSION@"; +constexpr static const char* adiak_gpu_targets = "@GPU_TARGETS@"; +constexpr static const char* adiak_cmake_hip_architectures = "@CMAKE_HIP_ARCHIECTURES@"; +constexpr static const char* adiak_gpu_targets_block_sizes = "@RAJA_PERFSUITE_GPU_BLOCKSIZES@"; +constexpr static const char* adiak_raja_hipcc_flags = "@RAJA_HIPCC_FLAGS@"; +constexpr static const char* adiak_mpi_cxx_compiler = "@MPI_CXX_COMPILER@"; +constexpr static const char* adiak_systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; +constexpr static const char* adiak_machine_build = "@RAJAPERF_BUILD_HOST@"; #endif + #if 0 // Version of RAJA Perf Suite (ex: 0.1.0) static const std::string perfsuite_version = From 84aedcab1ea9e49ae1425e94fc007a61963add6a Mon Sep 17 00:00:00 2001 From: "Holger E. Jones" Date: Mon, 1 Aug 2022 14:13:55 -0700 Subject: [PATCH 069/174] remove compiler info noise --- src/common/Executor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 4d847b763..facd27d85 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -142,11 +142,11 @@ Executor::Executor(int argc, char** argv) if (tsize >= 3) { // pickup path version /bin/exec string path_version = tokens[tsize-3]; - cout << "Compiler path version: " << path_version << "\n"; + //cout << "Compiler path version: " << path_version << "\n"; auto s = split(path_version,"-"); if (s.size() >= 2) { string path_version_short = s[0] + "-" + s[1]; - cout << "Compiler path version short: " << path_version_short << "\n"; + //cout << "Compiler path version short: " << path_version_short << "\n"; adiak::value("Compiler_path_version",path_version_short.c_str()); } } From 248ffd387a6dbae3b7ad31a713d8161a874eebec Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 1 Aug 2022 15:12:15 -0700 Subject: [PATCH 070/174] update spack package to use caliper@2.8.0; also add +rocm to caliper spec when raja_perf +rocm --- scripts/spack_packages/raja_perf/package.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/spack_packages/raja_perf/package.py b/scripts/spack_packages/raja_perf/package.py index 352d5565f..9ec01d64b 100644 --- a/scripts/spack_packages/raja_perf/package.py +++ b/scripts/spack_packages/raja_perf/package.py @@ -81,8 +81,9 @@ class RajaPerf(CMakePackage, CudaPackage, ROCmPackage): depends_on('cmake@3.9:', type='build') depends_on('blt@0.4.1', type='build', when='@main') depends_on('blt@0.4.1:', type='build') - depends_on('caliper@2.7.0',when='+caliper') - depends_on('caliper@2.7.0 +cuda',when='+caliper +cuda') + depends_on('caliper@2.8.0',when='+caliper') + depends_on('caliper@2.8.0 +cuda',when='+caliper +cuda') + depends_on('caliper@2.8.0 +rocm',when='+caliper +rocm') conflicts('+openmp', when='+rocm') conflicts('~openmp', when='+openmp_target', msg='OpenMP target requires OpenMP') From 8f32df75cf966793436c17e2c4ec1aafdc5ec144 Mon Sep 17 00:00:00 2001 From: "Holger E. Jones" Date: Tue, 2 Aug 2022 12:16:14 -0700 Subject: [PATCH 071/174] fixup cmake define to pickup caliper/adiak includes in src/CMakeLists.txt; remove redundant includes in top level cmake --- CMakeLists.txt | 2 -- src/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 80631733c..e18d7e7a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,8 +132,6 @@ if (RAJA_PERFSUITE_USE_CALIPER) find_package(adiak REQUIRED) # use ${adiak_LIBRARIES} since version could have adiak vs adiak::adiak export list(APPEND RAJA_PERFSUITE_DEPENDS ${adiak_LIBRARIES}) - message(STATUS "Using Adiak INCLUDES: ${adiak_INCLUDE_DIRS}") - include_directories(${adiak_INCLUDE_DIRS}) if (ENABLE_CUDA) # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2bf43e6f0..da0ada219 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,7 +8,7 @@ include_directories(.) -if(RAJAPERF_USE_CALIPER) +if(RAJA_PERFSUITE_USE_CALIPER) message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") include_directories(${caliper_INCLUDE_DIR}) From 7ec27ce83df026ba8b1c47407d1d8f8c0744366c Mon Sep 17 00:00:00 2001 From: "Holger E. Jones" Date: Tue, 2 Aug 2022 19:27:09 -0700 Subject: [PATCH 072/174] support output directory -od flag for spot output files --- src/common/Executor.cpp | 2 +- src/common/KernelBase.hpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index facd27d85..727ef9827 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -708,7 +708,7 @@ void Executor::setupSuite() vid != run_var.end(); ++vid) { variant_ids.push_back( *vid ); #ifdef RAJA_PERFSUITE_USE_CALIPER - KernelBase::setCaliperMgrVariant(*vid); + KernelBase::setCaliperMgrVariant(*vid,run_params.getOutputDirName()); #endif } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index ed8891a1f..5d56dcdac 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -282,12 +282,16 @@ class KernelBase void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void setKernelAdiakMeta(); - static void setCaliperMgrVariant(VariantID vid) + static void setCaliperMgrVariant(VariantID vid, const std::string& outdir) { cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); + std::string od("./"); + if(outdir.size()) { + od = outdir + "/"; + } std::string vstr = getVariantName(vid); - std::string profile = "spot(output=" + vstr + ".cali)"; + std::string profile = "spot(output=" +od + vstr + ".cali)"; std::cout << "Profile: " << profile << std::endl; mgr[vid].add(profile.c_str()); } From 08ea0f92fb0b5acb09edcf2d877bb5e37891998d Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 10 Aug 2022 14:23:31 -0700 Subject: [PATCH 073/174] add support to process caliper timing info; still uses orig runinfo metadata --- scripts/sweep_graph.py | 165 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 155 insertions(+), 10 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 902acf029..b52b50ce7 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -6,6 +6,11 @@ import re import getopt import csv +import importlib +import pkgutil +import traceback +import glob + import matplotlib.pyplot as plt def make_tuple_str(astr): @@ -93,6 +98,7 @@ def make_color_tuple_str(color_str): "block_512": {"format": "-."}, "block_1024": {"format": "-"}, "cub": {"format": ":"}, + "library": {"format": "-"}, "rocprim": {"format": ":"} } g_markers = [ "o", "s", "+", "x", "*", "d", "h", "p", "8" ] @@ -155,6 +161,8 @@ def make_color_tuple_str(color_str): }, } +g_can_process_caliper = False + def first(vals): return vals[0] @@ -1233,6 +1241,44 @@ def compute(kind): else: raise NameError("Unknown data kind {}".format(kind)) +# the following is edited specifically for Hatchet, but future make exclude pkgs generic +# We exclude roundtrip and vis in import check since we're not in Hatchet interactive mode +def import_submodules(package, recursive=True): + """ Import all submodules of a module, recursively, including subpackages + + :param package: package (name or actual module) + :type package: str | module + :rtype: dict[str, types.ModuleType] + """ + if isinstance(package, str): + package = importlib.import_module(package) + results = {} + for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): + full_name = package.__name__ + '.' + name + chk_name = full_name.split('.') + if not 'roundtrip' in chk_name and not 'vis' in chk_name: + results[full_name] = importlib.import_module(full_name) + if recursive and is_pkg: + results.update(import_submodules(full_name)) + #print(results) + return results + +def check_hatchet_import(): + reader_spec = importlib.util.find_spec("hatchet") + reader_found = reader_spec is not None + depends_found = False + if reader_found: + print("Hatchet Reader found") + try: + cr = importlib.import_module("hatchet") + import_submodules(cr) + depends_found = True + except: + print("Can't load Hatchet") + traceback.print_exc() + else: + print("Hatchet not found") + return reader_found and depends_found def get_size_from_dir_name(sweep_subdir_name): @@ -1257,7 +1303,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde ignore = False for c in range(1, len(row)): info_kind = row[c].strip() - # print(c, info_kind) + #print(c, info_kind) if not info_kind in Data.kinds: # add new kind to global data print("Unknown kernel info {0}".format(info_kind)) @@ -1266,10 +1312,10 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde print("Repeated kernel info {0}".format(info_kind)) sys.exit(1) if not Data.kinds[info_kind].data: - # add data to kind + #print("# add data to kind:" + info_kind) Data.kinds[info_kind].makeData() if not sweep_index in Data.kinds[info_kind].data.data: - # add new sweep to global data + #print("# add new sweep to global data") Data.kinds[info_kind].data.data[sweep_index] = {} if run_size_index in Data.kinds[info_kind].data.data[sweep_index]: sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) @@ -1277,7 +1323,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size_name)) sys.exit(1) else: - # add new size to global data + #print("# add new size to global data") Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} # make map of columns to names c_to_info_kinds[c] = info_kind @@ -1311,7 +1357,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index): - # print(sweep_index, sweep_subdir_timing_file_path, run_size_index) + print(sweep_index, sweep_subdir_timing_file_path, run_size_index) with open(sweep_subdir_timing_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') @@ -1385,11 +1431,99 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) try: val = float(row[c].strip()) - # print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) + print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) Data.kinds[data_kind].set(axes_index, val) except ValueError: pass # could not convert data to float +def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): + graph_frames = [] + kernel_list = [] + candidate_list = [] + + data_kind = g_timing_file_kind + if not data_kind in Data.kinds: + raise NameError("Unknown kind {}".format(data_kind)) + if not Data.kinds[data_kind].data: + Data.kinds[data_kind].makeData() + if not sweep_index in Data.kinds[data_kind].data.data: + Data.kinds[data_kind].data.data[sweep_index] = {} + if not run_size_index in Data.kinds[data_kind].data.data[sweep_index]: + Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} + else: + sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) + + print("run size:" + Data.get_index_name(Data.axes["run_size"], run_size_index)) + allfiles = sorted(glob.glob(glob.escape(sweep_subdir) + "/*.cali")) + for f in allfiles: + kernel_tuning_list = [] + candidate_tuning_list = [] + gf = cr.GraphFrame.from_caliperreader(f) + #print(gf.metadata['variant']) + metric = 'min#inclusive#sum#time.duration' + #print(gf.inc_metrics) + graph_frames.append(gf) + + #take care of variant in this graphframe + variant_name = gf.metadata['variant'] + variant_index = -1 + if variant_name in Data.variants: + variant_index = Data.variants[variant_name] + elif (len(Data.include_variants) == 0 or variant_name in Data.include_variants) and (not variant_name in Data.exclude_variants): + Data.add_variant(variant_name) + variant_index = Data.variants[variant_name] + + # extract kernel list + kernel_index = -1 + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + #kernel_tuning_name is kernel.tuning in Caliper + kernel_tuning_name = gf.dataframe.loc[nn,'name'] + kernel_name = kernel_tuning_name.split('.')[0] + if kernel_name in Data.kernels: + kernel_tuning_name = gf.dataframe.loc[nn,'name'] + candidate_tuning_list.append(kernel_tuning_name) + candidate_list.append(kernel_name) + kernel_list = list(set(candidate_list) | set(kernel_list)) + kernel_tuning_list = list(set(candidate_tuning_list) | set(kernel_tuning_list)) + #print(kernel_list) + #print(kernel_tuning_list) + + for kernel in kernel_tuning_list: + kernel_name = kernel.split('.')[0] + tuning_name = kernel.split('.')[1] + + if kernel_name in Data.kernels: + kernel_index = Data.kernels[kernel_name] + else: + continue # skip kernel + + tuning_index = None + if tuning_name in Data.tunings: + tuning_index = Data.tunings[tuning_name] + elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): + Data.add_tuning(tuning_name) + tuning_index = Data.tunings[tuning_name] + else: + tuning_index = -1 + + axes_index = { Data.axes["sweep_dir_name"]: sweep_index, + Data.axes["run_size"]: run_size_index, + Data.axes["kernel_index"]: kernel_index, + Data.axes["variant_index"]: variant_index, + Data.axes["tuning_index"]: tuning_index, } + val = 0.0 + #print(metric) + try: + val = float(gf.dataframe.loc[gf.dataframe['name']==kernel].iloc[0][metric]) + print(variant_name, kernel_name, tuning_name, data_kind, val) + Data.kinds[data_kind].set(axes_index, val) + except ValueError: + pass # could not convert data to float def get_plot_data(kind, partial_axes_index): @@ -1883,13 +2017,20 @@ def main(argv): print(help_string) sys.exit(2) elif opt[0] == "-": - handle_num = None handle_arg = None # no arg options if opt in ("-h", "--help"): print(help_string) sys.exit() + if opt in ("-pc", "--process-caliper"): + print("Request process Caliper") + handle_num = -1 + g_can_process_caliper = check_hatchet_import() + if g_can_process_caliper: + cr = importlib.import_module("hatchet") + print("Caliper processing using hatchet:" + os.path.dirname(cr.__file__)) + # single arg options if opt in ("-o", "--output"): handle_num = 1 @@ -2097,7 +2238,7 @@ def fes(arg): for sweep_dir_path in sweep_dir_paths: sweep_dir_name = os.path.basename(sweep_dir_path) - # print(sweep_dir_name, sweep_dir_path) + print(sweep_dir_name, sweep_dir_path) if sweep_dir_name in Data.exclude_sweeps: continue @@ -2132,9 +2273,13 @@ def fes(arg): sweep_subdir_runinfo_file_path = sweep_subdir_file_path if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": - # print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) + print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) - read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) + if(g_can_process_caliper): + read_caliper_timing_file(cr,sweep_index, sweep_subdir_path, run_size_index) + else: + read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) + kinds_string = "" for kindTree in Data.kinds.values(): From 052ca63aa42fa95706c56b19e581a3033943cc7f Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 16 Aug 2022 16:45:34 -0700 Subject: [PATCH 074/174] per kernel column metadata; currently exported as strings since some of the fields can have very large values --- src/common/KernelBase.cpp | 35 ++++++++++ src/common/KernelBase.hpp | 142 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index bb6b7edfb..744960a79 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -39,6 +39,12 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) : running_tuning = getUnknownTuningIdx(); checksum_scale_factor = 1.0; + +#ifdef RAJA_PERFSUITE_USE_CALIPER + for (size_t vid=0; vid < NumVariants; ++vid) { + doCaliMetaOnce[vid] = true; + } +#endif } @@ -359,6 +365,35 @@ void KernelBase::setKernelAdiakMeta() valStr += ",flops_rep:"+flops_rep; adiak::value(getName().c_str(),valStr.c_str()); } + +void KernelBase::doOnceCaliMetaBegin(VariantID vid) +{ + // use json spec query expr + if(doCaliMetaOnce[vid]) { + cali_begin_string_byname("ProblemSize",std::to_string(getActualProblemSize()).c_str()); + cali_begin_string_byname("Reps",std::to_string(getRunReps()).c_str()); + cali_begin_string_byname("Iterations/Rep",std::to_string(getItsPerRep()).c_str()); + cali_begin_string_byname("Kernels/Rep",std::to_string(getKernelsPerRep()).c_str()); + cali_begin_string_byname("Bytes/Rep",std::to_string(getBytesPerRep()).c_str()); + cali_begin_string_byname("Flops/Rep",std::to_string(getFLOPsPerRep()).c_str()); + } +} + +void KernelBase::doOnceCaliMetaEnd(VariantID vid) +{ + // use json spec query exp + if(doCaliMetaOnce[vid]) { + cali_end_byname("Flops/Rep"); + cali_end_byname("Bytes/Rep"); + cali_end_byname("Kernels/Rep"); + cali_end_byname("Iterations/Rep"); + cali_end_byname("Reps"); + cali_end_byname("ProblemSize"); + doCaliMetaOnce[vid] = false; + } + +} + // initialize a KernelBase static std::map KernelBase::mgr; #endif diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 5d56dcdac..106e42c1e 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -41,6 +41,7 @@ std::string ktstr = kstr + "." + tstr; \ std::string gstr = getGroupName(kstr); \ std::string vstr = getVariantName(running_variant); \ + doOnceCaliMetaBegin(running_variant); \ CALI_MARK_BEGIN(vstr.c_str()); \ CALI_MARK_BEGIN(gstr.c_str()); \ CALI_MARK_BEGIN(kstr.c_str()); \ @@ -58,6 +59,7 @@ CALI_MARK_END(kstr.c_str()); \ CALI_MARK_END(gstr.c_str()); \ CALI_MARK_END(vstr.c_str()); \ + doOnceCaliMetaEnd(running_variant); \ } #else @@ -282,8 +284,133 @@ class KernelBase void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void setKernelAdiakMeta(); + void doOnceCaliMetaBegin(VariantID vid); + void doOnceCaliMetaEnd(VariantID vid); static void setCaliperMgrVariant(VariantID vid, const std::string& outdir) { + const std::string problem_size_json_spec = R"json( + { + "name" : "problem_size", + "type" : "boolean", + "category" : "metric", + "description" : "problem size", + "query" : + [ + { "level" : "local", + "select" : { "expr": "ProblemSize" }, + "group by" : "ProblemSize" + }, + { "level" : "cross", + "select" : { "expr": "ProblemSize" }, + "group by" : "ProblemSize" + } + ] + } +)json"; + + const std::string reps_json_spec = R"json( + { + "name" : "reps", + "type" : "boolean", + "category" : "metric", + "description" : "reps", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Reps" }, + "group by" : "Reps" + }, + { "level" : "cross", + "select" : { "expr": "Reps" }, + "group by" : "Reps" + } + ] + } +)json"; + + const std::string iters_json_spec = R"json( + { + "name" : "iters_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "iterations per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Iterations/Rep" }, + "group by" : "Iterations/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Iterations/Rep" }, + "group by" : "Iterations/Rep" + } + ] + } +)json"; + + + const std::string kernels_json_spec = R"json( + { + "name" : "kernels_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "kernels per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Kernels/Rep" }, + "group by" : "Kernels/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Kernels/Rep" }, + "group by" : "Kernels/Rep" + } + ] + } +)json"; + + const std::string bytes_json_spec = R"json( + { + "name" : "bytes_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "bytes per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Bytes/Rep" }, + "group by" : "Bytes/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Bytes/Rep" }, + "group by" : "Bytes/Rep" + } + ] + } +)json"; + + + const std::string flops_rep_json_spec = R"json( + { + "name" : "flops_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "flops per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Flops/Rep" }, + "group by" : "Flops/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Flops/Rep" }, + "group by" : "Flops/Rep" + } + ] + } +)json"; + + cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); std::string od("./"); @@ -293,6 +420,18 @@ class KernelBase std::string vstr = getVariantName(vid); std::string profile = "spot(output=" +od + vstr + ".cali)"; std::cout << "Profile: " << profile << std::endl; + mgr[vid].add_option_spec(problem_size_json_spec.c_str()); + mgr[vid].set_default_parameter("problem_size","true"); + mgr[vid].add_option_spec(reps_json_spec.c_str()); + mgr[vid].set_default_parameter("reps","true"); + mgr[vid].add_option_spec(iters_json_spec.c_str()); + mgr[vid].set_default_parameter("iters_p_rep","true"); + mgr[vid].add_option_spec(kernels_json_spec.c_str()); + mgr[vid].set_default_parameter("kernels_p_rep","true"); + mgr[vid].add_option_spec(bytes_json_spec.c_str()); + mgr[vid].set_default_parameter("bytes_p_rep","true"); + mgr[vid].add_option_spec(flops_rep_json_spec.c_str()); + mgr[vid].set_default_parameter("flops_p_rep","true"); mgr[vid].add(profile.c_str()); } @@ -360,6 +499,9 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing + bool doCaliMetaOnce[NumVariants]; + + // we need a Caliper Manager object per variant // we can inline this with c++17 static std::map mgr; From 1950e276b272cdc5444ff3ede9d9018394409aea Mon Sep 17 00:00:00 2001 From: holger Date: Thu, 18 Aug 2022 09:37:05 -0700 Subject: [PATCH 075/174] fixup xdata sort order using numpy --- scripts/sweep_graph.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index b52b50ce7..257d9ac03 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -10,6 +10,7 @@ import pkgutil import traceback import glob +import numpy as np import matplotlib.pyplot as plt @@ -107,7 +108,8 @@ def make_color_tuple_str(color_str): # formatted as series_name: dictionary of "color": color, "format": format g_series_reformat = {} -g_timing_filename = "RAJAPerf-timing-Minimum.csv" +#g_timing_filename = "RAJAPerf-timing-Minimum.csv" +g_timing_filename = "RAJAPerf-timing-Average.csv" g_runinfo_filename = "RAJAPerf-kernels.csv" g_timing_file_kind = "time(s)" @@ -161,8 +163,6 @@ def make_color_tuple_str(color_str): }, } -g_can_process_caliper = False - def first(vals): return vals[0] @@ -1058,14 +1058,16 @@ def makeDataTree(self, template_args): } def compute_data(kind): - # print("compute_data", kind) + print("compute_data", kind) if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) datatree = Data.kinds[kind] if datatree.data: return # already calculated - + print(datatree.model_kind) + print(datatree.args) + print(datatree.func) if not (datatree.model_kind and datatree.args and datatree.func): raise NameError("Computing data is not supported for kind {0}".format(kind)) @@ -1679,8 +1681,16 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk if len(ykinds) > 1: yname = "{} {}".format(Data.kinds[ykind].kind, yname) - - plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) + np_xdata = np.array(xdata) + xind = np_xdata.argsort() + print(xind) + np_xdata = np_xdata[xind[0:]] + print(np_xdata) + np_ydata = np.array(ydata) + np_ydata = np_ydata[xind[0:]] + print(np_ydata) + #plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) + plt.plot(np_xdata,np_ydata,yformat,color=ycolor,label=yname) if ylabel: plt.ylabel(ylabel) @@ -2009,7 +2019,7 @@ def main(argv): split_line_graph_kind_lists = [] bar_graph_kind_lists = [] histogram_graph_kind_lists = [] - + can_process_caliper = False i = 0 while i < len(argv): opt = argv[i] @@ -2026,8 +2036,8 @@ def main(argv): if opt in ("-pc", "--process-caliper"): print("Request process Caliper") handle_num = -1 - g_can_process_caliper = check_hatchet_import() - if g_can_process_caliper: + can_process_caliper = check_hatchet_import() + if can_process_caliper: cr = importlib.import_module("hatchet") print("Caliper processing using hatchet:" + os.path.dirname(cr.__file__)) @@ -2275,7 +2285,7 @@ def fes(arg): if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) - if(g_can_process_caliper): + if(can_process_caliper): read_caliper_timing_file(cr,sweep_index, sweep_subdir_path, run_size_index) else: read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) From ef58b0c62638aaa36cc8c7aab7a3d83c84d6c307 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 22 Aug 2022 13:01:47 -0700 Subject: [PATCH 076/174] switch kernel attribute metadata datatype to double --- src/common/KernelBase.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index 744960a79..a61ab3b36 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -370,12 +370,12 @@ void KernelBase::doOnceCaliMetaBegin(VariantID vid) { // use json spec query expr if(doCaliMetaOnce[vid]) { - cali_begin_string_byname("ProblemSize",std::to_string(getActualProblemSize()).c_str()); - cali_begin_string_byname("Reps",std::to_string(getRunReps()).c_str()); - cali_begin_string_byname("Iterations/Rep",std::to_string(getItsPerRep()).c_str()); - cali_begin_string_byname("Kernels/Rep",std::to_string(getKernelsPerRep()).c_str()); - cali_begin_string_byname("Bytes/Rep",std::to_string(getBytesPerRep()).c_str()); - cali_begin_string_byname("Flops/Rep",std::to_string(getFLOPsPerRep()).c_str()); + cali_begin_double_byname("ProblemSize",(double)getActualProblemSize()); + cali_begin_double_byname("Reps",(double)getRunReps()); + cali_begin_double_byname("Iterations/Rep",(double)getItsPerRep()); + cali_begin_double_byname("Kernels/Rep",(double)getKernelsPerRep()); + cali_begin_double_byname("Bytes/Rep",(double)getBytesPerRep()); + cali_begin_double_byname("Flops/Rep",(double)getFLOPsPerRep()); } } From 4ad948ff5ea3999694d22c87ebe7561d2d113563 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 11 Sep 2022 12:20:58 -0700 Subject: [PATCH 077/174] modify adiak runinfo metadata so it can be used in python scripts as a dict; edit sweep_graph.py to use eval to bring in runinfo meatadata --- scripts/sweep_graph.py | 104 ++++++++++++++++++++++++++++++++++---- src/common/KernelBase.cpp | 14 ++--- 2 files changed, 102 insertions(+), 16 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 257d9ac03..26b4d896c 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -3,8 +3,6 @@ import math import os import sys -import re -import getopt import csv import importlib import pkgutil @@ -383,6 +381,7 @@ def add_run_size(run_size_name): Data.run_sizes[run_size_index] = run_size_name def add_kernel(kernel_name): + print("add_kernel:" + kernel_name) kernel_index = Data.num_kernels Data.num_kernels += 1 Data.kernels[kernel_name] = kernel_index @@ -602,13 +601,17 @@ def MultiAxesTreeItemGenerator4(data_tree): data_tree.axes[3]: k3,}, v3,) def MultiAxesTreeItemGenerator5(data_tree): + print(data_tree) + print(data_tree.items()) assert(len(data_tree.axes) == 5) assert(data_tree.data) + for k0, v0 in data_tree.data.items(): for k1, v1 in v0.items(): for k2, v2 in v1.items(): for k3, v3 in v2.items(): for k4, v4 in v3.items(): + print(k0,k1,k2,k3,k4,v4) yield ({data_tree.axes[0]: k0, data_tree.axes[1]: k1, data_tree.axes[2]: k2, @@ -618,8 +621,14 @@ def MultiAxesTreeItemGenerator5(data_tree): def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, axes_index, leftover_axes_index, val, depth): + print("PartialItemGen {0} val {1} depth {2}".format(partial_axes_index,val,depth)) if data_tree.axes[depth] in partial_axes_index: key = partial_axes_index[data_tree.axes[depth]] + print("key") + print(key) + print("val") + print(val) + print(key in val) if key in val: val = val[key] axes_index[data_tree.axes[depth]] = key @@ -631,9 +640,9 @@ def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, for yld in gen: yield yld else: - # print(data_tree, partial_axes_index, - # axes_index, leftover_axes_index, - # key, val, depth) + #print(data_tree, partial_axes_index, + # axes_index, leftover_axes_index, + # key, val, depth) raise NameError("invalid index {} {}".format(Data.get_axes_index_str(axes_index), Data.get_axis_index_str(data_tree.axes[depth], key))) else: for key, val in val.items(): @@ -802,6 +811,7 @@ def partial_match_items(self, partial_axes_index): if axis_index in partial_axes_index: num_matching_indices += 1 assert(num_matching_indices == len(partial_axes_index)) + print("len(self.axes) = {0}".format(len(self.axes))) if len(self.axes) == 0: return Data.MultiAxesTreePartialItemGenerator0(self, partial_axes_index) elif len(self.axes) == 1: @@ -1305,7 +1315,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde ignore = False for c in range(1, len(row)): info_kind = row[c].strip() - #print(c, info_kind) + print(c, info_kind) if not info_kind in Data.kinds: # add new kind to global data print("Unknown kernel info {0}".format(info_kind)) @@ -1347,7 +1357,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde try: # add data to global structure val = int(row[c].strip()) - # print(kernel_index, kernel_name, info_kind, val) + print(kernel_index, kernel_name, info_kind, val) axes_index = { Data.axes["sweep_dir_name"]: sweep_index, Data.axes["run_size"]: run_size_index, @@ -1357,6 +1367,77 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde except ValueError: pass # could not convert data to int +# we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored +def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): + graph_frames = [] + kernel_list = [] + candidate_list = [] + + # per kernel metadata is Adiak key/values, so we need our kernel list + allfiles = sorted(glob.glob(glob.escape(sweep_subdir) + "/*.cali")) + # not all kernels run in every variant so capture kernel list across variants + for f in allfiles: + gf = cr.GraphFrame.from_caliperreader(f) + print(gf.metadata['variant']) + metric = 'min#inclusive#sum#time.duration' + #print(gf.inc_metrics) + graph_frames.append(gf) + + # extract kernel list + kernel_index = -1 + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + # kernel_tuning_name is kernel.tuning in Caliper + kernel_tuning_name = gf.dataframe.loc[nn, 'name'] + kernel_name = kernel_tuning_name.split('.')[0] + if (len(Data.include_kernels) == 0 or kernel_name in Data.include_kernels) and (not kernel_name in Data.exclude_kernels): + candidate_list.append(kernel_name) + kernel_list = list(set(candidate_list) | set(kernel_list)) + + for kernel_name in kernel_list: + if kernel_name not in Data.kernels: + Data.add_kernel(kernel_name) + kernel_index = Data.kernels[kernel_name] + metadata = eval(gf.metadata[kernel_name]) + print(metadata) + for info_kind, info_value in metadata.items(): + print(info_kind) + print(Data.info_axes) + if not info_kind in Data.kinds: + Data.kinds[info_kind] = Data.DataTree(info_kind, "info", Data.info_axes) + if not Data.kinds[info_kind].data: + Data.kinds[info_kind].makeData() + if not sweep_index in Data.kinds[info_kind].data.data: + Data.kinds[info_kind].data.data[sweep_index] = {} + if run_size_index in Data.kinds[info_kind].data.data[sweep_index]: + #sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + #run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + #print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size_name)) + continue + else: + #print("# add new size to global data") + Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} + try: + val = int(info_value) + axes_index = { Data.axes["sweep_dir_name"]: sweep_index, + Data.axes["run_size"]: run_size_index, + Data.axes["kernel_index"]: kernel_index, } + + Data.kinds[info_kind].set(axes_index, val) + sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + kernel_index_name = Data.get_index_name(Data.axes["kernel_index"], kernel_index) + print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) + except ValueError: + print("ValueError") + pass # could not convert data to int + + + + + def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index): print(sweep_index, sweep_subdir_timing_file_path, run_size_index) @@ -1410,7 +1491,7 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) else: print("Unknown row {0}".format(row)) - sys.exit(1); + sys.exit(1) elif len(c_to_variant_index) > 0 and len(c_to_tuning_index) > 0: kernel_index = -1 kernel_name = row[0].strip() @@ -2283,11 +2364,14 @@ def fes(arg): sweep_subdir_runinfo_file_path = sweep_subdir_file_path if sweep_subdir_timing_file_path != "" and sweep_subdir_runinfo_file_path != "": - print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) - read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) + #print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) + #read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) if(can_process_caliper): + #read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) + read_caliper_runinfo_file(cr,sweep_index, sweep_subdir_path, run_size_index) read_caliper_timing_file(cr,sweep_index, sweep_subdir_path, run_size_index) else: + read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index a61ab3b36..0a714eeda 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -357,12 +357,14 @@ void KernelBase::setKernelAdiakMeta() std::string bytes_rep = std::to_string(getBytesPerRep()); std::string flops_rep = std::to_string(getFLOPsPerRep()); - std::string valStr = "problem_size:"+problem_size; - valStr += ",reps:"+reps; - valStr += ",iters_rep:"+iters_rep; - valStr += ",kerns_rep:"+kerns_rep; - valStr += ",bytes_rep:"+bytes_rep; - valStr += ",flops_rep:"+flops_rep; + // put into python dict form + std::string valStr = "{'Problem size': "+problem_size; + valStr += ",'Reps':"+reps; + valStr += ",'Iterations/rep': "+iters_rep; + valStr += ",'Kernels/rep': "+kerns_rep; + valStr += ",'Bytes/rep': "+bytes_rep; + valStr += ",'FLOPS/rep': "+flops_rep; + valStr += "}"; adiak::value(getName().c_str(),valStr.c_str()); } From ba525df7e3c6321f5502df8d9cae4dde6f69985f Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 13 Sep 2022 10:59:49 -0700 Subject: [PATCH 078/174] add checks for include/exclude kernels and error out in case of cmdline typo --- scripts/sweep_graph.py | 73 ++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 26b4d896c..68702e0ad 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -131,7 +131,7 @@ def make_color_tuple_str(color_str): "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_ENERGY", "Apps_FIR", "Apps_MASS3DPA", "Apps_NODAL_ACCUMULATION_3D", "Apps_PRESSURE", "Apps_VOL3D", "Algorithm_SCAN", - "Algorithm_REDUCE_SUM", ], + "Algorithm_REDUCE_SUM", "Algorithm_MEMCPY", "Algorithm_MEMSET"], }, "flops": { "kind": "GFLOPS", @@ -161,6 +161,26 @@ def make_color_tuple_str(color_str): }, } +def check_kernel_name(kname) ->(bool): + bandwidth_kernels = g_known_kernel_groups["bandwidth"]["kernels"] + flops_kernels = g_known_kernel_groups["flops"]["kernels"] + reduce_kernels = g_known_kernel_groups["reduce"]["kernels"] + other_kernels = g_known_kernel_groups["other"]["kernels"] + launch_bound_kernels = g_known_kernel_groups["launch_bound"]["kernels"] + if kname in bandwidth_kernels: + return True + if kname in flops_kernels: + return True + if kname in reduce_kernels: + return True + if kname in other_kernels: + return True + if kname in launch_bound_kernels: + return True + return False + + + def first(vals): return vals[0] @@ -381,7 +401,6 @@ def add_run_size(run_size_name): Data.run_sizes[run_size_index] = run_size_name def add_kernel(kernel_name): - print("add_kernel:" + kernel_name) kernel_index = Data.num_kernels Data.num_kernels += 1 Data.kernels[kernel_name] = kernel_index @@ -601,8 +620,6 @@ def MultiAxesTreeItemGenerator4(data_tree): data_tree.axes[3]: k3,}, v3,) def MultiAxesTreeItemGenerator5(data_tree): - print(data_tree) - print(data_tree.items()) assert(len(data_tree.axes) == 5) assert(data_tree.data) @@ -611,7 +628,6 @@ def MultiAxesTreeItemGenerator5(data_tree): for k2, v2 in v1.items(): for k3, v3 in v2.items(): for k4, v4 in v3.items(): - print(k0,k1,k2,k3,k4,v4) yield ({data_tree.axes[0]: k0, data_tree.axes[1]: k1, data_tree.axes[2]: k2, @@ -621,14 +637,8 @@ def MultiAxesTreeItemGenerator5(data_tree): def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, axes_index, leftover_axes_index, val, depth): - print("PartialItemGen {0} val {1} depth {2}".format(partial_axes_index,val,depth)) if data_tree.axes[depth] in partial_axes_index: key = partial_axes_index[data_tree.axes[depth]] - print("key") - print(key) - print("val") - print(val) - print(key in val) if key in val: val = val[key] axes_index[data_tree.axes[depth]] = key @@ -811,7 +821,6 @@ def partial_match_items(self, partial_axes_index): if axis_index in partial_axes_index: num_matching_indices += 1 assert(num_matching_indices == len(partial_axes_index)) - print("len(self.axes) = {0}".format(len(self.axes))) if len(self.axes) == 0: return Data.MultiAxesTreePartialItemGenerator0(self, partial_axes_index) elif len(self.axes) == 1: @@ -1068,16 +1077,12 @@ def makeDataTree(self, template_args): } def compute_data(kind): - print("compute_data", kind) if not kind in Data.kinds: raise NameError("Unknown data kind {}".format(kind)) datatree = Data.kinds[kind] if datatree.data: return # already calculated - print(datatree.model_kind) - print(datatree.args) - print(datatree.func) if not (datatree.model_kind and datatree.args and datatree.func): raise NameError("Computing data is not supported for kind {0}".format(kind)) @@ -1315,7 +1320,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde ignore = False for c in range(1, len(row)): info_kind = row[c].strip() - print(c, info_kind) + #print(c, info_kind) if not info_kind in Data.kinds: # add new kind to global data print("Unknown kernel info {0}".format(info_kind)) @@ -1357,7 +1362,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde try: # add data to global structure val = int(row[c].strip()) - print(kernel_index, kernel_name, info_kind, val) + #print(kernel_index, kernel_name, info_kind, val) axes_index = { Data.axes["sweep_dir_name"]: sweep_index, Data.axes["run_size"]: run_size_index, @@ -1365,6 +1370,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde Data.kinds[info_kind].set(axes_index, val) except ValueError: + print('ValueError') pass # could not convert data to int # we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored @@ -1378,7 +1384,6 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): # not all kernels run in every variant so capture kernel list across variants for f in allfiles: gf = cr.GraphFrame.from_caliperreader(f) - print(gf.metadata['variant']) metric = 'min#inclusive#sum#time.duration' #print(gf.inc_metrics) graph_frames.append(gf) @@ -1401,10 +1406,7 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): Data.add_kernel(kernel_name) kernel_index = Data.kernels[kernel_name] metadata = eval(gf.metadata[kernel_name]) - print(metadata) for info_kind, info_value in metadata.items(): - print(info_kind) - print(Data.info_axes) if not info_kind in Data.kinds: Data.kinds[info_kind] = Data.DataTree(info_kind, "info", Data.info_axes) if not Data.kinds[info_kind].data: @@ -1429,7 +1431,7 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) kernel_index_name = Data.get_index_name(Data.axes["kernel_index"], kernel_index) - print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) + #print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) except ValueError: print("ValueError") pass # could not convert data to int @@ -1440,7 +1442,7 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index): - print(sweep_index, sweep_subdir_timing_file_path, run_size_index) + #print(sweep_index, sweep_subdir_timing_file_path, run_size_index) with open(sweep_subdir_timing_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') @@ -1514,9 +1516,10 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) try: val = float(row[c].strip()) - print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) + #print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) Data.kinds[data_kind].set(axes_index, val) except ValueError: + print('ValueError') pass # could not convert data to float def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): @@ -1603,9 +1606,10 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): #print(metric) try: val = float(gf.dataframe.loc[gf.dataframe['name']==kernel].iloc[0][metric]) - print(variant_name, kernel_name, tuning_name, data_kind, val) + #print(variant_name, kernel_name, tuning_name, data_kind, val) Data.kinds[data_kind].set(axes_index, val) except ValueError: + print('ValueError') pass # could not convert data to float def get_plot_data(kind, partial_axes_index): @@ -1764,12 +1768,9 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk yname = "{} {}".format(Data.kinds[ykind].kind, yname) np_xdata = np.array(xdata) xind = np_xdata.argsort() - print(xind) np_xdata = np_xdata[xind[0:]] - print(np_xdata) np_ydata = np.array(ydata) np_ydata = np_ydata[xind[0:]] - print(np_ydata) #plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) plt.plot(np_xdata,np_ydata,yformat,color=ycolor,label=yname) @@ -2242,12 +2243,20 @@ def fekg(arg): elif opt in ("-k", "--kernels"): handle_num = -1 def fk(arg): - Data.include_kernels[arg] = arg + if check_kernel_name(arg): + Data.include_kernels[arg] = arg + else: + print("invalid include kernels argument: " + arg) + sys.exit(1) handle_arg = fk elif opt in ("-ek", "--exclude-kernels"): handle_num = -1 def fek(arg): - Data.exclude_kernels[arg] = arg + if check_kernel_name(arg): + Data.exclude_kernels[arg] = arg + else: + print("invalid exclude kernels argument: " + arg) + sys.exit(1) handle_arg = fek elif opt in ("-v", "--variants"): handle_num = -1 @@ -2367,7 +2376,6 @@ def fes(arg): #print(sweep_subdir_timing_file_path, sweep_subdir_runinfo_file_path) #read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) if(can_process_caliper): - #read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) read_caliper_runinfo_file(cr,sweep_index, sweep_subdir_path, run_size_index) read_caliper_timing_file(cr,sweep_index, sweep_subdir_path, run_size_index) else: @@ -2411,6 +2419,7 @@ def fes(arg): print("kernel groups") print(" {}".format(kernel_groups_string[2:])) + assert Data.num_kernels > 0,f"Expected kernels to be greater than zero; kernel name typo in cmdline arg??" kernel_string = "" for v in range(0, Data.num_kernels): kernel_string += ", {}".format(Data.kernels[v]) From 775701c8bae3cd5eb26d4bcb701f7ad50dbeca0e Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 13 Sep 2022 11:58:30 -0700 Subject: [PATCH 079/174] fix bug in read_caliper_runinfo_size removing errant continue in run_size_index test --- scripts/sweep_graph.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 68702e0ad..f4983cd34 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1375,6 +1375,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde # we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): + print(sweep_index, sweep_subdir, run_size_index) graph_frames = [] kernel_list = [] candidate_list = [] @@ -1405,6 +1406,7 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): if kernel_name not in Data.kernels: Data.add_kernel(kernel_name) kernel_index = Data.kernels[kernel_name] + print("runinfo kernel_index:" + str(kernel_index)) metadata = eval(gf.metadata[kernel_name]) for info_kind, info_value in metadata.items(): if not info_kind in Data.kinds: @@ -1413,20 +1415,13 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): Data.kinds[info_kind].makeData() if not sweep_index in Data.kinds[info_kind].data.data: Data.kinds[info_kind].data.data[sweep_index] = {} - if run_size_index in Data.kinds[info_kind].data.data[sweep_index]: - #sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - #run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) - #print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size_name)) - continue - else: - #print("# add new size to global data") + if not run_size_index in Data.kinds[info_kind].data.data[sweep_index]: Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} try: val = int(info_value) axes_index = { Data.axes["sweep_dir_name"]: sweep_index, Data.axes["run_size"]: run_size_index, Data.axes["kernel_index"]: kernel_index, } - Data.kinds[info_kind].set(axes_index, val) sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) @@ -1669,7 +1664,7 @@ def get_plot_data2(xkind, ykind, partial_axes_index): g_hbin_size = None def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds): - # print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) + print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) assert(split_axis_name == "kernel_index") for split_index in range(0, Data.num_kernels): From b59755e7ca2660b41380a90ea48a3b282b034ed3 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 20 Sep 2022 10:39:41 -0700 Subject: [PATCH 080/174] add legend order routine - currently developer centric as order is fixed but easily modified --- scripts/sweep_graph.py | 60 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index f4983cd34..df9ba73d3 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -161,7 +161,7 @@ def make_color_tuple_str(color_str): }, } -def check_kernel_name(kname) ->(bool): +def check_kernel_name(kname) -> bool: bandwidth_kernels = g_known_kernel_groups["bandwidth"]["kernels"] flops_kernels = g_known_kernel_groups["flops"]["kernels"] reduce_kernels = g_known_kernel_groups["reduce"]["kernels"] @@ -179,6 +179,53 @@ def check_kernel_name(kname) ->(bool): return True return False +def set_legend_order(labels) -> list: + lex_order = ['machine', 'execution_model','programming_model','tuning'] + legend_order = [] + + machines = [] + programming_models = [] + execution_models = [] + tunings = [] + for label in labels: + ll = label.split(" ") + machines.append(ll[0]) + variant = ll[1] + vs = variant.split("_") + programming_models.append(vs[0]) + execution_models.append(vs[1]) + tunings.append(ll[2]) + + machines_min_len = len(min(machines,key=len)) + prg_min_len = len(min(programming_models,key=len)) + exe_min_len = len(min(execution_models, key=len)) + tunings_min_len = len(min(tunings,key=len)) + lex_strings = [] + for i in range(len(machines)): + machines[i] = machines[i][0:machines_min_len] + programming_models[i] = programming_models[i][0:prg_min_len] + execution_models[i] = execution_models[i][0:exe_min_len] + tunings[i] = tunings[i][0:tunings_min_len] + lex_string = "" + for lo in lex_order: + if lo == 'machine': + lex_string += machines[i] + if lo == 'programming_model': + lex_string += programming_models[i] + if lo == 'execution_model': + lex_string += execution_models[i] + if lo == 'tuning': + lex_string += tunings[i] + lex_strings.append([lex_string,i]) + lex_strings.sort() + + for x in lex_strings: + legend_order.append(x[1]) + + #print(lex_strings) + #print(legend_order) + + return legend_order def first(vals): @@ -1375,7 +1422,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde # we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): - print(sweep_index, sweep_subdir, run_size_index) + #print(sweep_index, sweep_subdir, run_size_index) graph_frames = [] kernel_list = [] candidate_list = [] @@ -1406,7 +1453,6 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): if kernel_name not in Data.kernels: Data.add_kernel(kernel_name) kernel_index = Data.kernels[kernel_name] - print("runinfo kernel_index:" + str(kernel_index)) metadata = eval(gf.metadata[kernel_name]) for info_kind, info_value in metadata.items(): if not info_kind in Data.kinds: @@ -1536,7 +1582,7 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) - print("run size:" + Data.get_index_name(Data.axes["run_size"], run_size_index)) + #print("run size:" + Data.get_index_name(Data.axes["run_size"], run_size_index)) allfiles = sorted(glob.glob(glob.escape(sweep_subdir) + "/*.cali")) for f in allfiles: kernel_tuning_list = [] @@ -1784,7 +1830,9 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk plt.xlim(xlim) plt.title(gname) - plt.legend(loc=lloc) + handles, labels = plt.gca().get_legend_handles_labels() + legend_order = set_legend_order(labels) + plt.legend([handles[idx] for idx in legend_order], [labels[idx] for idx in legend_order],loc=lloc) plt.grid(True) plt.savefig(fname, dpi=150.0) @@ -2042,7 +2090,7 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): h_n = len(kernel_data["hnames"]) hwidth = hbin_size / h_n - print(h_n, hwidth, hbin_size) + #print(h_n, hwidth, hbin_size) for hname in kernel_data["hnames"]: h_i = kernel_data["hnames"][hname] From f5f6a358cf77d57c7bab2636a99b5ee3b96b4e42 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Tue, 20 Sep 2022 18:51:45 -0700 Subject: [PATCH 081/174] fix doOnceCaliMeta for multiple tunings --- src/common/KernelBase.cpp | 18 ++++++++---------- src/common/KernelBase.hpp | 10 +++++----- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index 0a714eeda..2089c7b00 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -40,11 +40,6 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) : checksum_scale_factor = 1.0; -#ifdef RAJA_PERFSUITE_USE_CALIPER - for (size_t vid=0; vid < NumVariants; ++vid) { - doCaliMetaOnce[vid] = true; - } -#endif } @@ -157,6 +152,9 @@ void KernelBase::setVariantDefined(VariantID vid) min_time[vid].resize(variant_tuning_names[vid].size(), std::numeric_limits::max()); max_time[vid].resize(variant_tuning_names[vid].size(), -std::numeric_limits::max()); tot_time[vid].resize(variant_tuning_names[vid].size(), 0.0); +#ifdef RAJA_PERFSUITE_USE_CALIPER + doCaliMetaOnce[vid].resize(variant_tuning_names[vid].size(),true); +#endif } void KernelBase::execute(VariantID vid, size_t tune_idx) @@ -368,10 +366,10 @@ void KernelBase::setKernelAdiakMeta() adiak::value(getName().c_str(),valStr.c_str()); } -void KernelBase::doOnceCaliMetaBegin(VariantID vid) +void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { // use json spec query expr - if(doCaliMetaOnce[vid]) { + if(doCaliMetaOnce[vid].at(tune_idx)) { cali_begin_double_byname("ProblemSize",(double)getActualProblemSize()); cali_begin_double_byname("Reps",(double)getRunReps()); cali_begin_double_byname("Iterations/Rep",(double)getItsPerRep()); @@ -381,17 +379,17 @@ void KernelBase::doOnceCaliMetaBegin(VariantID vid) } } -void KernelBase::doOnceCaliMetaEnd(VariantID vid) +void KernelBase::doOnceCaliMetaEnd(VariantID vid, size_t tune_idx) { // use json spec query exp - if(doCaliMetaOnce[vid]) { + if(doCaliMetaOnce[vid].at(tune_idx)) { cali_end_byname("Flops/Rep"); cali_end_byname("Bytes/Rep"); cali_end_byname("Kernels/Rep"); cali_end_byname("Iterations/Rep"); cali_end_byname("Reps"); cali_end_byname("ProblemSize"); - doCaliMetaOnce[vid] = false; + doCaliMetaOnce[vid].at(tune_idx) = false; } } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 106e42c1e..1710a8aae 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -41,7 +41,7 @@ std::string ktstr = kstr + "." + tstr; \ std::string gstr = getGroupName(kstr); \ std::string vstr = getVariantName(running_variant); \ - doOnceCaliMetaBegin(running_variant); \ + doOnceCaliMetaBegin(running_variant,running_tuning); \ CALI_MARK_BEGIN(vstr.c_str()); \ CALI_MARK_BEGIN(gstr.c_str()); \ CALI_MARK_BEGIN(kstr.c_str()); \ @@ -59,7 +59,7 @@ CALI_MARK_END(kstr.c_str()); \ CALI_MARK_END(gstr.c_str()); \ CALI_MARK_END(vstr.c_str()); \ - doOnceCaliMetaEnd(running_variant); \ + doOnceCaliMetaEnd(running_variant,running_tuning); \ } #else @@ -284,8 +284,8 @@ class KernelBase void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void setKernelAdiakMeta(); - void doOnceCaliMetaBegin(VariantID vid); - void doOnceCaliMetaEnd(VariantID vid); + void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); + void doOnceCaliMetaEnd(VariantID vid, size_t tune_idx); static void setCaliperMgrVariant(VariantID vid, const std::string& outdir) { const std::string problem_size_json_spec = R"json( @@ -499,7 +499,7 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing - bool doCaliMetaOnce[NumVariants]; + std::vector doCaliMetaOnce[NumVariants]; // we need a Caliper Manager object per variant From f444177a1c7e1bb1f307a4c6a2e8b6b773589662 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 25 Sep 2022 13:05:03 -0700 Subject: [PATCH 082/174] parent/child parsers; add --directories; add prescan dict to parser namespace --- scripts/argparse_gist.py | 122 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 scripts/argparse_gist.py diff --git a/scripts/argparse_gist.py b/scripts/argparse_gist.py new file mode 100644 index 000000000..d163da23f --- /dev/null +++ b/scripts/argparse_gist.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +import argparse +import sys +import os +import csv +import glob + +def get_size_from_dir_name(sweep_subdir_name): + # print(sweep_subdir_name) + run_size_name = sweep_subdir_name.replace("SIZE_", "") + try: + run_size = int(run_size_name) + return str(run_size) + except ValueError: + raise NameError("Expected SIZE_".format(sweep_subdir_name)) + +def prescan_sweep_dirs(sweep_dir_paths) -> dict: + prescan = {"kernels_union" : [], "kernels_intersection" : [], "variants" : [], "tunings" : [], "sweep_sizes": [], "machines": []} + # machines only gleans os.path.basename of sweep_dir_paths, and does not actually parse real encoded machine names from data; so machine_name is a convention for directory naming + sets = [] + for sweep_dir_path in sweep_dir_paths: + kernel_set = set() + sweep_dir_path = sweep_dir_path.rstrip(os.sep) + sweep_dir_name = os.path.basename(sweep_dir_path) + if sweep_dir_name not in prescan["machines"]: + prescan["machines"].append(sweep_dir_name) + subdirs = sorted(glob.glob(glob.escape(sweep_dir_path) + os.sep + "**" + os.sep + "SIZE_*",recursive=True)) + for subdir in subdirs: + #print(subdir) + run_size = get_size_from_dir_name(os.path.basename(subdir)) + if run_size not in prescan["sweep_sizes"]: + prescan["sweep_sizes"].append(run_size) + # open one of the timing files at this run_size + timing_files = sorted(glob.glob(glob.escape(subdir) + os.sep + "RAJAPerf-timing-*",recursive=False)) + with open(timing_files[0],"r") as file: + file_reader = csv.reader(file, delimiter=',') + variants_read = False + tunings_read = False + for row in file_reader: + #print(row) + if row[0].strip() == "Kernel": + if not variants_read: + for c in range(1, len(row)): + variant_name = row[c].strip() + if variant_name not in prescan["variants"]: + prescan["variants"].append(variant_name) + variants_read = True + elif not tunings_read: + for c in range(1, len(row)): + tuning_name = row[c].strip() + if tuning_name not in prescan["tunings"]: + prescan["tunings"].append(tuning_name) + tunings_read = True + elif variants_read == True & tunings_read == True: + kernel_name = row[0].strip() + if kernel_name not in prescan["kernels_union"]: + prescan["kernels_union"].append(kernel_name) + if kernel_name not in kernel_set: + kernel_set.add(kernel_name) + sets.append(kernel_set) + prescan["kernels_intersection"] = set.intersection(*sets) + return prescan + +class KernelAction(argparse.Action): + + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs,**kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + print('Kernel Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) + check_kernels = [] + for k in values: + if k in namespace.candidate_kernels: + check_kernels.append(k) + setattr(namespace, self.dest, check_kernels) # do the normal attr set for dest + +class DirectoryAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + if nargs != '+': + raise ValueError("Expected variable nargs to be set to '+'") + super().__init__(option_strings, dest,nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) + setattr(namespace, self.dest, values) # do the normal attr set for dest + prescan = prescan_sweep_dirs(values) + setattr(namespace, 'prescan',prescan) + +def main(argv): + # parser = argparse.ArgumentParser(description='Produce Sweep Graphs for RAJAPerf output saved in one or more directories') + # kgroup = parser.add_mutually_exclusive_group() + # kgroup.add_argument('--kernels', nargs='+', + # help='kernels to include') + # kgroup.add_argument('--exclude_kernels', nargs="+", + # help='kernels to exclude') + # vgroup = parser.add_mutually_exclusive_group() + # vgroup.add_argument('--variants', nargs='+', + # help='variants to include') + # vgroup.add_argument('--exclude_variants', nargs="+", + # help='variants to exclude') + # parser.add_argument('--split_line_graph', choices=['time(s)','time(ms)','time(us)']) + # parser.add_argument('--directories',nargs='+', action=DirectoryAction, + # help='Directories to process') + # parser.print_help() + # #args = parser.parse_args('--kernels k1 k2 k3 --exclude_variants v1 v2 --split_line_graph time(s)'.split()) + # args = parser.parse_args(argv) + # #args.candidate_kernels = ['k3', 'k4', 'k5'] + # print(args) + + parent_parser = argparse.ArgumentParser(add_help=False) + parent_parser.add_argument('--directories',nargs='+',action=DirectoryAction) + child_parser = argparse.ArgumentParser(parents=[parent_parser]) + kgroup = child_parser.add_mutually_exclusive_group() + kgroup.add_argument('--kernels', nargs='+',action=KernelAction, + help='kernels to include') + + args = child_parser.parse_args(argv) + print(args) + + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file From 38bc9052ce01c9b792c68cfb550e91912128ae37 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 2 Oct 2022 10:47:45 -0700 Subject: [PATCH 083/174] continue integration of argparse_sweep_graph module --- scripts/argparse_gist.py | 122 --------------- scripts/argparse_sweep_graph.py | 261 ++++++++++++++++++++++++++++++++ scripts/sweep_graph.py | 167 +++++++++++++++++--- 3 files changed, 407 insertions(+), 143 deletions(-) delete mode 100644 scripts/argparse_gist.py create mode 100644 scripts/argparse_sweep_graph.py diff --git a/scripts/argparse_gist.py b/scripts/argparse_gist.py deleted file mode 100644 index d163da23f..000000000 --- a/scripts/argparse_gist.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import sys -import os -import csv -import glob - -def get_size_from_dir_name(sweep_subdir_name): - # print(sweep_subdir_name) - run_size_name = sweep_subdir_name.replace("SIZE_", "") - try: - run_size = int(run_size_name) - return str(run_size) - except ValueError: - raise NameError("Expected SIZE_".format(sweep_subdir_name)) - -def prescan_sweep_dirs(sweep_dir_paths) -> dict: - prescan = {"kernels_union" : [], "kernels_intersection" : [], "variants" : [], "tunings" : [], "sweep_sizes": [], "machines": []} - # machines only gleans os.path.basename of sweep_dir_paths, and does not actually parse real encoded machine names from data; so machine_name is a convention for directory naming - sets = [] - for sweep_dir_path in sweep_dir_paths: - kernel_set = set() - sweep_dir_path = sweep_dir_path.rstrip(os.sep) - sweep_dir_name = os.path.basename(sweep_dir_path) - if sweep_dir_name not in prescan["machines"]: - prescan["machines"].append(sweep_dir_name) - subdirs = sorted(glob.glob(glob.escape(sweep_dir_path) + os.sep + "**" + os.sep + "SIZE_*",recursive=True)) - for subdir in subdirs: - #print(subdir) - run_size = get_size_from_dir_name(os.path.basename(subdir)) - if run_size not in prescan["sweep_sizes"]: - prescan["sweep_sizes"].append(run_size) - # open one of the timing files at this run_size - timing_files = sorted(glob.glob(glob.escape(subdir) + os.sep + "RAJAPerf-timing-*",recursive=False)) - with open(timing_files[0],"r") as file: - file_reader = csv.reader(file, delimiter=',') - variants_read = False - tunings_read = False - for row in file_reader: - #print(row) - if row[0].strip() == "Kernel": - if not variants_read: - for c in range(1, len(row)): - variant_name = row[c].strip() - if variant_name not in prescan["variants"]: - prescan["variants"].append(variant_name) - variants_read = True - elif not tunings_read: - for c in range(1, len(row)): - tuning_name = row[c].strip() - if tuning_name not in prescan["tunings"]: - prescan["tunings"].append(tuning_name) - tunings_read = True - elif variants_read == True & tunings_read == True: - kernel_name = row[0].strip() - if kernel_name not in prescan["kernels_union"]: - prescan["kernels_union"].append(kernel_name) - if kernel_name not in kernel_set: - kernel_set.add(kernel_name) - sets.append(kernel_set) - prescan["kernels_intersection"] = set.intersection(*sets) - return prescan - -class KernelAction(argparse.Action): - - def __init__(self, option_strings, dest, nargs='+', **kwargs): - super().__init__(option_strings, dest, nargs,**kwargs) - - def __call__(self, parser, namespace, values, option_string=None): - print('Kernel Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) - check_kernels = [] - for k in values: - if k in namespace.candidate_kernels: - check_kernels.append(k) - setattr(namespace, self.dest, check_kernels) # do the normal attr set for dest - -class DirectoryAction(argparse.Action): - def __init__(self, option_strings, dest, nargs='+', **kwargs): - if nargs != '+': - raise ValueError("Expected variable nargs to be set to '+'") - super().__init__(option_strings, dest,nargs, **kwargs) - - def __call__(self, parser, namespace, values, option_string=None): - print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) - setattr(namespace, self.dest, values) # do the normal attr set for dest - prescan = prescan_sweep_dirs(values) - setattr(namespace, 'prescan',prescan) - -def main(argv): - # parser = argparse.ArgumentParser(description='Produce Sweep Graphs for RAJAPerf output saved in one or more directories') - # kgroup = parser.add_mutually_exclusive_group() - # kgroup.add_argument('--kernels', nargs='+', - # help='kernels to include') - # kgroup.add_argument('--exclude_kernels', nargs="+", - # help='kernels to exclude') - # vgroup = parser.add_mutually_exclusive_group() - # vgroup.add_argument('--variants', nargs='+', - # help='variants to include') - # vgroup.add_argument('--exclude_variants', nargs="+", - # help='variants to exclude') - # parser.add_argument('--split_line_graph', choices=['time(s)','time(ms)','time(us)']) - # parser.add_argument('--directories',nargs='+', action=DirectoryAction, - # help='Directories to process') - # parser.print_help() - # #args = parser.parse_args('--kernels k1 k2 k3 --exclude_variants v1 v2 --split_line_graph time(s)'.split()) - # args = parser.parse_args(argv) - # #args.candidate_kernels = ['k3', 'k4', 'k5'] - # print(args) - - parent_parser = argparse.ArgumentParser(add_help=False) - parent_parser.add_argument('--directories',nargs='+',action=DirectoryAction) - child_parser = argparse.ArgumentParser(parents=[parent_parser]) - kgroup = child_parser.add_mutually_exclusive_group() - kgroup.add_argument('--kernels', nargs='+',action=KernelAction, - help='kernels to include') - - args = child_parser.parse_args(argv) - print(args) - - -if __name__ == '__main__': - main(sys.argv[1:]) \ No newline at end of file diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py new file mode 100644 index 000000000..052762987 --- /dev/null +++ b/scripts/argparse_sweep_graph.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +import argparse +import sys +import os +import csv +import glob +import difflib + +def get_size_from_dir_name(sweep_subdir_name): + # print(sweep_subdir_name) + run_size_name = sweep_subdir_name.replace("SIZE_", "") + try: + run_size = int(run_size_name) + return str(run_size) + except ValueError: + raise NameError("Expected SIZE_".format(sweep_subdir_name)) + +def get_close_matches(test_value,match_values) -> list: + close_matches = difflib.get_close_matches(test_value,match_values, n=30, cutoff=0.25) + if len(close_matches) > 0: + # cull for substring + found_sub = [] + for mm in close_matches: + if mm.find(test_value) != -1: + found_sub.append(mm) + if len(found_sub) > 0: + close_matches = found_sub + return close_matches + +def direct_action_check(values,prescan_dict_name, namespace): + check = [] + for k in values: + if k in namespace.prescan[prescan_dict_name]: + check.append(k) + else: + close_matches = get_close_matches(k, namespace.prescan[prescan_dict_name]) + if len(close_matches) > 0: + raise NameError("Invalid {0} check for {1}: Did you mean one of {2}, or try changing case".format(prescan_dict_name, k, str(close_matches))) + else: + raise NameError("Invalid {0} check for {1}: Use one of {2}".format(prescan_dict_name, k, str(namespace.prescan[prescan_dict_name]))) + return check + +def close_action_check(values,prescan_dict_name, namespace): + outer_set = set() + for k in values: + inner_check = set() + if k in namespace.prescan[prescan_dict_name]: + inner_check.add(k) + else: + close_matches = get_close_matches(k, namespace.prescan[prescan_dict_name]) + if len(close_matches) > 0: + inner_check.update(close_matches) + if len(inner_check) == 0: + raise NameError("Invalid close check against {0} for {1}: Use something close to any of {2}, or try changing case".format(prescan_dict_name,k, str(namespace.prescan[prescan_dict_name]))) + outer_set.update(inner_check) + check = list(outer_set) + check.sort() + return check + +class process_argparse(): + # the intended use is to return both an args object for Namespace, + # and unknown args that specifically do not use - or -- prefix + class KernelAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = direct_action_check(values,"kernels_union",namespace) + setattr(namespace, self.dest, check) + + class KernelCloseAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = close_action_check(values,"kernels_union",namespace) + setattr(namespace, self.dest, check) + class VariantAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = direct_action_check(values, "variants", namespace) + setattr(namespace, self.dest, check) + + class VariantCloseAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = close_action_check(values, "variants", namespace) + setattr(namespace, self.dest, check) + + class TuningAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = direct_action_check(values, "tunings", namespace) + setattr(namespace, self.dest, check) + + class TuningCloseAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = close_action_check(values, "tunings", namespace) + setattr(namespace, self.dest, check) + + class DirectoryAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + if nargs != '+': + raise ValueError("Expected variable nargs to be set to '+'") + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + # print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) + prescan = self.prescan_sweep_dirs(values) + setattr(namespace, 'prescan', prescan) + setattr(namespace, self.dest, prescan["directories"]) # do the normal attr set for dest + + def prescan_sweep_dirs(self,sweep_dir_paths) -> dict: + prescan = {"directories": [],"kernels_union": [], "kernels_intersection": [], "variants": [], "tunings": [], "sweep_sizes": [], + "machines" : []} + # machines only gleans os.path.basename of sweep_dir_paths, and does not actually parse real encoded machine names from data; so machine_name is a convention for directory naming + sets = [] + outer_runsizes_set = set() + for sweep_dir_path in sweep_dir_paths: + if not os.path.exists(sweep_dir_path): + raise NameError("Invalid directory: {0}".format(sweep_dir_path)) + kernel_set = set() + sweep_dir_path = sweep_dir_path.rstrip(os.sep) + prescan["directories"].append(sweep_dir_path) + sweep_dir_name = os.path.basename(sweep_dir_path) + if sweep_dir_name not in prescan["machines"]: + prescan["machines"].append(sweep_dir_name) + subdirs = sorted(glob.glob(glob.escape(sweep_dir_path) + os.sep + "**" + os.sep + "SIZE_*", recursive=True)) + inner_runsizes_set = set() + for subdir in subdirs: + # print(subdir) + run_size = get_size_from_dir_name(os.path.basename(subdir)) + inner_runsizes_set.add(run_size) + #if run_size not in prescan["sweep_sizes"]: + # prescan["sweep_sizes"].append(run_size) + # open one of the timing files at this run_size + timing_files = sorted(glob.glob(glob.escape(subdir) + os.sep + "RAJAPerf-timing-*", recursive=False)) + with open(timing_files[0], "r") as file: + file_reader = csv.reader(file, delimiter=',') + variants_read = False + tunings_read = False + for row in file_reader: + # print(row) + if row[0].strip() == "Kernel": + if not variants_read: + for c in range(1, len(row)): + variant_name = row[c].strip() + if variant_name not in prescan["variants"]: + prescan["variants"].append(variant_name) + variants_read = True + elif not tunings_read: + for c in range(1, len(row)): + tuning_name = row[c].strip() + if tuning_name not in prescan["tunings"]: + prescan["tunings"].append(tuning_name) + tunings_read = True + elif variants_read == True & tunings_read == True: + kernel_name = row[0].strip() + if kernel_name not in prescan["kernels_union"]: + prescan["kernels_union"].append(kernel_name) + if kernel_name not in kernel_set: + kernel_set.add(kernel_name) + if (not outer_runsizes_set) and inner_runsizes_set: + outer_runsizes_set = inner_runsizes_set + outer_runsizes_set = outer_runsizes_set.intersection(inner_runsizes_set) + sets.append(kernel_set) + prescan["kernels_intersection"] = set.intersection(*sets) + prescan["sweep_sizes"] = list(outer_runsizes_set) + return prescan + + + + def __init__(self): + self.parent_parser = argparse.ArgumentParser(add_help=False) + self.parent_parser.add_argument('-d','--directories', required=True, nargs='+', action=self.DirectoryAction) + self.child_parser = argparse.ArgumentParser(parents=[self.parent_parser]) + + self.child_parser.add_argument('-o','--output',nargs=1, + help="output file prefix") + self.child_parser.add_argument('-gname', '--graph-name', nargs=1, + help="graph name") + self.child_parser.add_argument('-lloc', '--legend-location', nargs=2, + help="legend location x y ") + self.child_parser.add_argument('-ylabel', '--y-axis-label', nargs=1, + help="y axis label") + self.child_parser.add_argument('-yscale', '--y-axis-scale', nargs=1, + help="y axis scale") + self.child_parser.add_argument('-xlabel', '--x-axis-label', nargs=1, + help="x axis label") + self.child_parser.add_argument('-xscale', '--x-axis-scale', nargs=1, + help="x axis scale") + self.child_parser.add_argument('-hbin', '--histogram-bin-size', nargs=1, + help="histogram bin size") + self.child_parser.add_argument('-ylim', '--y-axis-limit', nargs=2, + help="y axis limit") + self.child_parser.add_argument('-xlim', '--x-axis-limit', nargs=2, + help="x axis limit") + self.child_parser.add_argument('--recolor', nargs=4, + help="recolor series_name r g b") + self.child_parser.add_argument('--reformat', nargs=2, + help="reformat series_name format_str") + #the following should be modified to use action based on possible kinds + self.child_parser.add_argument('-p','--print', nargs=1, + help="print one of kind argument expression") + self.child_parser.add_argument('-slg','--split-line-graphs', nargs=1, + help="split line graph of one kind argument expression") + self.child_parser.add_argument('-bg','--bar-graph', nargs=1, + help="bar graph of one kind argument expression") + self.child_parser.add_argument('-hg','--histogram-graph', nargs=1, + help="histogram graph of one kind argument expression") + + self.child_parser.add_argument('-k', '--kernels', nargs='+', action=self.KernelAction, + help='kernels to include') + self.child_parser.add_argument('-ek', '--exclude-kernels', nargs='+', action=self.KernelAction, + help='kernels to exclude') + self.child_parser.add_argument('-kc', '--kernels-close', nargs='+', action=self.KernelCloseAction, + help="search for set of kernels to include close to arg eg. Poly_ Basic_ etc") + self.child_parser.add_argument('-ekc', '--exclude-kernels-close', nargs='+', action=self.KernelCloseAction, + help="search for set of kernels to exclude close to arg eg. Poly_ Basic_ etc") + + self.child_parser.add_argument('-v', '--variants', nargs='+', action=self.VariantAction, + help='variants to include') + self.child_parser.add_argument('-ev', '--exclude-variants', nargs='+', action=self.VariantAction, + help='variants to exclude') + self.child_parser.add_argument('-vc', '--variants-close', nargs='+', action=self.VariantCloseAction, + help="search for set of variants to include close to arg like Seq, CUDA, HIP, etc") + self.child_parser.add_argument('-evc', '--exclude-variants-close', nargs='+', action=self.VariantCloseAction, + help="search for set of variants to exclude close to arg like Seq, CUDA, HIP etc") + + self.child_parser.add_argument('-t', '--tunings', nargs='+', action=self.TuningAction, + help='tunings to include') + self.child_parser.add_argument('-et', '--exclude-tunings', nargs='+', action=self.TuningAction, + help='tunings to exclude') + self.child_parser.add_argument('-tc', '--tunings-close', nargs='+', action=self.TuningCloseAction, + help="search for set of tunings to include close to arg eg. block, def{ault} etc") + self.child_parser.add_argument('-etc', '--exclude-tunings-close', nargs='+', action=self.TuningCloseAction, + help="search for set of tunings to exclude close to arg eg. block, def{ault} etc") + + + + def parse_args(self,argv): + args, unknown = self.child_parser.parse_known_args(argv) + return args, unknown + +def main(argv): + first_stage_parser = process_argparse() + args, unknown = first_stage_parser.parse_args(argv) + print(args) + print(unknown) + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index df9ba73d3..10b88fb04 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -12,6 +12,8 @@ import matplotlib.pyplot as plt +import argparse_sweep_graph + def make_tuple_str(astr): astr = astr.strip() if len(astr) < 2 or astr[0] != "(" or astr[len(astr)-1] != ")": @@ -180,6 +182,7 @@ def check_kernel_name(kname) -> bool: return False def set_legend_order(labels) -> list: + print("set_legend_order:" + str(labels)) lex_order = ['machine', 'execution_model','programming_model','tuning'] legend_order = [] @@ -806,21 +809,19 @@ def indexName(self, axes_index): def axesString(self): axes_names = "" for axis_index in self.axes: + print("axis_index:" +str(axis_index)) if axes_names: axes_names = "{}, {}".format(axes_names, Data.axes[axis_index]) else: axes_names = "[{}".format(Data.axes[axis_index]) return "{}]".format(axes_names) + def dataString(self): - buf = "" - for axes_index, val in self.data.items(): - index_buf = " " - for axis_index, index in axes_index.items(): - index_buf = "{} {}".format(index_buf, Data.get_index_name(axis_index, index)) - buf += "{} {}".format(buf, val) + buf = "items\n" + for item in self.items(): + buf += str(item) + "\n" return buf - def __repr__(self): return "MultiAxesTree({}):\n{}".format(self.axesString(), self.dataString()) @@ -1355,7 +1356,8 @@ def get_size_from_dir_name(sweep_subdir_name): raise NameError("Expected SIZE_".format(sweep_subdir_name)) def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index): - # print(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) + #print("read_runinfo_file") + #print(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) with open(sweep_subdir_runinfo_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') @@ -1417,7 +1419,7 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde Data.kinds[info_kind].set(axes_index, val) except ValueError: - print('ValueError') + print('read_runinfo_file ValueError') pass # could not convert data to int # we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored @@ -1474,7 +1476,7 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): kernel_index_name = Data.get_index_name(Data.axes["kernel_index"], kernel_index) #print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) except ValueError: - print("ValueError") + print("read_caliper_runinfo_file ValueError") pass # could not convert data to int @@ -1554,13 +1556,16 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) Data.axes["kernel_index"]: kernel_index, Data.axes["variant_index"]: variant_index, Data.axes["tuning_index"]: tuning_index, } - + print(axes_index) + print(Data.axes) try: val = float(row[c].strip()) #print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) Data.kinds[data_kind].set(axes_index, val) except ValueError: - print('ValueError') + # we usually encounter this for Not run entry + #print(row[c].strip()) + #print('read_timing_file ValueError') pass # could not convert data to float def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): @@ -1812,7 +1817,6 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk np_xdata = np_xdata[xind[0:]] np_ydata = np.array(ydata) np_ydata = np_ydata[xind[0:]] - #plt.plot(xdata,ydata,yformat,color=ycolor,label=yname) plt.plot(np_xdata,np_ydata,yformat,color=ycolor,label=yname) if ylabel: @@ -1828,7 +1832,7 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk plt.xscale(xscale) if xlim: plt.xlim(xlim) - + #print(plt.rcParams.keys()) plt.title(gname) handles, labels = plt.gca().get_legend_handles_labels() legend_order = set_legend_order(labels) @@ -2145,6 +2149,16 @@ def main(argv): bar_graph_kind_lists = [] histogram_graph_kind_lists = [] can_process_caliper = False + + # set a few plot params - see rcParams.keys() for list + params = {'xtick.labelsize':'small', + 'ytick.labelsize':'small', + 'axes.labelsize':'small', + 'axes.titlesize':'medium', + 'legend.fontsize':'x-small'} + plt.rcParams.update(params) + + """ i = 0 while i < len(argv): opt = argv[i] @@ -2359,7 +2373,105 @@ def fes(arg): else: sweep_dir_paths.append(opt) i += 1 - +""" + parser = argparse_sweep_graph.process_argparse() + args, unknown = parser.parse_args(argv) + print(args) + + #kernels section + parse_set = set() + if args.kernels != None: + parse_set.update(set(args.kernels)) + if args.kernels_close != None: + parse_set.update(set(args.kernels_close)) + for k in list(parse_set): + print("including kernel:" + str(k)) + Data.include_kernels[k] = k + + parse_set = set() + if args.exclude_kernels != None: + parse_set.update(set(args.exclude_kernels)) + if args.exclude_kernels_close != None: + parse_set.update(set(args.exclude_kernels_close)) + for k in list(parse_set): + print("excluding kernel:" + str(k)) + Data.exclude_kernels[k] = k + + # variant section + parse_set = set() + if args.variants != None: + parse_set.update(set(args.variants)) + if args.variants_close != None: + parse_set.update(set(args.variants_close)) + for k in list(parse_set): + print("including variant:" + str(k)) + Data.include_variants[k] = k + + parse_set = set() + if args.exclude_variants != None: + parse_set.update(set(args.exclude_variants)) + if args.exclude_variants_close != None: + parse_set.update(set(args.exclude_variants_close)) + for k in list(parse_set): + print("excluding variant:" + str(k)) + Data.exclude_variants[k] = k + + #tuning section + parse_set = set() + if args.tunings != None: + parse_set.update(set(args.tunings)) + if args.tunings_close != None: + parse_set.update(set(args.tunings_close)) + for k in list(parse_set): + print("including tuning:" + str(k)) + Data.include_tunings[k] = k + + parse_set = set() + if args.exclude_tunings != None: + parse_set.update(set(args.exclude_tunings)) + if args.exclude_tunings_close != None: + parse_set.update(set(args.exclude_tunings_close)) + for k in list(parse_set): + print("excluding tuning:" + str(k)) + Data.exclude_tunings[k] = k + + sweep_dir_paths = args.prescan["directories"] + + if args.output != None: + outputfile = args.output[0] + + if args.graph_name != None: + global g_gname + g_gname = args.graph_name[0] + + if args.legend_location != None: + global g_lloc + g_lloc = (float(args.legend_location[0]), float(args.legend_location[1])) + + if args.y_axis_label != None: + global g_ylabel + g_ylabel = args.y_axis_label[0] + + if args.y_axis_scale != None: + global g_yscale + g_yscale = args.y_axis_scale[0] + + if args.y_axis_limit != None: + global g_ylim + g_ylim = (float(args.y_axis_limit[0]),float(args.y_axis_limit[1])) + + if args.x_axis_label != None: + global g_xlabel + g_xlabel = args.x_axis_label[0] + + if args.x_axis_scale != None: + global g_xscale + g_xscale = args.x_axis_scale[0] + + if args.x_axis_limit != None: + global g_xlim + g_xlim = (float(args.x_axis_limit[0]), float(args.x_axis_limit[1])) + """ for kernel_group in Data.include_kernel_groups.keys(): if kernel_group in g_known_kernel_groups: for kernel_name in g_known_kernel_groups[kernel_group]["kernels"]: @@ -2375,13 +2487,24 @@ def fes(arg): else: print("Unknown kernel group {}".format(kernel_group)) sys.exit(2) + """ + if args.print != None: + for aa in args.print: + print_kinds.append(aa) + + if args.split_line_graphs != None: + split_line_graph_kind_lists.append([]) + for aa in args.split_line_graphs: + split_line_graph_kind_lists[len(split_line_graph_kind_lists) - 1].append(aa) + + #done with options print("Input directories are \"{0}\"".format(sweep_dir_paths)) print("Output file is \"{0}\"".format(outputfile)) - for sweep_dir_path in sweep_dir_paths: + print("sweep_dir_path:" + sweep_dir_path) sweep_dir_name = os.path.basename(sweep_dir_path) - print(sweep_dir_name, sweep_dir_path) + print("sweep_dir_name:" + sweep_dir_name) if sweep_dir_name in Data.exclude_sweeps: continue @@ -2400,10 +2523,12 @@ def fes(arg): # print(sweep_dir_name, sweep_subdir_path) run_size_name = get_size_from_dir_name(sweep_subdir_name) - - if not run_size_name in Data.run_sizes: - Data.add_run_size(run_size_name) - run_size_index = Data.run_sizes[run_size_name] + if run_size_name in args.prescan["sweep_sizes"]: + if not run_size_name in Data.run_sizes: + Data.add_run_size(run_size_name) + run_size_index = Data.run_sizes[run_size_name] + else: + continue sweep_subdir_timing_file_path = "" sweep_subdir_runinfo_file_path = "" From 0a9bef0fd16823dee07fa8f19c0dd8d28acf3924 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 2 Oct 2022 16:26:58 -0700 Subject: [PATCH 084/174] adiak runinfo metadata is wrapped in dict so we can use eval in python scripts; fix column metadata entries so it is applied to all tunings --- src/common/KernelBase.cpp | 48 +++++++++++-- src/common/KernelBase.hpp | 144 +++++++++++++++++++++++++++++++++++++- 2 files changed, 184 insertions(+), 8 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index bb6b7edfb..91e9f986e 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -151,6 +151,9 @@ void KernelBase::setVariantDefined(VariantID vid) min_time[vid].resize(variant_tuning_names[vid].size(), std::numeric_limits::max()); max_time[vid].resize(variant_tuning_names[vid].size(), -std::numeric_limits::max()); tot_time[vid].resize(variant_tuning_names[vid].size(), 0.0); +#ifdef RAJA_PERFSUITE_USE_CALIPER + doCaliMetaOnce[vid].resize(variant_tuning_names[vid].size(),true); +#endif } void KernelBase::execute(VariantID vid, size_t tune_idx) @@ -351,15 +354,46 @@ void KernelBase::setKernelAdiakMeta() std::string bytes_rep = std::to_string(getBytesPerRep()); std::string flops_rep = std::to_string(getFLOPsPerRep()); - std::string valStr = "problem_size:"+problem_size; - valStr += ",reps:"+reps; - valStr += ",iters_rep:"+iters_rep; - valStr += ",kerns_rep:"+kerns_rep; - valStr += ",bytes_rep:"+bytes_rep; - valStr += ",flops_rep:"+flops_rep; + // put into python dict form + std::string valStr = "{'Problem size': "+problem_size; + valStr += ",'Reps':"+reps; + valStr += ",'Iterations/rep': "+iters_rep; + valStr += ",'Kernels/rep': "+kerns_rep; + valStr += ",'Bytes/rep': "+bytes_rep; + valStr += ",'FLOPS/rep': "+flops_rep; + valStr += "}"; adiak::value(getName().c_str(),valStr.c_str()); } -// initialize a KernelBase static + +void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) +{ + // use json spec query expr + if(doCaliMetaOnce[vid].at(tune_idx)) { + cali_begin_double_byname("ProblemSize",(double)getActualProblemSize()); + cali_begin_double_byname("Reps",(double)getRunReps()); + cali_begin_double_byname("Iterations/Rep",(double)getItsPerRep()); + cali_begin_double_byname("Kernels/Rep",(double)getKernelsPerRep()); + cali_begin_double_byname("Bytes/Rep",(double)getBytesPerRep()); + cali_begin_double_byname("Flops/Rep",(double)getFLOPsPerRep()); + } +} + +void KernelBase::doOnceCaliMetaEnd(VariantID vid, size_t tune_idx) +{ + // use json spec query exp + if(doCaliMetaOnce[vid].at(tune_idx)) { + cali_end_byname("Flops/Rep"); + cali_end_byname("Bytes/Rep"); + cali_end_byname("Kernels/Rep"); + cali_end_byname("Iterations/Rep"); + cali_end_byname("Reps"); + cali_end_byname("ProblemSize"); + doCaliMetaOnce[vid].at(tune_idx) = false; + } + +} + +// initialize a KernelBase static std::map KernelBase::mgr; #endif } // closing brace for rajaperf namespace diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 5d56dcdac..97bcac431 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -41,6 +41,7 @@ std::string ktstr = kstr + "." + tstr; \ std::string gstr = getGroupName(kstr); \ std::string vstr = getVariantName(running_variant); \ + doOnceCaliMetaBegin(running_variant,running_tuning); \ CALI_MARK_BEGIN(vstr.c_str()); \ CALI_MARK_BEGIN(gstr.c_str()); \ CALI_MARK_BEGIN(kstr.c_str()); \ @@ -58,6 +59,7 @@ CALI_MARK_END(kstr.c_str()); \ CALI_MARK_END(gstr.c_str()); \ CALI_MARK_END(vstr.c_str()); \ + doOnceCaliMetaEnd(running_variant,running_tuning); \ } #else @@ -282,8 +284,133 @@ class KernelBase void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void setKernelAdiakMeta(); + void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); + void doOnceCaliMetaEnd(VariantID vid, size_t tune_idx); static void setCaliperMgrVariant(VariantID vid, const std::string& outdir) { + const std::string problem_size_json_spec = R"json( + { + "name" : "problem_size", + "type" : "boolean", + "category" : "metric", + "description" : "problem size", + "query" : + [ + { "level" : "local", + "select" : { "expr": "ProblemSize" }, + "group by" : "ProblemSize" + }, + { "level" : "cross", + "select" : { "expr": "ProblemSize" }, + "group by" : "ProblemSize" + } + ] + } +)json"; + + const std::string reps_json_spec = R"json( + { + "name" : "reps", + "type" : "boolean", + "category" : "metric", + "description" : "reps", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Reps" }, + "group by" : "Reps" + }, + { "level" : "cross", + "select" : { "expr": "Reps" }, + "group by" : "Reps" + } + ] + } +)json"; + + const std::string iters_json_spec = R"json( + { + "name" : "iters_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "iterations per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Iterations/Rep" }, + "group by" : "Iterations/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Iterations/Rep" }, + "group by" : "Iterations/Rep" + } + ] + } +)json"; + + + const std::string kernels_json_spec = R"json( + { + "name" : "kernels_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "kernels per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Kernels/Rep" }, + "group by" : "Kernels/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Kernels/Rep" }, + "group by" : "Kernels/Rep" + } + ] + } +)json"; + + const std::string bytes_json_spec = R"json( + { + "name" : "bytes_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "bytes per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Bytes/Rep" }, + "group by" : "Bytes/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Bytes/Rep" }, + "group by" : "Bytes/Rep" + } + ] + } +)json"; + + + const std::string flops_rep_json_spec = R"json( + { + "name" : "flops_p_rep", + "type" : "boolean", + "category" : "metric", + "description" : "flops per rep", + "query" : + [ + { "level" : "local", + "select" : { "expr": "Flops/Rep" }, + "group by" : "Flops/Rep" + }, + { "level" : "cross", + "select" : { "expr": "Flops/Rep" }, + "group by" : "Flops/Rep" + } + ] + } +)json"; + + cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); std::string od("./"); @@ -293,7 +420,19 @@ class KernelBase std::string vstr = getVariantName(vid); std::string profile = "spot(output=" +od + vstr + ".cali)"; std::cout << "Profile: " << profile << std::endl; - mgr[vid].add(profile.c_str()); + mgr[vid].add_option_spec(problem_size_json_spec.c_str()); + mgr[vid].set_default_parameter("problem_size","true"); + mgr[vid].add_option_spec(reps_json_spec.c_str()); + mgr[vid].set_default_parameter("reps","true"); + mgr[vid].add_option_spec(iters_json_spec.c_str()); + mgr[vid].set_default_parameter("iters_p_rep","true"); + mgr[vid].add_option_spec(kernels_json_spec.c_str()); + mgr[vid].set_default_parameter("kernels_p_rep","true"); + mgr[vid].add_option_spec(bytes_json_spec.c_str()); + mgr[vid].set_default_parameter("bytes_p_rep","true"); + mgr[vid].add_option_spec(flops_rep_json_spec.c_str()); + mgr[vid].set_default_parameter("flops_p_rep","true"); + mgr[vid].add(profile.c_str()); } static void setCaliperMgrStart(VariantID vid) { mgr[vid].start(); } @@ -360,6 +499,9 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing + std::vector doCaliMetaOnce[NumVariants]; + + // we need a Caliper Manager object per variant // we can inline this with c++17 static std::map mgr; From e512b0dff91c605a9d61242e0e7bd64d097b41cc Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 4 Oct 2022 15:28:23 -0700 Subject: [PATCH 085/174] split off data classes into separate module data_classes_sweep_graph; fix bug in caliper processing when we purposefully ignore specific variants or tunings --- scripts/argparse_sweep_graph.py | 75 +- scripts/data_classes_sweep_graph.py | 1389 ++++++++++++++++++ scripts/sweep_graph.py | 2022 ++++----------------------- 3 files changed, 1715 insertions(+), 1771 deletions(-) create mode 100644 scripts/data_classes_sweep_graph.py diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index 052762987..cac364db2 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -5,6 +5,48 @@ import csv import glob import difflib +import importlib +import pkgutil +import traceback + +def import_submodules(package, recursive=True): + """ Import all submodules of a module, recursively, including subpackages + + :param package: package (name or actual module) + :type package: str | module + :rtype: dict[str, types.ModuleType] + """ + if isinstance(package, str): + package = importlib.import_module(package) + results = {} + for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): + full_name = package.__name__ + '.' + name + chk_name = full_name.split('.') + if not 'roundtrip' in chk_name and not 'vis' in chk_name: + results[full_name] = importlib.import_module(full_name) + if recursive and is_pkg: + results.update(import_submodules(full_name)) + # print(results) + return results + + +def check_hatchet_import(): + reader_spec = importlib.util.find_spec("hatchet") + reader_found = reader_spec is not None + depends_found = False + if reader_found: + print("Hatchet Reader found") + try: + cr = importlib.import_module("hatchet") + import_submodules(cr) + depends_found = True + except: + print("Can't load Hatchet") + traceback.print_exc() + else: + print("Hatchet not found") + return reader_found and depends_found + def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) @@ -59,7 +101,22 @@ def close_action_check(values,prescan_dict_name, namespace): class process_argparse(): # the intended use is to return both an args object for Namespace, - # and unknown args that specifically do not use - or -- prefix + # and unknown args that specificallpy do not use - or -- prefix + + class CaliperAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='?', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + def __call__(self, parser, namespace, values, option_string=None): + check = check_hatchet_import() + setattr(namespace, self.dest, check) + if check: + cr = importlib.import_module("hatchet") + import_submodules(cr) + else: + cr = None + setattr(namespace,"cr",cr) + + class KernelAction(argparse.Action): def __init__(self, option_strings, dest, nargs='+', **kwargs): super().__init__(option_strings, dest, nargs, **kwargs) @@ -180,7 +237,9 @@ def prescan_sweep_dirs(self,sweep_dir_paths) -> dict: def __init__(self): - self.parent_parser = argparse.ArgumentParser(add_help=False) + self.parent_caliper_parser= argparse.ArgumentParser(add_help=False) + self.parent_caliper_parser.add_argument('--caliper', action=self.CaliperAction) + self.parent_parser = argparse.ArgumentParser(parents=[self.parent_caliper_parser],add_help=False) self.parent_parser.add_argument('-d','--directories', required=True, nargs='+', action=self.DirectoryAction) self.child_parser = argparse.ArgumentParser(parents=[self.parent_parser]) @@ -209,8 +268,11 @@ def __init__(self): self.child_parser.add_argument('--reformat', nargs=2, help="reformat series_name format_str") #the following should be modified to use action based on possible kinds - self.child_parser.add_argument('-p','--print', nargs=1, - help="print one of kind argument expression") + pgroup = self.child_parser.add_mutually_exclusive_group() + pgroup.add_argument('-pc','--print-compact', nargs=1, + help="print one of kind argument expression in compact form") + pgroup.add_argument('-pe','--print-expanded', nargs=1, + help="print one of kind argument expression in expanded form") self.child_parser.add_argument('-slg','--split-line-graphs', nargs=1, help="split line graph of one kind argument expression") self.child_parser.add_argument('-bg','--bar-graph', nargs=1, @@ -226,6 +288,11 @@ def __init__(self): help="search for set of kernels to include close to arg eg. Poly_ Basic_ etc") self.child_parser.add_argument('-ekc', '--exclude-kernels-close', nargs='+', action=self.KernelCloseAction, help="search for set of kernels to exclude close to arg eg. Poly_ Basic_ etc") + # eventually setup action to crosscheck against known kernel groups + self.child_parser.add_argument('-kg', '--kernel-groups', nargs='+', + help='kernel groups to include') + self.child_parser.add_argument('-ekg', '--exclude-kernel-groups', nargs='+', + help='kernel groups to exclude') self.child_parser.add_argument('-v', '--variants', nargs='+', action=self.VariantAction, help='variants to include') diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py new file mode 100644 index 000000000..ee3e6f9b6 --- /dev/null +++ b/scripts/data_classes_sweep_graph.py @@ -0,0 +1,1389 @@ +import math + +def make_tuple_str(astr): + astr = astr.strip() + if len(astr) < 2 or astr[0] != "(" or astr[len(astr) - 1] != ")": + return None + astr = astr[1:len(astr) - 1] + atup = astr.split(",") + return tuple((a.strip() for a in atup)) + + +def normalize_color_tuple(t): + len_t = 0.0 + for i in range(0, len(t)): + len_t += t[i] * t[i] + len_t = math.sqrt(len_t) + new_t = () + for i in range(0, len(t)): + new_t += (t[i] / len_t,) + return new_t + + +def clamp_tuple(t, min_val=0.0, max_val=1.0): + new_t = () + for i in range(0, len(t)): + val = t[i] + if val > max_val: + val = max_val + elif val < min_val: + val = min_val + new_t += (val,) + return new_t + + +def color_mul(t, factor): + new_t = () + for i in range(0, len(t)): + new_t += (t[i] * factor,) + return clamp_tuple(new_t) + + +def make_color_tuple_rgb(r, g, b): + return (r / 255.0, g / 255.0, b / 255.0) + + +def make_color_tuple_str(color_str): + rgb = make_tuple_str(color_str) + if len(rgb) != 3: + raise NameError("Expected a tuple of 3 floats in [0-1]") + r = float(rgb[0].strip()) + g = float(rgb[1].strip()) + b = float(rgb[2].strip()) + return clamp_tuple((r, g, b)) + + +def set_legend_order(labels) -> list: + print("set_legend_order:" + str(labels)) + lex_order = ['machine', 'execution_model', 'programming_model', 'tuning'] + legend_order = [] + + machines = [] + programming_models = [] + execution_models = [] + tunings = [] + for label in labels: + ll = label.split(" ") + machines.append(ll[0]) + variant = ll[1] + vs = variant.split("_") + programming_models.append(vs[0]) + execution_models.append(vs[1]) + tunings.append(ll[2]) + + machines_min_len = len(min(machines, key=len)) + prg_min_len = len(min(programming_models, key=len)) + exe_min_len = len(min(execution_models, key=len)) + tunings_min_len = len(min(tunings, key=len)) + lex_strings = [] + for i in range(len(machines)): + machines[i] = machines[i][0:machines_min_len] + programming_models[i] = programming_models[i][0:prg_min_len] + execution_models[i] = execution_models[i][0:exe_min_len] + tunings[i] = tunings[i][0:tunings_min_len] + lex_string = "" + for lo in lex_order: + if lo == 'machine': + lex_string += machines[i] + if lo == 'programming_model': + lex_string += programming_models[i] + if lo == 'execution_model': + lex_string += execution_models[i] + if lo == 'tuning': + lex_string += tunings[i] + lex_strings.append([lex_string, i]) + lex_strings.sort() + + for x in lex_strings: + legend_order.append(x[1]) + + # print(lex_strings) + # print(legend_order) + + return legend_order + + +#g_timing_filename = "RAJAPerf-timing-Minimum.csv" +g_timing_filename = "RAJAPerf-timing-Average.csv" +g_runinfo_filename = "RAJAPerf-kernels.csv" +g_timing_file_kind = "time(s)" + +# Kernels sorted into categories based on performance bottlenecks + +g_known_kernel_groups = { + "bandwidth": { + "kind": "bandwidth(GiB/s)", + "kernels": [ "Basic_DAXPY", "Basic_DAXPY_ATOMIC", "Basic_INIT3", + "Basic_INIT_VIEW1D", "Basic_INIT_VIEW1D_OFFSET", + "Basic_MULADDSUB", "Lcals_DIFF_PREDICT", "Lcals_EOS", + "Lcals_FIRST_DIFF", "Lcals_FIRST_SUM", "Lcals_GEN_LIN_RECUR", + "Lcals_HYDRO_1D", "Lcals_PLANCKIAN", "Lcals_TRIDIAG_ELIM", + "Polybench_JACOBI_1D", "Stream_ADD", "Stream_COPY", + "Stream_MUL", "Stream_TRIAD", + + "Basic_IF_QUAD", "Basic_INDEXLIST", "Basic_INDEXLIST_3LOOP", + "Basic_NESTED_INIT", "Lcals_HYDRO_2D", "Lcals_INT_PREDICT", + "Polybench_FDTD_2D", "Polybench_HEAT_3D", + "Polybench_JACOBI_2D", "Stream_DOT", "Apps_CONVECTION3DPA", + "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_ENERGY", + "Apps_FIR", "Apps_MASS3DPA", "Apps_NODAL_ACCUMULATION_3D", + "Apps_PRESSURE", "Apps_VOL3D", "Algorithm_SCAN", + "Algorithm_REDUCE_SUM", "Algorithm_MEMCPY", "Algorithm_MEMSET"], + }, + "flops": { + "kind": "GFLOPS", + "kernels": [ "Basic_MAT_MAT_SHARED", "Polybench_2MM", "Polybench_3MM", + "Polybench_GEMM", + + "Polybench_HEAT_3D", "Apps_CONVECTION3DPA", + "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_FIR", + "Apps_MASS3DPA", "Apps_VOL3D", ], + }, + "reduce": { + "kind": "throughput(GProblem size/s)", + "kernels": [ "Basic_PI_REDUCE", "Basic_REDUCE3_INT", "Basic_REDUCE_STRUCT", + "Basic_TRAP_INT", "Lcals_FIRST_MIN", "Stream_DOT", + "Algorithm_REDUCE_SUM", ] + }, + "other": { + "kind": "throughput(GProblem size/s)", + "kernels": [ "Polybench_ADI", "Polybench_ATAX", "Polybench_FLOYD_WARSHALL", + "Polybench_GEMVER", "Polybench_GESUMMV", "Polybench_MVT", + "Apps_LTIMES", "Apps_LTIMES_NOVIEW", "Algorithm_SORT", + "Algorithm_SORTPAIRS", ] + }, + "launch_bound": { + "kind": "time/rep(us)", + "kernels": [ "Apps_HALOEXCHANGE", "Apps_HALOEXCHANGE_FUSED", ] + }, + } + + + +g_color_base_factor = 1.0 +g_color_lambda_factor = 0.7 +g_color_raja_factor = 0.4 +g_color_seq = normalize_color_tuple(make_color_tuple_rgb(204, 119, 34)) # ocre +g_color_omp = normalize_color_tuple(make_color_tuple_rgb(0, 115, 125)) # omp teal +g_color_ompt = normalize_color_tuple(make_color_tuple_rgb(125, 10, 0)) # omp teal compliment +g_color_cuda = normalize_color_tuple(make_color_tuple_rgb(118, 185, 0)) # nvidia green +g_color_hip = normalize_color_tuple(make_color_tuple_rgb(237, 28, 36)) # amd red +g_known_variants = {"Base_Seq" : {"color": color_mul(g_color_seq, g_color_base_factor)}, + "Lambda_Seq" : {"color": color_mul(g_color_seq, g_color_lambda_factor)}, + "RAJA_Seq" : {"color": color_mul(g_color_seq, g_color_raja_factor)}, + + "Base_OpenMP" : {"color": color_mul(g_color_omp, g_color_base_factor)}, + "Lambda_OpenMP" : {"color": color_mul(g_color_omp, g_color_lambda_factor)}, + "RAJA_OpenMP" : {"color": color_mul(g_color_omp, g_color_raja_factor)}, + + "Base_OpenMPTarget" : {"color": color_mul(g_color_ompt, g_color_base_factor)}, + "Lambda_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_lambda_factor)}, + "RAJA_OpenMPTarget" : {"color": color_mul(g_color_ompt, g_color_raja_factor)}, + + "Base_CUDA" : {"color": color_mul(g_color_cuda, g_color_base_factor)}, + "Lambda_CUDA" : {"color": color_mul(g_color_cuda, g_color_lambda_factor)}, + "RAJA_CUDA" : {"color": color_mul(g_color_cuda, g_color_raja_factor)}, + + "Base_HIP" : {"color": color_mul(g_color_hip, g_color_base_factor)}, + "Lambda_HIP" : {"color": color_mul(g_color_hip, g_color_lambda_factor)}, + "RAJA_HIP" : {"color": color_mul(g_color_hip, g_color_raja_factor)} + } +g_known_tunings = {"default" : {"format": "-"}, + "block_25" : {"format": "-"}, + "block_32" : {"format": ":"}, + "block_64" : {"format": "-."}, + "block_128" : {"format": "--"}, + "block_256" : {"format": "-"}, + "block_512" : {"format": "-."}, + "block_1024": {"format": "-"}, + "cub" : {"format": ":"}, + "library" : {"format": "-"}, + "rocprim" : {"format": ":"} + } +g_markers = ["o", "s", "+", "x", "*", "d", "h", "p", "8"] + +# reformat or color series +# formatted as series_name: dictionary of "color": color, "format": format +g_series_reformat = {} + + +def compute_data(kind): + if not kind in Data.kinds: + raise NameError("Unknown data kind {}".format(kind)) + + datatree = Data.kinds[kind] + if datatree.data: + return # already calculated + if not (datatree.model_kind and datatree.args and datatree.func): + raise NameError("Computing data is not supported for kind {0}".format(kind)) + + model_kind = datatree.model_kind + compute_args = datatree.args + compute_func = datatree.func + + if model_kind != kind: + Data.compute(model_kind) + + arg_datatrees = () + for arg_kind in compute_args: + # calculate data for arg_kind + Data.compute(arg_kind) + arg_datatree = Data.kinds[arg_kind] + arg_datatrees = arg_datatrees + (arg_datatree,) + + if (not model_kind in Data.kinds) or (not Data.kinds[model_kind].data): + raise NameError("Model data not available {0}, no args".format(model_kind)) + + datatree.makeData() + + use_lists = () + for arg_datatree in arg_datatrees: + use_list = datatree.missingAxes(arg_datatree.axes) + use_lists = use_lists + (use_list,) + + for axes_index in Data.kinds[model_kind]: + # print("compute_data:"+str(axes_index)) + if not datatree.check(axes_index): + args_val = () + for i in range(0, len(arg_datatrees)): + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + if use_lists[i]: + arg_val = [arg_val, ] + args_val = args_val + (arg_val,) + datatree.set(axes_index, args_val) + else: + args_val = datatree.get(axes_index) + for i in range(0, len(arg_datatrees)): + if use_lists[i]: + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + args_val[i].append(arg_val) + + for axes_index, args_val in datatree.items(): + val = compute_func(*args_val) + datatree.set(axes_index, val) + + +def compute_index(kind_preindex, index_args): + # print("compute_index", kind_preindex, index_args) + Data.compute(kind_preindex) + datatree_preindex = Data.kinds[kind_preindex] + + # extract axes and indices + partial_axis_index = {} + for index_str in index_args: + index_list = index_str.split("::") + if len(index_list) != 2: + raise NameError("Expected valid index ::: {}".format(index_str)) + axis_name = index_list[0].strip() + index_name = index_list[1].strip() + partial_axis_index.update(Data.get_axis_index(axis_name, index_name)) + + kind = "{}[{}]".format(kind_preindex, ",".join(index_args)) + + datatree = None + if kind in Data.kinds: + datatree = Data.kinds[kind] + if datatree.data: + return + else: + axes = Data.axes_difference(datatree_preindex.axes, partial_axis_index) + datatree = Data.DataTree(kind, datatree_preindex.label, axes=axes) + Data.kinds[kind] = datatree + + datatree.makeData() + + for axes_index, partial_axes_index, value in datatree_preindex.partial_match_items(partial_axis_index): + datatree.set(partial_axes_index, value) + + +def compute_templated_data(kind_template, template_args): + # print("compute_templated_data", kind_template, template_args) + if kind_template in Data.kind_templates: + kind = Data.kind_templates[kind_template].getKind(template_args) + if not kind in Data.kinds: + # compute args first to ensure arg kinds exist + for arg_kind in Data.kind_templates[kind_template].getArgs(template_args): + Data.compute(arg_kind) + Data.kinds[kind] = Data.kind_templates[kind_template].makeDataTree(template_args) + Data.compute(kind) + else: + raise NameError("Unkown kind template {}".format(kind_template)) + + +def kind_template_scan(kind): + # print("kind_template_scan", kind) + + kind_prefix = None + + template_args = [] + index_args = [] + + template_depth = 0 + index_depth = 0 + + arg_end_idx = -1 + + # look through string backwards to find indexing or templating + for i_forward in range(0, len(kind)): + i = len(kind) - i_forward - 1 + c = kind[i] + if c == ">" or c == "]": + if template_depth == 0 and index_depth == 0: + arg_end_idx = i + if c == ">": + template_depth += 1 + elif c == "]": + index_depth += 1 + elif c == ",": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = i + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = i + elif c == "<" or c == "[": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = -1 + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = -1 + if c == "<": + template_depth -= 1 + elif c == "[": + index_depth -= 1 + if template_depth == 0 and index_depth == 0: + if not kind_prefix: + kind_prefix = kind[:i].strip() + break + assert (arg_end_idx == -1) + assert (template_depth == 0) + assert (index_depth == 0) + assert (kind_prefix) + + # reverse lists + for i in range(0, len(template_args) // 2): + i_rev = len(template_args) - i - 1 + template_args[i], template_args[i_rev] = template_args[i_rev], template_args[i] + for i in range(0, len(index_args) // 2): + i_rev = len(index_args) - i - 1 + index_args[i], index_args[i_rev] = index_args[i_rev], index_args[i] + + return (kind_prefix, template_args, index_args) + + +def compute(kind): + if kind in Data.kinds: + if not Data.kinds[kind].data: + Data.compute_data(kind) + else: + pass + else: + kind_template, template_args, index_args = Data.kind_template_scan(kind) + # print("Data.kind_template_scan", kind_template, template_args, index_args) + if template_args: + if kind_template in Data.kind_templates: + Data.compute_templated_data(kind_template, template_args) + else: + raise NameError("Unknown data kind template {}".format(kind)) + elif index_args: + Data.compute_index(kind_template, index_args) + else: + raise NameError("Unknown data kind {}".format(kind)) + + +def first(vals): + return vals[0] + + +def last(vals): + return vals[len(vals) - 1] + + +def sum(vals): + sum_val = 0 + for val in vals: + sum_val += val + return sum_val + + +def avg(vals): + return sum(vals) / len(vals) + + +def stddev(vals): + avg_val = avg(vals) + stddev_val = 0 + for val in vals: + stddev_val += (val - avg_val) * (val - avg_val) + stddev_val /= len(vals) + stddev_val = math.sqrt(stddev_val) + return stddev_val + + +def relstddev(vals): + avg_val = avg(vals) + stddev_val = 0 + for val in vals: + stddev_val += (val - avg_val) * (val - avg_val) + stddev_val /= len(vals) + stddev_val = math.sqrt(stddev_val) + return stddev_val / abs(avg_val) + + +# returns (intercept, slope, correlation_coefficient) +def linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum): + assert (n > 0) + if n == 1: + slope = 0.0 + intercept = ysum + correlation_coefficient = 1.0 + else: + slope = (n * xysum - xsum * ysum) / ((n * x2sum - xsum * xsum) + 1e-80) + intercept = (ysum - slope * xsum) / n + correlation_coefficient = (n * xysum - xsum * ysum) / ( + math.sqrt((n * x2sum - xsum * xsum) * (n * y2sum - ysum * ysum)) + 1e-80) + return (intercept, slope, correlation_coefficient) + + +# returns (intercept, slope, correlation_coefficient) +def linearRegression(yvals, xvals): + assert (len(xvals) == len(yvals)) + n = len(xvals) + xsum = sum(xvals) + ysum = sum(yvals) + x2sum = sum([x * x for x in xvals]) + y2sum = sum([y * y for y in yvals]) + xysum = sum([xvals[i] * yvals[i] for i in range(0, n)]) + return linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) + + +def eval_linearRegression(lr_vals, xval): + return lr_vals[0] + lr_vals[1] * xval + + +# returns (intercept, slope, correlation_coefficient) +def linearRegression_loglog(yvals, xvals): + assert (len(xvals) == len(yvals)) + xlogvals = [math.log(x, 2) for x in xvals] + ylogvals = [math.log(y, 2) for y in yvals] + return linearRegression(ylogvals, xlogvals) + + +def eval_linearRegression_loglog(lr_vals, xval): + return math.pow(2, lr_vals[0]) * math.pow(xval, lr_vals[1]) + + +# returns (intercept, slope, correlation_coefficient) +def segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR): + sums[0] += xvals[i] + sums[1] += yvals[i] + sums[2] += xvals[i] * xvals[i] + sums[3] += yvals[i] * yvals[i] + sums[4] += xvals[i] * yvals[i] + xsum = sums[0] + ysum = sums[1] + x2sum = sums[2] + y2sum = sums[3] + xysum = sums[4] + LR[i] = linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) + + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, LR_right): + lr_vals_left = None + lr_vals_right = None + break_point = None + + if i == 0: + lr_vals_right = LR_right[i] + break_point = xvals[i] - 1.0 + elif i > 0 and i < n: + lr_vals_left = LR_left[i - 1] + lr_vals_right = LR_right[i] + break_point = (xvals[i - 1] + xvals[i]) / 2.0 + elif i == n: + lr_vals_left = LR_left[i - 1] + break_point = xvals[i - 1] + 1.0 + else: + assert (0) + + numer = 0.0 + for j in range(0, n): + xval = xvals[j] + yval = yvals[j] + lr_vals = None + if xval < break_point: + lr_vals = lr_vals_left + else: + lr_vals = lr_vals_right + lr_yval = eval_linearRegression(lr_vals, xval) + numer += (yval - lr_yval) * (yval - lr_yval) + + correlation_coefficient = 1.0 - numer / denom + if correlation_coefficient > ret[2]: + ret[0] = [break_point, ] + ret[1] = [lr_vals_left, lr_vals_right, ] + ret[2] = correlation_coefficient + + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression(yvals, xvals): + assert (len(xvals) == len(yvals)) + N = len(xvals) + + LR_left = [] + LR_right = [] + for i in range(0, N): + LR_left.append(None) + LR_right.append(None) + + sums = [0.0, 0.0, 0.0, 0.0, 0.0] + for ii in range(0, N): + i = N - ii - 1 + n = ii + 1 + segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_right) + + sums = [0.0, 0.0, 0.0, 0.0, 0.0] + for i in range(0, N): + n = i + 1 + segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_left) + + yavg = avg(yvals) + denom = sum([(y - yavg) * (y - yavg) for y in yvals]) + ret = [[], [], -math.inf] + for i in range(0, N + 1): + segmented_linearRegression_helper(ret, i, N, xvals, yvals, denom, LR_left, LR_right) + + return (*ret,) + + +def find_segment(break_points, xval): + break_i = len(break_points) + for i in range(0, len(break_points)): + break_point = break_points[i] + if xval < break_point: + break_i = i + break + return break_i + + +def eval_segmented_linearRegression(slr_vals, xval): + break_i = find_segment(slr_vals[0], xval) + return eval_linearRegression(slr_vals[1][break_i], xval) + + +# returns ([break points...], [linear regressions...], correlation_coefficient) +def segmented_linearRegression_loglog(yvals, xvals): + assert (len(xvals) == len(yvals)) + xlogvals = [math.log(x, 2) for x in xvals] + ylogvals = [math.log(y, 2) for y in yvals] + return segmented_linearRegression(ylogvals, xlogvals) + + +def eval_segmented_linearRegression_loglog(slr_vals, xval): + break_i = find_segment(slr_vals[0], math.log(xval, 2)) + return eval_linearRegression_loglog(slr_vals[1][break_i], xval) + + +class Data: + num_sweeps = 0 + sweeps = {} + sweep_markers = {} + exclude_sweeps = {} + + num_run_sizes = 0 + run_sizes = {} + + include_kernel_groups = {} + exclude_kernel_groups = {} + + num_kernels = 0 + kernels = {} + include_kernels = {} + exclude_kernels = {} + + num_variants = 0 + variants = {} + variant_colors = {} + include_variants = {} + exclude_variants = {} + + num_tunings = 0 + tunings = {} + tuning_formats = {} + include_tunings = {} + exclude_tunings = {} + + def add_sweep(sweep_name): + sweep_index = Data.num_sweeps + Data.num_sweeps += 1 + Data.sweeps[sweep_name] = sweep_index + Data.sweeps[sweep_index] = sweep_name + + def add_run_size(run_size_name): + run_size_index = Data.num_run_sizes + Data.num_run_sizes += 1 + Data.run_sizes[run_size_name] = run_size_index + Data.run_sizes[run_size_index] = run_size_name + + def add_kernel(kernel_name): + kernel_index = Data.num_kernels + Data.num_kernels += 1 + Data.kernels[kernel_name] = kernel_index + Data.kernels[kernel_index] = kernel_name + + def add_variant(variant_name): + variant_index = Data.num_variants + Data.num_variants += 1 + Data.variants[variant_name] = variant_index + Data.variants[variant_index] = variant_name + if variant_name in g_known_variants: + variant_color = g_known_variants[variant_name]["color"] + Data.variant_colors[variant_name] = variant_color + Data.variant_colors[variant_index] = variant_color + else: + print("Unknown variant {0}".format(variant_name)) + sys.exit(1) + + def add_tuning(tuning_name): + tuning_index = Data.num_tunings + Data.num_tunings += 1 + Data.tunings[tuning_name] = tuning_index + Data.tunings[tuning_index] = tuning_name + if tuning_name in g_known_tunings: + tuning_format = g_known_tunings[tuning_name]["format"] + Data.tuning_formats[tuning_name] = tuning_format + Data.tuning_formats[tuning_index] = tuning_format + else: + print("Unknown tuning {0}".format(tuning_name)) + sys.exit(1) + + num_axes = 5 + axes = {"sweep_dir_name": 0, 0: "sweep_dir_name", + "run_size" : 1, 1: "run_size", + "kernel_index" : 2, 2: "kernel_index", + "variant_index" : 3, 3: "variant_index", + "tuning_index" : 4, 4: "tuning_index", } + + def get_axis_name(axis_index): + if axis_index in Data.axes: + return Data.axes[axis_index] + else: + raise NameError("Unknown axis index {}".format(axis_index)) + + def get_index_name(axis_index, index): + if axis_index == Data.axes["sweep_dir_name"]: + return Data.sweeps[index] + elif axis_index == Data.axes["run_size"]: + return Data.run_sizes[index] + elif axis_index == Data.axes["kernel_index"]: + return Data.kernels[index] + elif axis_index == Data.axes["variant_index"]: + return Data.variants[index] + elif axis_index == Data.axes["tuning_index"]: + return Data.tunings[index] + else: + raise NameError("Unknown axis index {}".format(axis_index)) + + def get_axis_index_str(axis_index, index): + return "{}:{}".format(Data.get_axis_name(axis_index), Data.get_index_name(axis_index, index)) + + def get_axes_index_str(axes_index): + name = "{" + for axis_index, index in axes_index.items(): + name = "{}{},".format(name, Data.get_axis_index_str(axis_index, index)) + return "{}}}".format(name) + + def get_axis_index(axis_name, index_name): + if axis_name == "sweep_dir_name": + return {Data.axes[axis_name]: Data.sweeps[index_name], } + elif axis_name == "run_size": + return {Data.axes[axis_name]: Data.run_sizes[index_name], } + elif axis_name == "kernel_index": + return {Data.axes[axis_name]: Data.kernels[index_name], } + elif axis_name == "variant_index": + return {Data.axes[axis_name]: Data.variants[index_name], } + elif axis_name == "tuning_index": + return {Data.axes[axis_name]: Data.tunings[index_name], } + else: + raise NameError("Unknown axis name {}".format(axis_name)) + + def axes_difference(axes, partial_axes_index): + new_axes = [] + for axis_index in axes: + if not axis_index in partial_axes_index: + new_axes.append(axis_index) + return new_axes + + # multi-dimensional array structured like this + # directory name - platform, compiler, etc + # run size - problem size, for run_sizes + # kernel index - for kernels + info_axes = [axes["sweep_dir_name"], + axes["run_size"], + axes["kernel_index"], ] + + # multi-dimensional array structured like this + # directory name - platform, compiler, etc + # run size - problem size, for run_sizes + # kernel index - for kernels + # variant index - for variants + # tuning index - for tunings + data_axes = [axes["sweep_dir_name"], + axes["run_size"], + axes["kernel_index"], + axes["variant_index"], + axes["tuning_index"], ] + + # multi-dimensional array structured like data but missing some dimensions + # directory name - platform, compiler, etc + # kernel index - for kernels + # variant index - for variants + # tuning index - for tunings + run_size_reduced_axes = [axes["sweep_dir_name"], + axes["kernel_index"], + axes["variant_index"], + axes["tuning_index"], ] + + data_model_kind = "time(s)" + + def MultiAxesTreeKeyGenerator0(data_tree): + assert (len(data_tree.axes) == 0) + if False: + yield {} + + def MultiAxesTreeKeyGenerator1(data_tree): + assert (len(data_tree.axes) == 1) + assert (data_tree.data) + for k0 in data_tree.data.keys(): + yield {data_tree.axes[0]: k0, } + + def MultiAxesTreeKeyGenerator2(data_tree): + assert (len(data_tree.axes) == 2) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1 in v0.keys(): + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, } + + def MultiAxesTreeKeyGenerator3(data_tree): + assert (len(data_tree.axes) == 3) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2 in v1.keys(): + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, } + + def MultiAxesTreeKeyGenerator4(data_tree): + assert (len(data_tree.axes) == 4) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3 in v2.keys(): + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, } + + def MultiAxesTreeKeyGenerator5(data_tree): + assert (len(data_tree.axes) == 5) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + for k4 in v3.keys(): + yield {data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, + data_tree.axes[4]: k4, } + + def MultiAxesTreeItemGenerator0(data_tree): + assert (len(data_tree.axes) == 0) + if False: + yield ({}, None,) + + def MultiAxesTreeItemGenerator1(data_tree): + assert (len(data_tree.axes) == 1) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + yield ({data_tree.axes[0]: k0, }, v0,) + + def MultiAxesTreeItemGenerator2(data_tree): + assert (len(data_tree.axes) == 2) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, }, v1,) + + def MultiAxesTreeItemGenerator3(data_tree): + assert (len(data_tree.axes) == 3) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, }, v2,) + + def MultiAxesTreeItemGenerator4(data_tree): + assert (len(data_tree.axes) == 4) + assert (data_tree.data) + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, }, v3,) + + def MultiAxesTreeItemGenerator5(data_tree): + assert (len(data_tree.axes) == 5) + assert (data_tree.data) + + for k0, v0 in data_tree.data.items(): + for k1, v1 in v0.items(): + for k2, v2 in v1.items(): + for k3, v3 in v2.items(): + for k4, v4 in v3.items(): + yield ({data_tree.axes[0]: k0, + data_tree.axes[1]: k1, + data_tree.axes[2]: k2, + data_tree.axes[3]: k3, + data_tree.axes[4]: k4, }, v4,) + + def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, + val, depth): + if data_tree.axes[depth] in partial_axes_index: + key = partial_axes_index[data_tree.axes[depth]] + if key in val: + val = val[key] + axes_index[data_tree.axes[depth]] = key + if depth + 1 == len(data_tree.axes): + yield (axes_index.copy(), leftover_axes_index.copy(), val,) + else: + gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, val, depth + 1) + for yld in gen: + yield yld + else: + # print(data_tree, partial_axes_index, + # axes_index, leftover_axes_index, + # key, val, depth) + raise NameError("invalid index {} {}".format(Data.get_axes_index_str(axes_index), + Data.get_axis_index_str(data_tree.axes[depth], key))) + else: + for key, val in val.items(): + axes_index[data_tree.axes[depth]] = key + leftover_axes_index[data_tree.axes[depth]] = key + if depth + 1 == len(data_tree.axes): + yield (axes_index.copy(), leftover_axes_index.copy(), val,) + else: + gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, + axes_index, leftover_axes_index, val, depth + 1) + for yld in gen: + yield yld + + def MultiAxesTreePartialItemGenerator0(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 0) + if False: + yield ({}, None,) + + def MultiAxesTreePartialItemGenerator1(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 1) + assert (data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator2(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 2) + assert (data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator3(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 3) + assert (data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator4(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 4) + assert (data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + def MultiAxesTreePartialItemGenerator5(data_tree, partial_axes_index): + assert (len(data_tree.axes) == 5) + assert (data_tree.data) + return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) + + class MultiAxesTree: + # axes is an array of axis_indices in the depth order they occur in the tree + # indices is a dictionary of axis_indices to indices + + def __init__(self, axes): + assert (axes) + self.axes = axes + self.data = {} + + def check(self, axes_index): + data = self.data + for axis_index in self.axes: + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + return False + data = data[index] + return True + + def get(self, axes_index): + data = self.data + for axis_index in self.axes: + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + raise NameError("Missing index {}".format(index)) + data = data[index] + return data + + def set(self, axes_index, val): + data = self.data + for i in range(0, len(self.axes) - 1): + axis_index = self.axes[i] + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + if not index in data: + data[index] = {} + data = data[index] + axis_index = self.axes[len(self.axes) - 1] + if not axis_index in axes_index: + axis_name = Data.axes[axis_index] + raise NameError("Missing axis {}".format(axis_name)) + index = axes_index[axis_index] + data[index] = val + + def indexName(self, axes_index): + name = "" + for axis_index, index in axes_index.items(): + if name: + name = "{} {}".format(name, Data.get_index_name(axis_index, index)) + else: + name = Data.get_index_name(axis_index, index) + return name + + def axesString(self): + axes_names = "" + for axis_index in self.axes: + if axes_names: + axes_names = "{}, {}".format(axes_names, Data.axes[axis_index]) + else: + axes_names = "[{}".format(Data.axes[axis_index]) + return "{}]".format(axes_names) + + def dataString(self, compact=True): + if compact: + buf = self.axesString() + "\n" + else: + buf = "" + for item in self.items(): + keys, value = item + print(str(keys)) + if compact: + buf += str(item) + "\n" + else: + buf += "(" + Data.get_axes_index_str(keys) + "," + str(value) + ")\n" + return buf + + def __repr__(self): + return "MultiAxesTree({}):\n{}".format(self.axesString(), self.dataString()) + + def __str__(self): + return "MultiAxesTree({})".format(self.axesString()) + + def keys(self): + assert (self.data != None) + if len(self.axes) == 0: + return Data.MultiAxesTreeKeyGenerator0(self) + elif len(self.axes) == 1: + return Data.MultiAxesTreeKeyGenerator1(self) + elif len(self.axes) == 2: + return Data.MultiAxesTreeKeyGenerator2(self) + elif len(self.axes) == 3: + return Data.MultiAxesTreeKeyGenerator3(self) + elif len(self.axes) == 4: + return Data.MultiAxesTreeKeyGenerator4(self) + elif len(self.axes) == 5: + return Data.MultiAxesTreeKeyGenerator5(self) + else: + raise ValueError + + def items(self): + assert (self.data != None) + if len(self.axes) == 0: + return Data.MultiAxesTreeItemGenerator0(self) + elif len(self.axes) == 1: + return Data.MultiAxesTreeItemGenerator1(self) + elif len(self.axes) == 2: + return Data.MultiAxesTreeItemGenerator2(self) + elif len(self.axes) == 3: + return Data.MultiAxesTreeItemGenerator3(self) + elif len(self.axes) == 4: + return Data.MultiAxesTreeItemGenerator4(self) + elif len(self.axes) == 5: + return Data.MultiAxesTreeItemGenerator5(self) + else: + raise ValueError + + def partial_match_items(self, partial_axes_index): + assert (self.data != None) + num_matching_indices = 0 + for axis_index in self.axes: + if axis_index in partial_axes_index: + num_matching_indices += 1 + assert (num_matching_indices == len(partial_axes_index)) + if len(self.axes) == 0: + return Data.MultiAxesTreePartialItemGenerator0(self, partial_axes_index) + elif len(self.axes) == 1: + return Data.MultiAxesTreePartialItemGenerator1(self, partial_axes_index) + elif len(self.axes) == 2: + return Data.MultiAxesTreePartialItemGenerator2(self, partial_axes_index) + elif len(self.axes) == 3: + return Data.MultiAxesTreePartialItemGenerator3(self, partial_axes_index) + elif len(self.axes) == 4: + return Data.MultiAxesTreePartialItemGenerator4(self, partial_axes_index) + elif len(self.axes) == 5: + return Data.MultiAxesTreePartialItemGenerator5(self, partial_axes_index) + else: + raise ValueError + + def __iter__(self): + return self.keys() + + class DataTree: + + def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): + self.kind = kind + self.label = label + self.axes = axes + self.args = args + self.func = func + self.model_kind = model_kind + if not self.model_kind and self.args: + self.model_kind = self.args[0] + self.data = None + + def makeData(self, axes=None): + if not self.axes: + if axes: + self.axes = axes + elif self.model_kind and self.model_kind in Data.kinds: + self.axes = Data.kinds[self.model_kind].axes + assert (self.axes) + self.data = Data.MultiAxesTree(self.axes) + + def hasAxes(self, other_axes): + for axis_index in other_axes: + if not axis_index in self.axes: + return False + return True + + def sameAxes(self, other_axes): + if len(self.axes) != len(other_axes): + return False + self.hasAxes(other_axes) + + def missingAxes(self, other_axes): + for axis_index in other_axes: + if not axis_index in self.axes: + return True + return False + + def check(self, axes_index): + return self.data.check(axes_index) + + def get(self, axes_index): + return self.data.get(axes_index) + + def set(self, axes_index, val): + return self.data.set(axes_index, val) + + def keys(self): + return self.data.keys() + + def items(self): + return self.data.items() + + def partial_match_items(self, partial_axes_index): + return self.data.partial_match_items(partial_axes_index) + + def __iter__(self): + return iter(self.data) + + def indexName(self, axes_index): + return self.data.indexName(axes_index) + + def axesString(self): + return self.data.axesString() + + def dataString(self, compact=True): + return self.data.dataString(compact) + + def __repr__(self): + return "DataTree({} {} {}):\n{}".format(self.kind, self.label, self.axesString(), self.dataString()) + + def __str__(self): + return "DataTree({} {} {})".format(self.kind, self.label, self.axesString()) + + class DataTreeTemplate: + + def __init__(self, kind_template, label_template, + combined_axis=None, model_kind=None, args=None, func=None): + self.kind_template = kind_template + self.label_template = label_template + self.combined_axis_template = combined_axis + self.model_kind_template = model_kind + self.arg_templates = args + self.func = func + + def getKind(self, template_args): + return self.kind_template.format(*template_args) + + def getLabel(self, template_args): + arg_labels = [arg_kind in Data.kinds and Data.kinds[arg_kind].label or None for arg_kind in template_args] + return self.label_template.format(*arg_labels) + + def getArgs(self, template_args): + return [arg.format(*template_args) for arg in self.arg_templates] + + def getCombinedAxis(self, template_args): + return self.combined_axis_template.format(*template_args) + + def getModelKind(self, args, template_args): + assert (len(args) > 0) + model_kind = None + # choose model_kind with most axes + for kind in args: + if kind in Data.kinds: + if not model_kind: + model_kind = kind + elif len(Data.kinds[kind].axes) > len(Data.kinds[model_kind].axes): + model_kind = kind + # use chosen model_kind + if self.model_kind_template: + model_kind = self.model_kind_template.format(*template_args) + assert (model_kind) + return model_kind + + def getAxes(self, model_kind, template_args): + model_axes = Data.kinds[model_kind].axes + combined_axis_index = None + if self.combined_axis_template: + combined_axis_name = self.getCombinedAxis(template_args) + combined_axis_index = Data.axes[combined_axis_name] + axes = [] + for axis_index in model_axes: + if axis_index != combined_axis_index: + axes.append(axis_index) + return axes + + def makeDataTree(self, template_args): + kind = self.getKind(template_args) + label = self.getLabel(template_args) + args = self.getArgs(template_args) + model_kind = self.getModelKind(args, template_args) + axes = self.getAxes(model_kind, template_args) + return Data.DataTree(kind, label, model_kind=model_kind, axes=axes, args=args, func=self.func) + + +# has info derivable from first kind "time(s)" which is read from files + kinds = {"Problem size" : DataTree("Problem size", "Problem size", axes=info_axes), + "Reps" : DataTree("Reps", "Reps", axes=info_axes), + "Iterations/rep" : DataTree("Iterations/rep", "Iterations", axes=info_axes), + "Kernels/rep" : DataTree("Kernels/rep", "Kernels", axes=info_axes), + "Bytes/rep" : DataTree("Bytes/rep", "Bytes", axes=info_axes), + "FLOPS/rep" : DataTree("FLOPS/rep", "FLOPS", axes=info_axes), + + "time(s)" : DataTree("time(s)", "time(s)", axes=data_axes), + + "time(ms)" : DataTree("time(ms)", "time(ms)", args=["time(s)"], func=lambda t: t * 1000.0), + "time(us)" : DataTree("time(us)", "time(us)", args=["time(s)"], + func=lambda t: t * 1000000.0), + "time(ns)" : DataTree("time(ns)", "time(ns)", args=["time(s)"], + func=lambda t: t * 1000000000.0), + + "time/rep(s)" : DataTree("time/rep(s)", "time(s)", args=["time(s)", "Reps"], + func=lambda t, r: t / r), + "time/rep(ms)" : DataTree("time/rep(ms)", "time(ms)", args=["time/rep(s)"], + func=lambda tpr: tpr * 1000.0), + "time/rep(us)" : DataTree("time/rep(us)", "time(us)", args=["time/rep(s)"], + func=lambda tpr: tpr * 1000000.0), + "time/rep(ns)" : DataTree("time/rep(ns)", "time(ns)", args=["time/rep(s)"], + func=lambda tpr: tpr * 1000000000.0), + + "time/it(s)" : DataTree("time/it(s)", "time(s)", args=["time/rep(s)", "Iterations/rep"], + func=lambda tpr, ipr: tpr / ipr), + "time/it(ms)" : DataTree("time/it(ms)", "time(ms)", args=["time/it(s)"], + func=lambda tpi: tpi * 1000.0), + "time/it(us)" : DataTree("time/it(us)", "time(us)", args=["time/it(s)"], + func=lambda tpi: tpi * 1000000.0), + "time/it(ns)" : DataTree("time/it(ns)", "time(ns)", args=["time/it(s)"], + func=lambda tpi: tpi * 1000000000.0), + + "time/kernel(s)" : DataTree("time/kernel(s)", "time(s)", args=["time/rep(s)", "Kernels/rep"], + func=lambda tpr, kpr: tpr / kpr), + "time/kernel(ms)" : DataTree("time/kernel(ms)", "time(ms)", args=["time/kernel(s)"], + func=lambda tpk: tpk * 1000.0), + "time/kernel(us)" : DataTree("time/kernel(us)", "time(us)", args=["time/kernel(s)"], + func=lambda tpk: tpk * 1000000.0), + "time/kernel(ns)" : DataTree("time/kernel(ns)", "time(ns)", args=["time/kernel(s)"], + func=lambda tpk: tpk * 1000000000.0), + + "throughput(Problem size/s)" : DataTree("throughput(Problem size/s)", "throughput(Problem size/s)", + args=["time/rep(s)", "Problem size"], func=lambda tpr, ps: ps / tpr), + "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "throughput(Problem size/ms)", + args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), + "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "throughput(Problem size/us)", + args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), + "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "throughput(Problem size/ns)", + args=["throughput(Problem size/s)"], + func=lambda thr: thr / 1000000000.0), + "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "throughput(KProblem size/s)", + args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), + "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "throughput(MProblem size/s)", + args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), + "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "throughput(GProblem size/s)", + args=["throughput(Problem size/s)"], + func=lambda thr: thr / 1000000000.0), + "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "throughput(TProblem size/s)", + args=["throughput(Problem size/s)"], + func=lambda thr: thr / 1000000000000.0), + + "bandwidth(B/s)" : DataTree("bandwidth(B/s)", "bandwidth(B/s)", args=["time/rep(s)", "Bytes/rep"], + func=lambda tpr, bpr: bpr / tpr), + "bandwidth(KB/s)" : DataTree("bandwidth(KB/s)", "bandwidth(KB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1000.0), + "bandwidth(MB/s)" : DataTree("bandwidth(MB/s)", "bandwidth(MB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1000000.0), + "bandwidth(GB/s)" : DataTree("bandwidth(GB/s)", "bandwidth(GB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1000000000.0), + "bandwidth(TB/s)" : DataTree("bandwidth(TB/s)", "bandwidth(TB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1000000000000.0), + "bandwidth(KiB/s)" : DataTree("bandwidth(KiB/s)", "bandwidth(KiB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1024.0), + "bandwidth(MiB/s)" : DataTree("bandwidth(MiB/s)", "bandwidth(MiB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1048576.0), + "bandwidth(GiB/s)" : DataTree("bandwidth(GiB/s)", "bandwidth(GiB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1073741824.0), + "bandwidth(TiB/s)" : DataTree("bandwidth(TiB/s)", "bandwidth(TiB/s)", args=["bandwidth(B/s)"], + func=lambda bps: bps / 1099511627776.0), + + "FLOPS" : DataTree("FLOPS", "FLOPS", args=["time/rep(s)", "FLOPS/rep"], + func=lambda tpr, fpr: fpr / tpr), + "KFLOPS" : DataTree("KFLOPS", "KFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000.0), + "MFLOPS" : DataTree("MFLOPS", "MFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000.0), + "GFLOPS" : DataTree("GFLOPS", "GFLOPS", args=["FLOPS"], + func=lambda fps: fps / 1000000000.0), + "TFLOPS" : DataTree("TFLOPS", "TFLOPS", args=["FLOPS"], + func=lambda fps: fps / 1000000000000.0), + + } + + kind_templates = { + "log10" : DataTreeTemplate("log10<{0}>", "log10({0})", args=["{0}", ], + func=lambda val: math.log(val, 10)), + "log2" : DataTreeTemplate("log2<{0}>", "log2({0})", args=["{0}", ], + func=lambda val: math.log(val, 2)), + "ln" : DataTreeTemplate("ln<{0}>", "ln({0})", args=["{0}", ], + func=lambda val: math.log(val)), + + "add" : DataTreeTemplate("add<{0},{1}>", "{0} + {1}", args=["{0}", "{1}"], + func=lambda lhs, rhs: lhs + rhs), + "sub" : DataTreeTemplate("sub<{0},{1}>", "{0} - {1}", args=["{0}", "{1}"], + func=lambda lhs, rhs: lhs - rhs), + "mul" : DataTreeTemplate("mul<{0},{1}>", "{0} * {1}", args=["{0}", "{1}"], + func=lambda lhs, rhs: lhs * rhs), + "div" : DataTreeTemplate("div<{0},{1}>", "{0} / {1}", args=["{0}", "{1}"], + func=lambda lhs, rhs: lhs / rhs), + + "first" : DataTreeTemplate("first<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=first), + "last" : DataTreeTemplate("last<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=last), + "min" : DataTreeTemplate("min<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=min), + "max" : DataTreeTemplate("max<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=max), + "sum" : DataTreeTemplate("sum<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=sum), + "avg" : DataTreeTemplate("avg<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=avg), + "stddev" : DataTreeTemplate("stddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=stddev), + "relstddev" : DataTreeTemplate("relstddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], + func=relstddev), + + "_LR" : DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", + combined_axis="run_size", args=["{0}", "Problem size"], + func=linearRegression), + "LR_intercept" : DataTreeTemplate("LR_intercept<{0}>", "intercept", args=["_LR<{0}>"], + func=lambda lr: lr[0]), + "LR_slope" : DataTreeTemplate("LR_slope<{0}>", "slope", args=["_LR<{0}>"], + func=lambda lr: lr[1]), + "LR_correlationCoefficient" : DataTreeTemplate("LR_correlationCoefficient<{0}>", "correlation coefficient", + args=["_LR<{0}>"], func=lambda lr: lr[2]), + "LR" : DataTreeTemplate("LR<{0}>", "{0}", model_kind="{0}", + args=["_LR<{0}>", "Problem size"], func=eval_linearRegression), + + "_LR_log" : DataTreeTemplate("_LR_log<{0}>", "intercept, slope, correlation coefficient", + combined_axis="run_size", args=["{0}", "Problem size"], + func=linearRegression_loglog), + "LR_log_intercept" : DataTreeTemplate("LR_log_intercept<{0}>", "intercept", args=["_LR_log<{0}>"], + func=lambda lr: lr[0]), + "LR_log_slope" : DataTreeTemplate("LR_log_slope<{0}>", "slope", args=["_LR_log<{0}>"], + func=lambda lr: lr[1]), + "LR_log_correlationCoefficient" : DataTreeTemplate("LR_log_correlationCoefficient<{0}>", "correlation coefficient", + args=["_LR_log<{0}>"], func=lambda lr: lr[2]), + "LR_log" : DataTreeTemplate("LR_log<{0}>", "{0}", model_kind="{0}", + args=["_LR_log<{0}>", "Problem size"], + func=eval_linearRegression_loglog), + + "_LR2" : DataTreeTemplate("_LR2<{0}>", "intercept, slope, correlation coefficient", + combined_axis="run_size", args=["{0}", "Problem size"], + func=segmented_linearRegression), + "LR2_intercept" : DataTreeTemplate("LR2_intercept<{0}>", "intercept", args=["_LR2<{0}>"], + func=lambda lr: lr[0]), + "LR2_slope" : DataTreeTemplate("LR2_slope<{0}>", "slope", args=["_LR2<{0}>"], + func=lambda lr: lr[1]), + "LR2_correlationCoefficient" : DataTreeTemplate("LR2_correlationCoefficient<{0}>", "correlation coefficient", + args=["_LR2<{0}>"], func=lambda lr: lr[2]), + "LR2" : DataTreeTemplate("LR2<{0}>", "{0}", model_kind="{0}", + args=["_LR2<{0}>", "Problem size"], + func=eval_segmented_linearRegression), + + "_LR2_log" : DataTreeTemplate("_LR2_log<{0}>", "intercept, slope, correlation coefficient", + combined_axis="run_size", args=["{0}", "Problem size"], + func=segmented_linearRegression_loglog), + "LR2_log_intercept" : DataTreeTemplate("LR2_log_intercept<{0}>", "intercept", args=["_LR2_log<{0}>"], + func=lambda lr: lr[0]), + "LR2_log_slope" : DataTreeTemplate("LR2_log_slope<{0}>", "slope", args=["_LR2_log<{0}>"], + func=lambda lr: lr[1]), + "LR2_log_correlationCoefficient": DataTreeTemplate("LR2_log_correlationCoefficient<{0}>", "correlation coefficient", + args=["_LR2_log<{0}>"], func=lambda lr: lr[2]), + "LR2_log" : DataTreeTemplate("LR2_log<{0}>", "{0}", model_kind="{0}", + args=["_LR2_log<{0}>", "Problem size"], + func=eval_segmented_linearRegression_loglog), + + } diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 10b88fb04..3d51c8066 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -4,1347 +4,16 @@ import os import sys import csv -import importlib -import pkgutil -import traceback + import glob import numpy as np import matplotlib.pyplot as plt import argparse_sweep_graph - -def make_tuple_str(astr): - astr = astr.strip() - if len(astr) < 2 or astr[0] != "(" or astr[len(astr)-1] != ")": - return None - astr = astr[1:len(astr)-1] - atup = astr.split(",") - return tuple((a.strip() for a in atup)) - -def normalize_color_tuple(t): - len_t = 0.0 - for i in range(0, len(t)): - len_t += t[i]*t[i] - len_t = math.sqrt(len_t) - new_t = () - for i in range(0, len(t)): - new_t += (t[i]/len_t,) - return new_t - -def clamp_tuple(t, min_val=0.0, max_val=1.0): - new_t = () - for i in range(0, len(t)): - val = t[i] - if val > max_val: - val = max_val - elif val < min_val: - val = min_val - new_t += (val,) - return new_t - -def color_mul(t, factor): - new_t = () - for i in range(0, len(t)): - new_t += (t[i]*factor,) - return clamp_tuple(new_t) - -def make_color_tuple_rgb(r, g, b): - return (r/255.0, g/255.0, b/255.0) - -def make_color_tuple_str(color_str): - rgb = make_tuple_str(color_str) - if len(rgb) != 3: - raise NameError("Expected a tuple of 3 floats in [0-1]") - r = float(rgb[0].strip()) - g = float(rgb[1].strip()) - b = float(rgb[2].strip()) - return clamp_tuple((r, g, b)) - - -g_color_base_factor = 1.0 -g_color_lambda_factor = 0.7 -g_color_raja_factor = 0.4 -g_color_seq = normalize_color_tuple(make_color_tuple_rgb(204, 119, 34)) # ocre -g_color_omp = normalize_color_tuple(make_color_tuple_rgb(0, 115, 125)) # omp teal -g_color_ompt = normalize_color_tuple(make_color_tuple_rgb(125, 10, 0)) # omp teal compliment -g_color_cuda = normalize_color_tuple(make_color_tuple_rgb(118, 185, 0)) # nvidia green -g_color_hip = normalize_color_tuple(make_color_tuple_rgb(237, 28, 36)) # amd red -g_known_variants = { "Base_Seq": {"color": color_mul(g_color_seq, g_color_base_factor)}, - "Lambda_Seq": {"color": color_mul(g_color_seq, g_color_lambda_factor)}, - "RAJA_Seq": {"color": color_mul(g_color_seq, g_color_raja_factor)}, - - "Base_OpenMP": {"color": color_mul(g_color_omp, g_color_base_factor)}, - "Lambda_OpenMP": {"color": color_mul(g_color_omp, g_color_lambda_factor)}, - "RAJA_OpenMP": {"color": color_mul(g_color_omp, g_color_raja_factor)}, - - "Base_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_base_factor)}, - "Lambda_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_lambda_factor)}, - "RAJA_OpenMPTarget": {"color": color_mul(g_color_ompt, g_color_raja_factor)}, - - "Base_CUDA": {"color": color_mul(g_color_cuda, g_color_base_factor)}, - "Lambda_CUDA": {"color": color_mul(g_color_cuda, g_color_lambda_factor)}, - "RAJA_CUDA": {"color": color_mul(g_color_cuda, g_color_raja_factor)}, - - "Base_HIP": {"color": color_mul(g_color_hip, g_color_base_factor)}, - "Lambda_HIP": {"color": color_mul(g_color_hip, g_color_lambda_factor)}, - "RAJA_HIP": {"color": color_mul(g_color_hip, g_color_raja_factor)} - } -g_known_tunings = { "default": {"format": "-"}, - "block_25": {"format": "-"}, - "block_32": {"format": ":"}, - "block_64": {"format": "-."}, - "block_128": {"format": "--"}, - "block_256": {"format": "-"}, - "block_512": {"format": "-."}, - "block_1024": {"format": "-"}, - "cub": {"format": ":"}, - "library": {"format": "-"}, - "rocprim": {"format": ":"} - } -g_markers = [ "o", "s", "+", "x", "*", "d", "h", "p", "8" ] - -# reformat or color series -# formatted as series_name: dictionary of "color": color, "format": format -g_series_reformat = {} - -#g_timing_filename = "RAJAPerf-timing-Minimum.csv" -g_timing_filename = "RAJAPerf-timing-Average.csv" -g_runinfo_filename = "RAJAPerf-kernels.csv" -g_timing_file_kind = "time(s)" - -# Kernels sorted into categories based on performance bottlenecks - -g_known_kernel_groups = { - "bandwidth": { - "kind": "bandwidth(GiB/s)", - "kernels": [ "Basic_DAXPY", "Basic_DAXPY_ATOMIC", "Basic_INIT3", - "Basic_INIT_VIEW1D", "Basic_INIT_VIEW1D_OFFSET", - "Basic_MULADDSUB", "Lcals_DIFF_PREDICT", "Lcals_EOS", - "Lcals_FIRST_DIFF", "Lcals_FIRST_SUM", "Lcals_GEN_LIN_RECUR", - "Lcals_HYDRO_1D", "Lcals_PLANCKIAN", "Lcals_TRIDIAG_ELIM", - "Polybench_JACOBI_1D", "Stream_ADD", "Stream_COPY", - "Stream_MUL", "Stream_TRIAD", - - "Basic_IF_QUAD", "Basic_INDEXLIST", "Basic_INDEXLIST_3LOOP", - "Basic_NESTED_INIT", "Lcals_HYDRO_2D", "Lcals_INT_PREDICT", - "Polybench_FDTD_2D", "Polybench_HEAT_3D", - "Polybench_JACOBI_2D", "Stream_DOT", "Apps_CONVECTION3DPA", - "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_ENERGY", - "Apps_FIR", "Apps_MASS3DPA", "Apps_NODAL_ACCUMULATION_3D", - "Apps_PRESSURE", "Apps_VOL3D", "Algorithm_SCAN", - "Algorithm_REDUCE_SUM", "Algorithm_MEMCPY", "Algorithm_MEMSET"], - }, - "flops": { - "kind": "GFLOPS", - "kernels": [ "Basic_MAT_MAT_SHARED", "Polybench_2MM", "Polybench_3MM", - "Polybench_GEMM", - - "Polybench_HEAT_3D", "Apps_CONVECTION3DPA", - "Apps_DEL_DOT_VEC_2D", "Apps_DIFFUSION3DPA", "Apps_FIR", - "Apps_MASS3DPA", "Apps_VOL3D", ], - }, - "reduce": { - "kind": "throughput(GProblem size/s)", - "kernels": [ "Basic_PI_REDUCE", "Basic_REDUCE3_INT", "Basic_REDUCE_STRUCT", - "Basic_TRAP_INT", "Lcals_FIRST_MIN", "Stream_DOT", - "Algorithm_REDUCE_SUM", ] - }, - "other": { - "kind": "throughput(GProblem size/s)", - "kernels": [ "Polybench_ADI", "Polybench_ATAX", "Polybench_FLOYD_WARSHALL", - "Polybench_GEMVER", "Polybench_GESUMMV", "Polybench_MVT", - "Apps_LTIMES", "Apps_LTIMES_NOVIEW", "Algorithm_SORT", - "Algorithm_SORTPAIRS", ] - }, - "launch_bound": { - "kind": "time/rep(us)", - "kernels": [ "Apps_HALOEXCHANGE", "Apps_HALOEXCHANGE_FUSED", ] - }, - } - -def check_kernel_name(kname) -> bool: - bandwidth_kernels = g_known_kernel_groups["bandwidth"]["kernels"] - flops_kernels = g_known_kernel_groups["flops"]["kernels"] - reduce_kernels = g_known_kernel_groups["reduce"]["kernels"] - other_kernels = g_known_kernel_groups["other"]["kernels"] - launch_bound_kernels = g_known_kernel_groups["launch_bound"]["kernels"] - if kname in bandwidth_kernels: - return True - if kname in flops_kernels: - return True - if kname in reduce_kernels: - return True - if kname in other_kernels: - return True - if kname in launch_bound_kernels: - return True - return False - -def set_legend_order(labels) -> list: - print("set_legend_order:" + str(labels)) - lex_order = ['machine', 'execution_model','programming_model','tuning'] - legend_order = [] - - machines = [] - programming_models = [] - execution_models = [] - tunings = [] - for label in labels: - ll = label.split(" ") - machines.append(ll[0]) - variant = ll[1] - vs = variant.split("_") - programming_models.append(vs[0]) - execution_models.append(vs[1]) - tunings.append(ll[2]) - - machines_min_len = len(min(machines,key=len)) - prg_min_len = len(min(programming_models,key=len)) - exe_min_len = len(min(execution_models, key=len)) - tunings_min_len = len(min(tunings,key=len)) - lex_strings = [] - for i in range(len(machines)): - machines[i] = machines[i][0:machines_min_len] - programming_models[i] = programming_models[i][0:prg_min_len] - execution_models[i] = execution_models[i][0:exe_min_len] - tunings[i] = tunings[i][0:tunings_min_len] - lex_string = "" - for lo in lex_order: - if lo == 'machine': - lex_string += machines[i] - if lo == 'programming_model': - lex_string += programming_models[i] - if lo == 'execution_model': - lex_string += execution_models[i] - if lo == 'tuning': - lex_string += tunings[i] - lex_strings.append([lex_string,i]) - lex_strings.sort() - - for x in lex_strings: - legend_order.append(x[1]) - - #print(lex_strings) - #print(legend_order) - - return legend_order - - -def first(vals): - return vals[0] - -def last(vals): - return vals[len(vals)-1] - -def sum(vals): - sum_val = 0 - for val in vals: - sum_val += val - return sum_val - -def avg(vals): - return sum(vals) / len(vals) - -def stddev(vals): - avg_val = avg(vals) - stddev_val = 0 - for val in vals: - stddev_val += (val - avg_val)*(val - avg_val) - stddev_val /= len(vals) - stddev_val = math.sqrt(stddev_val) - return stddev_val - -def relstddev(vals): - avg_val = avg(vals) - stddev_val = 0 - for val in vals: - stddev_val += (val - avg_val)*(val - avg_val) - stddev_val /= len(vals) - stddev_val = math.sqrt(stddev_val) - return stddev_val / abs(avg_val) - -# returns (intercept, slope, correlation_coefficient) -def linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum): - assert(n>0) - if n == 1: - slope = 0.0 - intercept = ysum - correlation_coefficient = 1.0 - else: - slope = (n*xysum - xsum*ysum) / ((n*x2sum - xsum*xsum)+1e-80) - intercept = (ysum - slope*xsum)/n - correlation_coefficient = (n*xysum - xsum*ysum) / (math.sqrt((n*x2sum - xsum*xsum)*(n*y2sum - ysum*ysum))+1e-80) - return (intercept, slope, correlation_coefficient) - -# returns (intercept, slope, correlation_coefficient) -def linearRegression(yvals, xvals): - assert(len(xvals) == len(yvals)) - n = len(xvals) - xsum = sum(xvals) - ysum = sum(yvals) - x2sum = sum([x*x for x in xvals]) - y2sum = sum([y*y for y in yvals]) - xysum = sum([xvals[i]*yvals[i] for i in range(0, n)]) - return linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) - -def eval_linearRegression(lr_vals, xval): - return lr_vals[0] + lr_vals[1]*xval - -# returns (intercept, slope, correlation_coefficient) -def linearRegression_loglog(yvals, xvals): - assert(len(xvals) == len(yvals)) - xlogvals = [math.log(x, 2) for x in xvals] - ylogvals = [math.log(y, 2) for y in yvals] - return linearRegression(ylogvals, xlogvals) - -def eval_linearRegression_loglog(lr_vals, xval): - return math.pow(2, lr_vals[0])*math.pow(xval, lr_vals[1]) - - -# returns (intercept, slope, correlation_coefficient) -def segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR): - sums[0] += xvals[i] - sums[1] += yvals[i] - sums[2] += xvals[i]*xvals[i] - sums[3] += yvals[i]*yvals[i] - sums[4] += xvals[i]*yvals[i] - xsum = sums[0] - ysum = sums[1] - x2sum = sums[2] - y2sum = sums[3] - xysum = sums[4] - LR[i] = linearRegression_helper(n, xsum, ysum, x2sum, y2sum, xysum) - -# returns ([break points...], [linear regressions...], correlation_coefficient) -def segmented_linearRegression_helper(ret, i, n, xvals, yvals, denom, LR_left, LR_right): - lr_vals_left = None - lr_vals_right = None - break_point = None - - if i == 0: - lr_vals_right = LR_right[i] - break_point = xvals[i] - 1.0 - elif i > 0 and i < n: - lr_vals_left = LR_left[i-1] - lr_vals_right = LR_right[i] - break_point = (xvals[i-1] + xvals[i]) / 2.0 - elif i == n: - lr_vals_left = LR_left[i-1] - break_point = xvals[i-1] + 1.0 - else: - assert(0) - - numer = 0.0 - for j in range(0, n): - xval = xvals[j] - yval = yvals[j] - lr_vals = None - if xval < break_point: - lr_vals = lr_vals_left - else: - lr_vals = lr_vals_right - lr_yval = eval_linearRegression(lr_vals, xval) - numer += (yval - lr_yval)*(yval - lr_yval) - - correlation_coefficient = 1.0 - numer / denom - if correlation_coefficient > ret[2]: - ret[0] = [break_point,] - ret[1] = [lr_vals_left, lr_vals_right,] - ret[2] = correlation_coefficient - -# returns ([break points...], [linear regressions...], correlation_coefficient) -def segmented_linearRegression(yvals, xvals): - assert(len(xvals) == len(yvals)) - N = len(xvals) - - LR_left = [] - LR_right = [] - for i in range(0, N): - LR_left.append(None) - LR_right.append(None) - - sums = [0.0, 0.0, 0.0, 0.0, 0.0] - for ii in range(0, N): - i = N-ii-1 - n = ii+1 - segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_right) - - sums = [0.0, 0.0, 0.0, 0.0, 0.0] - for i in range(0, N): - n = i+1 - segmented_linearRegression_partialRegression(i, n, xvals, yvals, sums, LR_left) - - yavg = avg(yvals) - denom = sum([(y-yavg)*(y-yavg) for y in yvals]) - ret = [[], [], -math.inf] - for i in range(0, N+1): - segmented_linearRegression_helper(ret, i, N, xvals, yvals, denom, LR_left, LR_right) - - return (*ret,) - -def find_segment(break_points, xval): - break_i = len(break_points) - for i in range(0, len(break_points)): - break_point = break_points[i] - if xval < break_point: - break_i = i - break - return break_i - -def eval_segmented_linearRegression(slr_vals, xval): - break_i = find_segment(slr_vals[0], xval) - return eval_linearRegression(slr_vals[1][break_i], xval) - -# returns ([break points...], [linear regressions...], correlation_coefficient) -def segmented_linearRegression_loglog(yvals, xvals): - assert(len(xvals) == len(yvals)) - xlogvals = [math.log(x, 2) for x in xvals] - ylogvals = [math.log(y, 2) for y in yvals] - return segmented_linearRegression(ylogvals, xlogvals) - -def eval_segmented_linearRegression_loglog(slr_vals, xval): - break_i = find_segment(slr_vals[0], math.log(xval, 2)) - return eval_linearRegression_loglog(slr_vals[1][break_i], xval) - - -class Data: - - num_sweeps = 0 - sweeps = {} - sweep_markers = {} - exclude_sweeps = {} - - num_run_sizes = 0 - run_sizes = {} - - include_kernel_groups = {} - exclude_kernel_groups = {} - - num_kernels = 0 - kernels = {} - include_kernels = {} - exclude_kernels = {} - - num_variants = 0 - variants = {} - variant_colors = {} - include_variants = {} - exclude_variants = {} - - num_tunings = 0 - tunings = {} - tuning_formats = {} - include_tunings = {} - exclude_tunings = {} - - def add_sweep(sweep_name): - sweep_index = Data.num_sweeps - Data.num_sweeps += 1 - Data.sweeps[sweep_name] = sweep_index - Data.sweeps[sweep_index] = sweep_name - - def add_run_size(run_size_name): - run_size_index = Data.num_run_sizes - Data.num_run_sizes += 1 - Data.run_sizes[run_size_name] = run_size_index - Data.run_sizes[run_size_index] = run_size_name - - def add_kernel(kernel_name): - kernel_index = Data.num_kernels - Data.num_kernels += 1 - Data.kernels[kernel_name] = kernel_index - Data.kernels[kernel_index] = kernel_name - - def add_variant(variant_name): - variant_index = Data.num_variants - Data.num_variants += 1 - Data.variants[variant_name] = variant_index - Data.variants[variant_index] = variant_name - if variant_name in g_known_variants: - variant_color = g_known_variants[variant_name]["color"] - Data.variant_colors[variant_name] = variant_color - Data.variant_colors[variant_index] = variant_color - else: - print("Unknown variant {0}".format(variant_name)) - sys.exit(1) - - def add_tuning(tuning_name): - tuning_index = Data.num_tunings - Data.num_tunings += 1 - Data.tunings[tuning_name] = tuning_index - Data.tunings[tuning_index] = tuning_name - if tuning_name in g_known_tunings: - tuning_format = g_known_tunings[tuning_name]["format"] - Data.tuning_formats[tuning_name] = tuning_format - Data.tuning_formats[tuning_index] = tuning_format - else: - print("Unknown tuning {0}".format(tuning_name)) - sys.exit(1) - - num_axes = 5 - axes = { "sweep_dir_name": 0, 0: "sweep_dir_name", - "run_size": 1, 1: "run_size", - "kernel_index": 2, 2: "kernel_index", - "variant_index": 3, 3: "variant_index", - "tuning_index": 4, 4: "tuning_index", } - - def get_axis_name(axis_index): - if axis_index in Data.axes: - return Data.axes[axis_index] - else: - raise NameError("Unknown axis index {}".format(axis_index)) - - def get_index_name(axis_index, index): - if axis_index == Data.axes["sweep_dir_name"]: - return Data.sweeps[index] - elif axis_index == Data.axes["run_size"]: - return Data.run_sizes[index] - elif axis_index == Data.axes["kernel_index"]: - return Data.kernels[index] - elif axis_index == Data.axes["variant_index"]: - return Data.variants[index] - elif axis_index == Data.axes["tuning_index"]: - return Data.tunings[index] - else: - raise NameError("Unknown axis index {}".format(axis_index)) - - def get_axis_index_str(axis_index, index): - return "{}:{}".format(Data.get_axis_name(axis_index), Data.get_index_name(axis_index, index)) - - def get_axes_index_str(axes_index): - name = "{" - for axis_index, index in axes_index.items(): - name = "{}{},".format(name, Data.get_axis_index_str(axis_index, index)) - return "{}}}".format(name) - - def get_axis_index(axis_name, index_name): - if axis_name == "sweep_dir_name": - return {Data.axes[axis_name]: Data.sweeps[index_name],} - elif axis_name == "run_size": - return {Data.axes[axis_name]: Data.run_sizes[index_name],} - elif axis_name == "kernel_index": - return {Data.axes[axis_name]: Data.kernels[index_name],} - elif axis_name == "variant_index": - return {Data.axes[axis_name]: Data.variants[index_name],} - elif axis_name == "tuning_index": - return {Data.axes[axis_name]: Data.tunings[index_name],} - else: - raise NameError("Unknown axis name {}".format(axis_name)) - - def axes_difference(axes, partial_axes_index): - new_axes = [] - for axis_index in axes: - if not axis_index in partial_axes_index: - new_axes.append(axis_index) - return new_axes - - # multi-dimensional array structured like this - # directory name - platform, compiler, etc - # run size - problem size, for run_sizes - # kernel index - for kernels - info_axes = [ axes["sweep_dir_name"], - axes["run_size"], - axes["kernel_index"], ] - - # multi-dimensional array structured like this - # directory name - platform, compiler, etc - # run size - problem size, for run_sizes - # kernel index - for kernels - # variant index - for variants - # tuning index - for tunings - data_axes = [ axes["sweep_dir_name"], - axes["run_size"], - axes["kernel_index"], - axes["variant_index"], - axes["tuning_index"], ] - - # multi-dimensional array structured like data but missing some dimensions - # directory name - platform, compiler, etc - # kernel index - for kernels - # variant index - for variants - # tuning index - for tunings - run_size_reduced_axes = [ axes["sweep_dir_name"], - axes["kernel_index"], - axes["variant_index"], - axes["tuning_index"], ] - - data_model_kind = "time(s)" - - - - def MultiAxesTreeKeyGenerator0(data_tree): - assert(len(data_tree.axes) == 0) - if False: - yield {} - - def MultiAxesTreeKeyGenerator1(data_tree): - assert(len(data_tree.axes) == 1) - assert(data_tree.data) - for k0 in data_tree.data.keys(): - yield {data_tree.axes[0]: k0,} - - def MultiAxesTreeKeyGenerator2(data_tree): - assert(len(data_tree.axes) == 2) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1 in v0.keys(): - yield {data_tree.axes[0]: k0, - data_tree.axes[1]: k1,} - - def MultiAxesTreeKeyGenerator3(data_tree): - assert(len(data_tree.axes) == 3) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2 in v1.keys(): - yield {data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2,} - - def MultiAxesTreeKeyGenerator4(data_tree): - assert(len(data_tree.axes) == 4) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2, v2 in v1.items(): - for k3 in v2.keys(): - yield {data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2, - data_tree.axes[3]: k3,} - - def MultiAxesTreeKeyGenerator5(data_tree): - assert(len(data_tree.axes) == 5) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2, v2 in v1.items(): - for k3, v3 in v2.items(): - for k4 in v3.keys(): - yield {data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2, - data_tree.axes[3]: k3, - data_tree.axes[4]: k4,} - - def MultiAxesTreeItemGenerator0(data_tree): - assert(len(data_tree.axes) == 0) - if False: - yield ({},None,) - - def MultiAxesTreeItemGenerator1(data_tree): - assert(len(data_tree.axes) == 1) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - yield ({data_tree.axes[0]: k0,}, v0,) - - def MultiAxesTreeItemGenerator2(data_tree): - assert(len(data_tree.axes) == 2) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - yield ({data_tree.axes[0]: k0, - data_tree.axes[1]: k1,}, v1,) - - def MultiAxesTreeItemGenerator3(data_tree): - assert(len(data_tree.axes) == 3) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2, v2 in v1.items(): - yield ({data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2,}, v2,) - - def MultiAxesTreeItemGenerator4(data_tree): - assert(len(data_tree.axes) == 4) - assert(data_tree.data) - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2, v2 in v1.items(): - for k3, v3 in v2.items(): - yield ({data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2, - data_tree.axes[3]: k3,}, v3,) - - def MultiAxesTreeItemGenerator5(data_tree): - assert(len(data_tree.axes) == 5) - assert(data_tree.data) - - for k0, v0 in data_tree.data.items(): - for k1, v1 in v0.items(): - for k2, v2 in v1.items(): - for k3, v3 in v2.items(): - for k4, v4 in v3.items(): - yield ({data_tree.axes[0]: k0, - data_tree.axes[1]: k1, - data_tree.axes[2]: k2, - data_tree.axes[3]: k3, - data_tree.axes[4]: k4,}, v4,) - - def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, - axes_index, leftover_axes_index, - val, depth): - if data_tree.axes[depth] in partial_axes_index: - key = partial_axes_index[data_tree.axes[depth]] - if key in val: - val = val[key] - axes_index[data_tree.axes[depth]] = key - if depth+1 == len(data_tree.axes): - yield (axes_index.copy(), leftover_axes_index.copy(), val,) - else: - gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, - axes_index, leftover_axes_index, val, depth+1) - for yld in gen: - yield yld - else: - #print(data_tree, partial_axes_index, - # axes_index, leftover_axes_index, - # key, val, depth) - raise NameError("invalid index {} {}".format(Data.get_axes_index_str(axes_index), Data.get_axis_index_str(data_tree.axes[depth], key))) - else: - for key, val in val.items(): - axes_index[data_tree.axes[depth]] = key - leftover_axes_index[data_tree.axes[depth]] = key - if depth+1 == len(data_tree.axes): - yield (axes_index.copy(), leftover_axes_index.copy(), val,) - else: - gen = Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, - axes_index, leftover_axes_index, val, depth+1) - for yld in gen: - yield yld - - def MultiAxesTreePartialItemGenerator0(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 0) - if False: - yield ({},None,) - - def MultiAxesTreePartialItemGenerator1(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 1) - assert(data_tree.data) - return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) - - def MultiAxesTreePartialItemGenerator2(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 2) - assert(data_tree.data) - return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) - - def MultiAxesTreePartialItemGenerator3(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 3) - assert(data_tree.data) - return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) - - def MultiAxesTreePartialItemGenerator4(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 4) - assert(data_tree.data) - return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) - - def MultiAxesTreePartialItemGenerator5(data_tree, partial_axes_index): - assert(len(data_tree.axes) == 5) - assert(data_tree.data) - return Data.MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, {}, {}, data_tree.data, 0) - - class MultiAxesTree: - # axes is an array of axis_indices in the depth order they occur in the tree - # indices is a dictionary of axis_indices to indices - - def __init__(self, axes): - assert(axes) - self.axes = axes - self.data = {} - - def check(self, axes_index): - data = self.data - for axis_index in self.axes: - if not axis_index in axes_index: - axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) - index = axes_index[axis_index] - if not index in data: - return False - data = data[index] - return True - - def get(self, axes_index): - data = self.data - for axis_index in self.axes: - if not axis_index in axes_index: - axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) - index = axes_index[axis_index] - if not index in data: - raise NameError("Missing index {}".format(index)) - data = data[index] - return data - - def set(self, axes_index, val): - data = self.data - for i in range(0, len(self.axes)-1): - axis_index = self.axes[i] - if not axis_index in axes_index: - axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) - index = axes_index[axis_index] - if not index in data: - data[index] = {} - data = data[index] - axis_index = self.axes[len(self.axes)-1] - if not axis_index in axes_index: - axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) - index = axes_index[axis_index] - data[index] = val - - def indexName(self, axes_index): - name = "" - for axis_index, index in axes_index.items(): - if name: - name = "{} {}".format(name, Data.get_index_name(axis_index, index)) - else: - name = Data.get_index_name(axis_index, index) - return name - - def axesString(self): - axes_names = "" - for axis_index in self.axes: - print("axis_index:" +str(axis_index)) - if axes_names: - axes_names = "{}, {}".format(axes_names, Data.axes[axis_index]) - else: - axes_names = "[{}".format(Data.axes[axis_index]) - return "{}]".format(axes_names) - - - def dataString(self): - buf = "items\n" - for item in self.items(): - buf += str(item) + "\n" - return buf - def __repr__(self): - return "MultiAxesTree({}):\n{}".format(self.axesString(), self.dataString()) - - def __str__(self): - return "MultiAxesTree({})".format(self.axesString()) - - def keys(self): - assert(self.data != None) - if len(self.axes) == 0: - return Data.MultiAxesTreeKeyGenerator0(self) - elif len(self.axes) == 1: - return Data.MultiAxesTreeKeyGenerator1(self) - elif len(self.axes) == 2: - return Data.MultiAxesTreeKeyGenerator2(self) - elif len(self.axes) == 3: - return Data.MultiAxesTreeKeyGenerator3(self) - elif len(self.axes) == 4: - return Data.MultiAxesTreeKeyGenerator4(self) - elif len(self.axes) == 5: - return Data.MultiAxesTreeKeyGenerator5(self) - else: - raise ValueError - - def items(self): - assert(self.data != None) - if len(self.axes) == 0: - return Data.MultiAxesTreeItemGenerator0(self) - elif len(self.axes) == 1: - return Data.MultiAxesTreeItemGenerator1(self) - elif len(self.axes) == 2: - return Data.MultiAxesTreeItemGenerator2(self) - elif len(self.axes) == 3: - return Data.MultiAxesTreeItemGenerator3(self) - elif len(self.axes) == 4: - return Data.MultiAxesTreeItemGenerator4(self) - elif len(self.axes) == 5: - return Data.MultiAxesTreeItemGenerator5(self) - else: - raise ValueError - - def partial_match_items(self, partial_axes_index): - assert(self.data != None) - num_matching_indices = 0 - for axis_index in self.axes: - if axis_index in partial_axes_index: - num_matching_indices += 1 - assert(num_matching_indices == len(partial_axes_index)) - if len(self.axes) == 0: - return Data.MultiAxesTreePartialItemGenerator0(self, partial_axes_index) - elif len(self.axes) == 1: - return Data.MultiAxesTreePartialItemGenerator1(self, partial_axes_index) - elif len(self.axes) == 2: - return Data.MultiAxesTreePartialItemGenerator2(self, partial_axes_index) - elif len(self.axes) == 3: - return Data.MultiAxesTreePartialItemGenerator3(self, partial_axes_index) - elif len(self.axes) == 4: - return Data.MultiAxesTreePartialItemGenerator4(self, partial_axes_index) - elif len(self.axes) == 5: - return Data.MultiAxesTreePartialItemGenerator5(self, partial_axes_index) - else: - raise ValueError - - def __iter__(self): - return self.keys() - - - class DataTree: - - def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): - self.kind = kind - self.label = label - self.axes = axes - self.args = args - self.func = func - self.model_kind = model_kind - if not self.model_kind and self.args: - self.model_kind = self.args[0] - self.data = None - - def makeData(self, axes=None): - if not self.axes: - if axes: - self.axes = axes - elif self.model_kind and self.model_kind in Data.kinds: - self.axes = Data.kinds[self.model_kind].axes - assert(self.axes) - self.data = Data.MultiAxesTree(self.axes) - - def hasAxes(self, other_axes): - for axis_index in other_axes: - if not axis_index in self.axes: - return False - return True - - def sameAxes(self, other_axes): - if len(self.axes) != len(other_axes): - return False - self.hasAxes(other_axes) - - def missingAxes(self, other_axes): - for axis_index in other_axes: - if not axis_index in self.axes: - return True - return False - - def check(self, axes_index): - return self.data.check(axes_index) - - def get(self, axes_index): - return self.data.get(axes_index) - - def set(self, axes_index, val): - return self.data.set(axes_index, val) - - def keys(self): - return self.data.keys() - - def items(self): - return self.data.items() - - def partial_match_items(self, partial_axes_index): - return self.data.partial_match_items(partial_axes_index) - - def __iter__(self): - return iter(self.data) - - def indexName(self, axes_index): - return self.data.indexName(axes_index) - - def axesString(self): - return self.data.axesString() - - def dataString(self): - return self.data.dataString() - - def __repr__(self): - return "DataTree({} {} {}):\n{}".format(self.kind, self.label, self.axesString(), self.dataString()) - - def __str__(self): - return "DataTree({} {} {})".format(self.kind, self.label, self.axesString()) - - class DataTreeTemplate: - - def __init__(self, kind_template, label_template, - combined_axis=None, model_kind=None, args=None, func=None): - self.kind_template = kind_template - self.label_template = label_template - self.combined_axis_template = combined_axis - self.model_kind_template = model_kind - self.arg_templates = args - self.func = func - - def getKind(self, template_args): - return self.kind_template.format(*template_args) - - def getLabel(self, template_args): - arg_labels = [arg_kind in Data.kinds and Data.kinds[arg_kind].label or None for arg_kind in template_args] - return self.label_template.format(*arg_labels) - - def getArgs(self, template_args): - return [ arg.format(*template_args) for arg in self.arg_templates ] - - def getCombinedAxis(self, template_args): - return self.combined_axis_template.format(*template_args) - - def getModelKind(self, args, template_args): - assert(len(args) > 0) - model_kind = None - # choose model_kind with most axes - for kind in args: - if kind in Data.kinds: - if not model_kind: - model_kind = kind - elif len(Data.kinds[kind].axes) > len(Data.kinds[model_kind].axes): - model_kind = kind - # use chosen model_kind - if self.model_kind_template: - model_kind = self.model_kind_template.format(*template_args) - assert(model_kind) - return model_kind - - def getAxes(self, model_kind, template_args): - model_axes = Data.kinds[model_kind].axes - combined_axis_index = None - if self.combined_axis_template: - combined_axis_name = self.getCombinedAxis(template_args) - combined_axis_index = Data.axes[combined_axis_name] - axes = [] - for axis_index in model_axes: - if axis_index != combined_axis_index: - axes.append(axis_index) - return axes - - def makeDataTree(self, template_args): - kind = self.getKind(template_args) - label = self.getLabel(template_args) - args = self.getArgs(template_args) - model_kind = self.getModelKind(args, template_args) - axes = self.getAxes(model_kind, template_args) - return Data.DataTree(kind, label, model_kind=model_kind, axes=axes, args=args, func=self.func) - - # has info derivable from first kind "time(s)" which is read from files - kinds = { "Problem size": DataTree("Problem size", "Problem size", axes=info_axes), - "Reps": DataTree("Reps", "Reps", axes=info_axes), - "Iterations/rep": DataTree("Iterations/rep", "Iterations", axes=info_axes), - "Kernels/rep": DataTree("Kernels/rep", "Kernels", axes=info_axes), - "Bytes/rep": DataTree("Bytes/rep", "Bytes", axes=info_axes), - "FLOPS/rep": DataTree("FLOPS/rep", "FLOPS", axes=info_axes), - - "time(s)": DataTree("time(s)", "time(s)", axes=data_axes), - - "time(ms)": DataTree("time(ms)", "time(ms)", args=["time(s)"], func=lambda t: t * 1000.0), - "time(us)": DataTree("time(us)", "time(us)", args=["time(s)"], func=lambda t: t * 1000000.0), - "time(ns)": DataTree("time(ns)", "time(ns)", args=["time(s)"], func=lambda t: t * 1000000000.0), - - "time/rep(s)": DataTree("time/rep(s)", "time(s)", args=["time(s)", "Reps"], func=lambda t, r: t / r), - "time/rep(ms)": DataTree("time/rep(ms)", "time(ms)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000.0), - "time/rep(us)": DataTree("time/rep(us)", "time(us)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000000.0), - "time/rep(ns)": DataTree("time/rep(ns)", "time(ns)", args=["time/rep(s)"], func=lambda tpr: tpr * 1000000000.0), - - "time/it(s)": DataTree("time/it(s)", "time(s)", args=["time/rep(s)", "Iterations/rep"], func=lambda tpr, ipr: tpr / ipr), - "time/it(ms)": DataTree("time/it(ms)", "time(ms)", args=["time/it(s)"], func=lambda tpi: tpi * 1000.0), - "time/it(us)": DataTree("time/it(us)", "time(us)", args=["time/it(s)"], func=lambda tpi: tpi * 1000000.0), - "time/it(ns)": DataTree("time/it(ns)", "time(ns)", args=["time/it(s)"], func=lambda tpi: tpi * 1000000000.0), - - "time/kernel(s)": DataTree("time/kernel(s)", "time(s)", args=["time/rep(s)", "Kernels/rep"], func=lambda tpr, kpr: tpr / kpr), - "time/kernel(ms)": DataTree("time/kernel(ms)", "time(ms)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000.0), - "time/kernel(us)": DataTree("time/kernel(us)", "time(us)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000000.0), - "time/kernel(ns)": DataTree("time/kernel(ns)", "time(ns)", args=["time/kernel(s)"], func=lambda tpk: tpk * 1000000000.0), - - "throughput(Problem size/s)": DataTree("throughput(Problem size/s)", "throughput(Problem size/s)", args=["time/rep(s)", "Problem size"], func=lambda tpr, ps: ps / tpr), - "throughput(Problem size/ms)": DataTree("throughput(Problem size/ms)", "throughput(Problem size/ms)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), - "throughput(Problem size/us)": DataTree("throughput(Problem size/us)", "throughput(Problem size/us)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), - "throughput(Problem size/ns)": DataTree("throughput(Problem size/ns)", "throughput(Problem size/ns)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000.0), - "throughput(KProblem size/s)": DataTree("throughput(KProblem size/s)", "throughput(KProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000.0), - "throughput(MProblem size/s)": DataTree("throughput(MProblem size/s)", "throughput(MProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000.0), - "throughput(GProblem size/s)": DataTree("throughput(GProblem size/s)", "throughput(GProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000.0), - "throughput(TProblem size/s)": DataTree("throughput(TProblem size/s)", "throughput(TProblem size/s)", args=["throughput(Problem size/s)"], func=lambda thr: thr / 1000000000000.0), - - "bandwidth(B/s)": DataTree("bandwidth(B/s)", "bandwidth(B/s)", args=["time/rep(s)", "Bytes/rep"], func=lambda tpr, bpr: bpr / tpr), - "bandwidth(KB/s)": DataTree("bandwidth(KB/s)", "bandwidth(KB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000.0), - "bandwidth(MB/s)": DataTree("bandwidth(MB/s)", "bandwidth(MB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000.0), - "bandwidth(GB/s)": DataTree("bandwidth(GB/s)", "bandwidth(GB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000000.0), - "bandwidth(TB/s)": DataTree("bandwidth(TB/s)", "bandwidth(TB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1000000000000.0), - "bandwidth(KiB/s)": DataTree("bandwidth(KiB/s)", "bandwidth(KiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1024.0), - "bandwidth(MiB/s)": DataTree("bandwidth(MiB/s)", "bandwidth(MiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1048576.0), - "bandwidth(GiB/s)": DataTree("bandwidth(GiB/s)", "bandwidth(GiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1073741824.0), - "bandwidth(TiB/s)": DataTree("bandwidth(TiB/s)", "bandwidth(TiB/s)", args=["bandwidth(B/s)"], func=lambda bps: bps / 1099511627776.0), - - "FLOPS": DataTree("FLOPS", "FLOPS", args=["time/rep(s)", "FLOPS/rep"], func=lambda tpr, fpr: fpr / tpr), - "KFLOPS": DataTree("KFLOPS", "KFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000.0), - "MFLOPS": DataTree("MFLOPS", "MFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000.0), - "GFLOPS": DataTree("GFLOPS", "GFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000000.0), - "TFLOPS": DataTree("TFLOPS", "TFLOPS", args=["FLOPS"], func=lambda fps: fps / 1000000000000.0), - - } - - kind_templates = { - "log10": DataTreeTemplate("log10<{0}>", "log10({0})", args=["{0}",], func=lambda val: math.log(val, 10)), - "log2": DataTreeTemplate("log2<{0}>", "log2({0})", args=["{0}",], func=lambda val: math.log(val, 2)), - "ln": DataTreeTemplate("ln<{0}>", "ln({0})", args=["{0}",], func=lambda val: math.log(val)), - - "add": DataTreeTemplate("add<{0},{1}>", "{0} + {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs + rhs), - "sub": DataTreeTemplate("sub<{0},{1}>", "{0} - {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs - rhs), - "mul": DataTreeTemplate("mul<{0},{1}>", "{0} * {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs * rhs), - "div": DataTreeTemplate("div<{0},{1}>", "{0} / {1}", args=["{0}", "{1}"], func=lambda lhs, rhs: lhs / rhs), - - "first": DataTreeTemplate("first<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=first), - "last": DataTreeTemplate("last<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=last), - "min": DataTreeTemplate("min<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=min), - "max": DataTreeTemplate("max<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=max), - "sum": DataTreeTemplate("sum<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=sum), - "avg": DataTreeTemplate("avg<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=avg), - "stddev": DataTreeTemplate("stddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=stddev), - "relstddev": DataTreeTemplate("relstddev<{0},{1}>", "{0}", combined_axis="{1}", args=["{0}"], func=relstddev), - - "_LR": DataTreeTemplate("_LR<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=linearRegression), - "LR_intercept": DataTreeTemplate("LR_intercept<{0}>", "intercept", args=["_LR<{0}>"], func=lambda lr: lr[0]), - "LR_slope": DataTreeTemplate("LR_slope<{0}>", "slope", args=["_LR<{0}>"], func=lambda lr: lr[1]), - "LR_correlationCoefficient": DataTreeTemplate("LR_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR<{0}>"], func=lambda lr: lr[2]), - "LR": DataTreeTemplate("LR<{0}>", "{0}", model_kind="{0}", args=["_LR<{0}>", "Problem size"], func=eval_linearRegression), - - "_LR_log": DataTreeTemplate("_LR_log<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=linearRegression_loglog), - "LR_log_intercept": DataTreeTemplate("LR_log_intercept<{0}>", "intercept", args=["_LR_log<{0}>"], func=lambda lr: lr[0]), - "LR_log_slope": DataTreeTemplate("LR_log_slope<{0}>", "slope", args=["_LR_log<{0}>"], func=lambda lr: lr[1]), - "LR_log_correlationCoefficient": DataTreeTemplate("LR_log_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR_log<{0}>"], func=lambda lr: lr[2]), - "LR_log": DataTreeTemplate("LR_log<{0}>", "{0}", model_kind="{0}", args=["_LR_log<{0}>", "Problem size"], func=eval_linearRegression_loglog), - - "_LR2": DataTreeTemplate("_LR2<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=segmented_linearRegression), - "LR2_intercept": DataTreeTemplate("LR2_intercept<{0}>", "intercept", args=["_LR2<{0}>"], func=lambda lr: lr[0]), - "LR2_slope": DataTreeTemplate("LR2_slope<{0}>", "slope", args=["_LR2<{0}>"], func=lambda lr: lr[1]), - "LR2_correlationCoefficient": DataTreeTemplate("LR2_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR2<{0}>"], func=lambda lr: lr[2]), - "LR2": DataTreeTemplate("LR2<{0}>", "{0}", model_kind="{0}", args=["_LR2<{0}>", "Problem size"], func=eval_segmented_linearRegression), - - "_LR2_log": DataTreeTemplate("_LR2_log<{0}>", "intercept, slope, correlation coefficient", combined_axis="run_size", args=["{0}", "Problem size"], func=segmented_linearRegression_loglog), - "LR2_log_intercept": DataTreeTemplate("LR2_log_intercept<{0}>", "intercept", args=["_LR2_log<{0}>"], func=lambda lr: lr[0]), - "LR2_log_slope": DataTreeTemplate("LR2_log_slope<{0}>", "slope", args=["_LR2_log<{0}>"], func=lambda lr: lr[1]), - "LR2_log_correlationCoefficient": DataTreeTemplate("LR2_log_correlationCoefficient<{0}>", "correlation coefficient", args=["_LR2_log<{0}>"], func=lambda lr: lr[2]), - "LR2_log": DataTreeTemplate("LR2_log<{0}>", "{0}", model_kind="{0}", args=["_LR2_log<{0}>", "Problem size"], func=eval_segmented_linearRegression_loglog), - - } - - def compute_data(kind): - if not kind in Data.kinds: - raise NameError("Unknown data kind {}".format(kind)) - - datatree = Data.kinds[kind] - if datatree.data: - return # already calculated - if not (datatree.model_kind and datatree.args and datatree.func): - raise NameError("Computing data is not supported for kind {0}".format(kind)) - - model_kind = datatree.model_kind - compute_args = datatree.args - compute_func = datatree.func - - if model_kind != kind: - Data.compute(model_kind) - - arg_datatrees = () - for arg_kind in compute_args: - # calculate data for arg_kind - Data.compute(arg_kind) - arg_datatree = Data.kinds[arg_kind] - arg_datatrees = arg_datatrees + (arg_datatree,) - - if (not model_kind in Data.kinds) or (not Data.kinds[model_kind].data): - raise NameError("Model data not available {0}, no args".format(model_kind)) - - datatree.makeData() - - use_lists = () - for arg_datatree in arg_datatrees: - use_list = datatree.missingAxes(arg_datatree.axes) - use_lists = use_lists + (use_list,) - - for axes_index in Data.kinds[model_kind]: - - if not datatree.check(axes_index): - args_val = () - for i in range(0, len(arg_datatrees)): - arg_datatree = arg_datatrees[i] - arg_val = arg_datatree.get(axes_index) - if use_lists[i]: - arg_val = [arg_val,] - args_val = args_val + (arg_val,) - datatree.set(axes_index, args_val) - else: - args_val = datatree.get(axes_index) - for i in range(0, len(arg_datatrees)): - if use_lists[i]: - arg_datatree = arg_datatrees[i] - arg_val = arg_datatree.get(axes_index) - args_val[i].append(arg_val) - - for axes_index, args_val in datatree.items(): - val = compute_func(*args_val) - datatree.set(axes_index, val) - - def compute_index(kind_preindex, index_args): - # print("compute_index", kind_preindex, index_args) - Data.compute(kind_preindex) - datatree_preindex = Data.kinds[kind_preindex] - - # extract axes and indices - partial_axis_index = {} - for index_str in index_args: - index_list = index_str.split("::") - if len(index_list) != 2: - raise NameError("Expected valid index ::: {}".format(index_str)) - axis_name = index_list[0].strip() - index_name = index_list[1].strip() - partial_axis_index.update(Data.get_axis_index(axis_name, index_name)) - - kind = "{}[{}]".format(kind_preindex, ",".join(index_args)) - - datatree = None - if kind in Data.kinds: - datatree = Data.kinds[kind] - if datatree.data: - return - else: - axes = Data.axes_difference(datatree_preindex.axes, partial_axis_index) - datatree = Data.DataTree(kind, datatree_preindex.label, axes=axes) - Data.kinds[kind] = datatree - - datatree.makeData() - - for axes_index, partial_axes_index, value in datatree_preindex.partial_match_items(partial_axis_index): - datatree.set(partial_axes_index, value) - - def compute_templated_data(kind_template, template_args): - # print("compute_templated_data", kind_template, template_args) - if kind_template in Data.kind_templates: - kind = Data.kind_templates[kind_template].getKind(template_args) - if not kind in Data.kinds: - # compute args first to ensure arg kinds exist - for arg_kind in Data.kind_templates[kind_template].getArgs(template_args): - Data.compute(arg_kind) - Data.kinds[kind] = Data.kind_templates[kind_template].makeDataTree(template_args) - Data.compute(kind) - else: - raise NameError("Unkown kind template {}".format(kind_template)) - - def kind_template_scan(kind): - # print("kind_template_scan", kind) - - kind_prefix = None - - template_args = [] - index_args = [] - - template_depth = 0 - index_depth = 0 - - arg_end_idx = -1 - - # look through string backwards to find indexing or templating - for i_forward in range(0, len(kind)): - i = len(kind) - i_forward - 1 - c = kind[i] - if c == ">" or c == "]": - if template_depth == 0 and index_depth == 0: - arg_end_idx = i - if c == ">": - template_depth += 1 - elif c == "]": - index_depth += 1 - elif c == ",": - if template_depth == 1 and index_depth == 0: - template_args.append(kind[i+1:arg_end_idx].strip()) - arg_end_idx = i - elif template_depth == 0 and index_depth == 1: - index_args.append(kind[i+1:arg_end_idx].strip()) - arg_end_idx = i - elif c == "<" or c == "[": - if template_depth == 1 and index_depth == 0: - template_args.append(kind[i+1:arg_end_idx].strip()) - arg_end_idx = -1 - elif template_depth == 0 and index_depth == 1: - index_args.append(kind[i+1:arg_end_idx].strip()) - arg_end_idx = -1 - if c == "<": - template_depth -= 1 - elif c == "[": - index_depth -= 1 - if template_depth == 0 and index_depth == 0: - if not kind_prefix: - kind_prefix = kind[:i].strip() - break - assert(arg_end_idx == -1) - assert(template_depth == 0) - assert(index_depth == 0) - assert(kind_prefix) - - # reverse lists - for i in range(0, len(template_args)//2): - i_rev = len(template_args) - i - 1 - template_args[i], template_args[i_rev] = template_args[i_rev], template_args[i] - for i in range(0, len(index_args)//2): - i_rev = len(index_args) - i - 1 - index_args[i], index_args[i_rev] = index_args[i_rev], index_args[i] - - return (kind_prefix, template_args, index_args) - - def compute(kind): - if kind in Data.kinds: - if not Data.kinds[kind].data: - Data.compute_data(kind) - else: - pass - else: - kind_template, template_args, index_args = Data.kind_template_scan(kind) - # print("Data.kind_template_scan", kind_template, template_args, index_args) - if template_args: - if kind_template in Data.kind_templates: - Data.compute_templated_data(kind_template, template_args) - else: - raise NameError("Unknown data kind template {}".format(kind)) - elif index_args: - Data.compute_index(kind_template, index_args) - else: - raise NameError("Unknown data kind {}".format(kind)) - +import data_classes_sweep_graph as dc # the following is edited specifically for Hatchet, but future make exclude pkgs generic # We exclude roundtrip and vis in import check since we're not in Hatchet interactive mode -def import_submodules(package, recursive=True): - """ Import all submodules of a module, recursively, including subpackages - - :param package: package (name or actual module) - :type package: str | module - :rtype: dict[str, types.ModuleType] - """ - if isinstance(package, str): - package = importlib.import_module(package) - results = {} - for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): - full_name = package.__name__ + '.' + name - chk_name = full_name.split('.') - if not 'roundtrip' in chk_name and not 'vis' in chk_name: - results[full_name] = importlib.import_module(full_name) - if recursive and is_pkg: - results.update(import_submodules(full_name)) - #print(results) - return results - -def check_hatchet_import(): - reader_spec = importlib.util.find_spec("hatchet") - reader_found = reader_spec is not None - depends_found = False - if reader_found: - print("Hatchet Reader found") - try: - cr = importlib.import_module("hatchet") - import_submodules(cr) - depends_found = True - except: - print("Can't load Hatchet") - traceback.print_exc() - else: - print("Hatchet not found") - return reader_found and depends_found - def get_size_from_dir_name(sweep_subdir_name): # print(sweep_subdir_name) @@ -1370,39 +39,39 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde for c in range(1, len(row)): info_kind = row[c].strip() #print(c, info_kind) - if not info_kind in Data.kinds: + if not info_kind in dc.Data.kinds: # add new kind to global data print("Unknown kernel info {0}".format(info_kind)) - Data.kinds[info_kind] = Data.DataTree(info_kind, "info", Data.info_axes) + dc.Data.kinds[info_kind] = dc.Data.DataTree(info_kind, "info", dc.Data.info_axes) if info_kind in c_to_info_kinds: print("Repeated kernel info {0}".format(info_kind)) sys.exit(1) - if not Data.kinds[info_kind].data: + if not dc.Data.kinds[info_kind].data: #print("# add data to kind:" + info_kind) - Data.kinds[info_kind].makeData() - if not sweep_index in Data.kinds[info_kind].data.data: + dc.Data.kinds[info_kind].makeData() + if not sweep_index in dc.Data.kinds[info_kind].data.data: #print("# add new sweep to global data") - Data.kinds[info_kind].data.data[sweep_index] = {} - if run_size_index in Data.kinds[info_kind].data.data[sweep_index]: - sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + dc.Data.kinds[info_kind].data.data[sweep_index] = {} + if run_size_index in dc.Data.kinds[info_kind].data.data[sweep_index]: + sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) print("Repeated kernel size {0} in {1}".format(sweep_dir_name, run_size_name)) sys.exit(1) else: #print("# add new size to global data") - Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} + dc.Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} # make map of columns to names c_to_info_kinds[c] = info_kind c_to_info_kinds[info_kind] = c elif not ignore: kernel_index = -1 kernel_name = row[0].strip() - if kernel_name in Data.kernels: - kernel_index = Data.kernels[kernel_name] - elif (len(Data.include_kernels) == 0 or kernel_name in Data.include_kernels) and (not kernel_name in Data.exclude_kernels): + if kernel_name in dc.Data.kernels: + kernel_index = dc.Data.kernels[kernel_name] + elif (len(dc.Data.include_kernels) == 0 or kernel_name in dc.Data.include_kernels) and (not kernel_name in dc.Data.exclude_kernels): # add kernel to global list - Data.add_kernel(kernel_name) - kernel_index = Data.kernels[kernel_name] + dc.Data.add_kernel(kernel_name) + kernel_index = dc.Data.kernels[kernel_name] else: continue # skip this kernel @@ -1413,11 +82,11 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde val = int(row[c].strip()) #print(kernel_index, kernel_name, info_kind, val) - axes_index = { Data.axes["sweep_dir_name"]: sweep_index, - Data.axes["run_size"]: run_size_index, - Data.axes["kernel_index"]: kernel_index, } + axes_index = { dc.Data.axes["sweep_dir_name"]: sweep_index, + dc.Data.axes["run_size"]: run_size_index, + dc.Data.axes["kernel_index"]: kernel_index, } - Data.kinds[info_kind].set(axes_index, val) + dc.Data.kinds[info_kind].set(axes_index, val) except ValueError: print('read_runinfo_file ValueError') pass # could not convert data to int @@ -1447,60 +116,55 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): # kernel_tuning_name is kernel.tuning in Caliper kernel_tuning_name = gf.dataframe.loc[nn, 'name'] kernel_name = kernel_tuning_name.split('.')[0] - if (len(Data.include_kernels) == 0 or kernel_name in Data.include_kernels) and (not kernel_name in Data.exclude_kernels): + if (len(dc.Data.include_kernels) == 0 or kernel_name in dc.Data.include_kernels) and (not kernel_name in dc.Data.exclude_kernels): candidate_list.append(kernel_name) kernel_list = list(set(candidate_list) | set(kernel_list)) for kernel_name in kernel_list: - if kernel_name not in Data.kernels: - Data.add_kernel(kernel_name) - kernel_index = Data.kernels[kernel_name] + if kernel_name not in dc.Data.kernels: + dc.Data.add_kernel(kernel_name) + kernel_index = dc.Data.kernels[kernel_name] metadata = eval(gf.metadata[kernel_name]) for info_kind, info_value in metadata.items(): - if not info_kind in Data.kinds: - Data.kinds[info_kind] = Data.DataTree(info_kind, "info", Data.info_axes) - if not Data.kinds[info_kind].data: - Data.kinds[info_kind].makeData() - if not sweep_index in Data.kinds[info_kind].data.data: - Data.kinds[info_kind].data.data[sweep_index] = {} - if not run_size_index in Data.kinds[info_kind].data.data[sweep_index]: - Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} + if not info_kind in dc.Data.kinds: + dc.Data.kinds[info_kind] = dc.Data.DataTree(info_kind, "info", dc.Data.info_axes) + if not dc.Data.kinds[info_kind].data: + dc.Data.kinds[info_kind].makeData() + if not sweep_index in dc.Data.kinds[info_kind].data.data: + dc.Data.kinds[info_kind].data.data[sweep_index] = {} + if not run_size_index in dc.Data.kinds[info_kind].data.data[sweep_index]: + dc.Data.kinds[info_kind].data.data[sweep_index][run_size_index] = {} try: val = int(info_value) - axes_index = { Data.axes["sweep_dir_name"]: sweep_index, - Data.axes["run_size"]: run_size_index, - Data.axes["kernel_index"]: kernel_index, } - Data.kinds[info_kind].set(axes_index, val) - sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) - kernel_index_name = Data.get_index_name(Data.axes["kernel_index"], kernel_index) + axes_index = { dc.Data.axes["sweep_dir_name"]: sweep_index, + dc.Data.axes["run_size"]: run_size_index, + dc.Data.axes["kernel_index"]: kernel_index, } + dc.Data.kinds[info_kind].set(axes_index, val) + sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) + kernel_index_name = dc.Data.get_index_name(dc.Data.axes["kernel_index"], kernel_index) #print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) except ValueError: print("read_caliper_runinfo_file ValueError") pass # could not convert data to int - - - - - def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index): #print(sweep_index, sweep_subdir_timing_file_path, run_size_index) with open(sweep_subdir_timing_file_path, "r") as file: file_reader = csv.reader(file, delimiter=',') - data_kind = g_timing_file_kind - if not data_kind in Data.kinds: + data_kind = dc.g_timing_file_kind + if not data_kind in dc.Data.kinds: raise NameError("Unknown kind {}".format(data_kind)) - if not Data.kinds[data_kind].data: - Data.kinds[data_kind].makeData() - if not sweep_index in Data.kinds[data_kind].data.data: - Data.kinds[data_kind].data.data[sweep_index] = {} - if not run_size_index in Data.kinds[data_kind].data.data[sweep_index]: - Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} + if not dc.Data.kinds[data_kind].data: + dc.Data.kinds[data_kind].makeData() + if not sweep_index in dc.Data.kinds[data_kind].data.data: + dc.Data.kinds[data_kind].data.data[sweep_index] = {} + if not run_size_index in dc.Data.kinds[data_kind].data.data[sweep_index]: + dc.Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} else: - sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + sweep_dir_name = dc.Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(Data.axes["run_size"], run_size_index) raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) c_to_variant_index = {} @@ -1512,11 +176,11 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) for c in range(1, len(row)): variant_name = row[c].strip() variant_index = -1 - if variant_name in Data.variants: - variant_index = Data.variants[variant_name] - elif (len(Data.include_variants) == 0 or variant_name in Data.include_variants) and (not variant_name in Data.exclude_variants): - Data.add_variant(variant_name) - variant_index = Data.variants[variant_name] + if variant_name in dc.Data.variants: + variant_index = dc.Data.variants[variant_name] + elif (len(dc.Data.include_variants) == 0 or variant_name in dc.Data.include_variants) and (not variant_name in dc.Data.exclude_variants): + dc.Data.add_variant(variant_name) + variant_index = dc.Data.variants[variant_name] else: variant_index = -1 c_to_variant_index[c] = variant_index @@ -1524,12 +188,11 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) elif len(c_to_tuning_index) == 0: for c in range(1, len(row)): tuning_name = row[c].strip() - tuning_index = None - if tuning_name in Data.tunings: - tuning_index = Data.tunings[tuning_name] - elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): - Data.add_tuning(tuning_name) - tuning_index = Data.tunings[tuning_name] + if tuning_name in dc.Data.tunings: + tuning_index = dc.Data.tunings[tuning_name] + elif (len(dc.Data.include_tunings) == 0 or tuning_name in dc.Data.include_tunings) and (not tuning_name in dc.Data.exclude_tunings): + dc.Data.add_tuning(tuning_name) + tuning_index = dc.Data.tunings[tuning_name] else: tuning_index = -1 c_to_tuning_index[c] = tuning_index @@ -1540,8 +203,8 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) elif len(c_to_variant_index) > 0 and len(c_to_tuning_index) > 0: kernel_index = -1 kernel_name = row[0].strip() - if kernel_name in Data.kernels: - kernel_index = Data.kernels[kernel_name] + if kernel_name in dc.Data.kernels: + kernel_index = dc.Data.kernels[kernel_name] else: continue # skip kernel @@ -1551,17 +214,17 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) if variant_index < 0 or tuning_index < 0: continue # ignore data - axes_index = { Data.axes["sweep_dir_name"]: sweep_index, - Data.axes["run_size"]: run_size_index, - Data.axes["kernel_index"]: kernel_index, - Data.axes["variant_index"]: variant_index, - Data.axes["tuning_index"]: tuning_index, } - print(axes_index) - print(Data.axes) + axes_index = { dc.Data.axes["sweep_dir_name"]: sweep_index, + dc.Data.axes["run_size"]: run_size_index, + dc.Data.axes["kernel_index"]: kernel_index, + dc.Data.axes["variant_index"]: variant_index, + dc.Data.axes["tuning_index"]: tuning_index, } + #print(axes_index) + #print(dc.Data.axes) try: val = float(row[c].strip()) #print(kernel_index, kernel_name, variant_index, tuning_index, data_kind, val) - Data.kinds[data_kind].set(axes_index, val) + dc.Data.kinds[data_kind].set(axes_index, val) except ValueError: # we usually encounter this for Not run entry #print(row[c].strip()) @@ -1573,18 +236,18 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): kernel_list = [] candidate_list = [] - data_kind = g_timing_file_kind - if not data_kind in Data.kinds: + data_kind = dc.g_timing_file_kind + if not data_kind in dc.Data.kinds: raise NameError("Unknown kind {}".format(data_kind)) - if not Data.kinds[data_kind].data: - Data.kinds[data_kind].makeData() - if not sweep_index in Data.kinds[data_kind].data.data: - Data.kinds[data_kind].data.data[sweep_index] = {} - if not run_size_index in Data.kinds[data_kind].data.data[sweep_index]: - Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} + if not dc.Data.kinds[data_kind].data: + dc.Data.kinds[data_kind].makeData() + if not sweep_index in dc.Data.kinds[data_kind].data.data: + dc.Data.kinds[data_kind].data.data[sweep_index] = {} + if not run_size_index in dc.Data.kinds[data_kind].data.data[sweep_index]: + dc.Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} else: - sweep_dir_name = Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = Data.get_index_name(Data.axes["run_size"], run_size_index) + sweep_dir_name = dc.Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(Data.axes["run_size"], run_size_index) raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) #print("run size:" + Data.get_index_name(Data.axes["run_size"], run_size_index)) @@ -1600,12 +263,14 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): #take care of variant in this graphframe variant_name = gf.metadata['variant'] - variant_index = -1 - if variant_name in Data.variants: - variant_index = Data.variants[variant_name] - elif (len(Data.include_variants) == 0 or variant_name in Data.include_variants) and (not variant_name in Data.exclude_variants): - Data.add_variant(variant_name) - variant_index = Data.variants[variant_name] + + if variant_name in dc.Data.variants: + variant_index = dc.Data.variants[variant_name] + elif (len(dc.Data.include_variants) == 0 or variant_name in dc.Data.include_variants) and (not variant_name in dc.Data.exclude_variants): + dc.Data.add_variant(variant_name) + variant_index = dc.Data.variants[variant_name] + else: + variant_index = -1 # extract kernel list kernel_index = -1 @@ -1616,7 +281,7 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): #kernel_tuning_name is kernel.tuning in Caliper kernel_tuning_name = gf.dataframe.loc[nn,'name'] kernel_name = kernel_tuning_name.split('.')[0] - if kernel_name in Data.kernels: + if kernel_name in dc.Data.kernels: kernel_tuning_name = gf.dataframe.loc[nn,'name'] candidate_tuning_list.append(kernel_tuning_name) candidate_list.append(kernel_name) @@ -1629,41 +294,43 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): kernel_name = kernel.split('.')[0] tuning_name = kernel.split('.')[1] - if kernel_name in Data.kernels: - kernel_index = Data.kernels[kernel_name] + if kernel_name in dc.Data.kernels: + kernel_index = dc.Data.kernels[kernel_name] else: continue # skip kernel - tuning_index = None - if tuning_name in Data.tunings: - tuning_index = Data.tunings[tuning_name] - elif (len(Data.include_tunings) == 0 or tuning_name in Data.include_tunings) and (not tuning_name in Data.exclude_tunings): - Data.add_tuning(tuning_name) - tuning_index = Data.tunings[tuning_name] + if tuning_name in dc.Data.tunings: + tuning_index = dc.Data.tunings[tuning_name] + elif (len(dc.Data.include_tunings) == 0 or tuning_name in dc.Data.include_tunings) and (not tuning_name in dc.Data.exclude_tunings): + dc.Data.add_tuning(tuning_name) + tuning_index = dc.Data.tunings[tuning_name] else: tuning_index = -1 - - axes_index = { Data.axes["sweep_dir_name"]: sweep_index, - Data.axes["run_size"]: run_size_index, - Data.axes["kernel_index"]: kernel_index, - Data.axes["variant_index"]: variant_index, - Data.axes["tuning_index"]: tuning_index, } + + if variant_index < 0 or tuning_index <0: + continue # skip this variant or tuning + + axes_index = { dc.Data.axes["sweep_dir_name"]: sweep_index, + dc.Data.axes["run_size"]: run_size_index, + dc.Data.axes["kernel_index"]: kernel_index, + dc.Data.axes["variant_index"]: variant_index, + dc.Data.axes["tuning_index"]: tuning_index, } val = 0.0 #print(metric) try: val = float(gf.dataframe.loc[gf.dataframe['name']==kernel].iloc[0][metric]) #print(variant_name, kernel_name, tuning_name, data_kind, val) - Data.kinds[data_kind].set(axes_index, val) + dc.Data.kinds[data_kind].set(axes_index, val) except ValueError: print('ValueError') pass # could not convert data to float def get_plot_data(kind, partial_axes_index): - if not kind in Data.kinds: + if not kind in dc.Data.kinds: raise NameError("Unknown kind {}".format(kind)) - kind_data = Data.kinds[kind] + kind_data = dc.Data.kinds[kind] assert(kind_data.hasAxes(partial_axes_index)) @@ -1678,13 +345,13 @@ def get_plot_data(kind, partial_axes_index): def get_plot_data2(xkind, ykind, partial_axes_index): - if not ykind in Data.kinds: + if not ykind in dc.Data.kinds: raise NameError("Unknown kind {}".format(ykind)) - if not xkind in Data.kinds: + if not xkind in dc.Data.kinds: raise NameError("Unknown kind {}".format(xkind)) - ykind_data = Data.kinds[ykind] - xkind_data = Data.kinds[xkind] + ykind_data = dc.Data.kinds[ykind] + xkind_data = dc.Data.kinds[xkind] assert(ykind_data.hasAxes(partial_axes_index)) assert(xkind_data.hasAxes(partial_axes_index)) @@ -1718,8 +385,8 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk print("plotting {} {} {} {}".format(outputfile_name, split_axis_name, xaxis_name, xkind, ykinds)) assert(split_axis_name == "kernel_index") - for split_index in range(0, Data.num_kernels): - split_name = Data.kernels[split_index] + for split_index in range(0, dc.Data.num_kernels): + split_name = dc.Data.kernels[split_index] lloc = g_lloc @@ -1727,7 +394,7 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk yscale = g_yscale or "log" ylim = g_ylim - xlabel = g_xlabel or Data.kinds[xkind].label + xlabel = g_xlabel or dc.Data.kinds[xkind].label xscale = g_xscale or "log" xlim = g_xlim @@ -1744,18 +411,18 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk gname = "{}\n{}".format(gname, ykind) else: gname = "{}".format(ykind) - if not ykind in Data.kinds: + if not ykind in dc.Data.kinds: raise NameError("Unknown kind {}".format(ykind)) if not ylabel: - ylabel = Data.kinds[ykind].label - elif (not g_ylabel) and ylabel != Data.kinds[ykind].label: - raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) + ylabel = dc.Data.kinds[ykind].label + elif (not g_ylabel) and ylabel != dc.Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([dc.Data.kinds[_ykind].label for _ykind in ykinds])) assert(xaxis_name == "run_size") - for x_index in range(0, Data.num_run_sizes): + for x_index in range(0, dc.Data.num_run_sizes): - axes_index = { Data.axes[split_axis_name]: split_index, - Data.axes[xaxis_name]: x_index } + axes_index = { dc.Data.axes[split_axis_name]: split_index, + dc.Data.axes[xaxis_name]: x_index } data_list = get_plot_data2(xkind, ykind, axes_index) @@ -1765,19 +432,19 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk if not yname in split_data["ydata"]: ycolor = (0.0, 0.0, 0.0, 1.0) - if Data.axes["variant_index"] in data["axes_index"]: - variant_index = data["axes_index"][Data.axes["variant_index"]] - ycolor = Data.variant_colors[variant_index] + if dc.Data.axes["variant_index"] in data["axes_index"]: + variant_index = data["axes_index"][dc.Data.axes["variant_index"]] + ycolor = dc.Data.variant_colors[variant_index] ymarker = "" - if Data.axes["sweep_dir_name"] in data["axes_index"]: - sweep_index = data["axes_index"][Data.axes["sweep_dir_name"]] - ymarker = Data.sweep_markers[sweep_index] + if dc.Data.axes["sweep_dir_name"] in data["axes_index"]: + sweep_index = data["axes_index"][dc.Data.axes["sweep_dir_name"]] + ymarker = dc.Data.sweep_markers[sweep_index] yformat = "{}-".format(ymarker) - if Data.axes["tuning_index"] in data["axes_index"]: - tuning_index = data["axes_index"][Data.axes["tuning_index"]] - yformat = "{}{}".format(ymarker, Data.tuning_formats[tuning_index]) + if dc.Data.axes["tuning_index"] in data["axes_index"]: + tuning_index = data["axes_index"][dc.Data.axes["tuning_index"]] + yformat = "{}{}".format(ymarker, dc.Data.tuning_formats[tuning_index]) split_data["ynames"].append(yname) split_data["ycolor"][yname] = ycolor @@ -1803,15 +470,15 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk ydata = split_data["ydata"][yname] xdata = split_data["xdata"][yname] - if yname in g_series_reformat and "format" in g_series_reformat[yname]: - yformat = g_series_reformat[yname]["format"] - if yname in g_series_reformat and "color" in g_series_reformat[yname]: - ycolor = g_series_reformat[yname]["color"] + if yname in dc.g_series_reformat and "format" in dc.g_series_reformat[yname]: + yformat = dc.g_series_reformat[yname]["format"] + if yname in dc.g_series_reformat and "color" in dc.g_series_reformat[yname]: + ycolor = dc.g_series_reformat[yname]["color"] print(" series \"{}\" format \"{}\" color \"{}\"".format(yname, yformat, ycolor)) if len(ykinds) > 1: - yname = "{} {}".format(Data.kinds[ykind].kind, yname) + yname = "{} {}".format(dc.Data.kinds[ykind].kind, yname) np_xdata = np.array(xdata) xind = np_xdata.argsort() np_xdata = np_xdata[xind[0:]] @@ -1835,7 +502,7 @@ def plot_data_split_line(outputfile_name, split_axis_name, xaxis_name, xkind, yk #print(plt.rcParams.keys()) plt.title(gname) handles, labels = plt.gca().get_legend_handles_labels() - legend_order = set_legend_order(labels) + legend_order = dc.set_legend_order(labels) plt.legend([handles[idx] for idx in legend_order], [labels[idx] for idx in legend_order],loc=lloc) plt.grid(True) @@ -1864,12 +531,12 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): gname = "{}\n{}".format(gname, ykind) else: gname = "{}".format(ykind) - if not ykind in Data.kinds: + if not ykind in dc.Data.kinds: raise NameError("Unknown kind {}".format(ykind)) if not ylabel: - ylabel = Data.kinds[ykind].label - elif (not g_ylabel) and ylabel != Data.kinds[ykind].label: - raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in ykinds])) + ylabel = dc.Data.kinds[ykind].label + elif (not g_ylabel) and ylabel != dc.Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([dc.Data.kinds[_ykind].label for _ykind in ykinds])) kernel_data = { "kernel_names": [], "kernel_centers": [], @@ -1877,8 +544,8 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): "ycolor": {}, "ydata": {}, } - for kernel_index in range(0, Data.num_kernels): - kernel_name = Data.kernels[kernel_index] + for kernel_index in range(0, dc.Data.num_kernels): + kernel_name = dc.Data.kernels[kernel_index] kernel_data["kernel_names"].append(kernel_name) kernel_data["kernel_centers"].append(kernel_index) @@ -1895,12 +562,12 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): yname = ydata["name"] if len(ykinds) > 1: - yname = "{} {}".format(Data.kinds[ykind].kind, yname) + yname = "{} {}".format(dc.Data.kinds[ykind].kind, yname) ycolor = (0.0, 0.0, 0.0, 1.0) - if Data.axes["variant_index"] in ydata["axes_index"]: - variant_index = ydata["axes_index"][Data.axes["variant_index"]] - ycolor = Data.variant_colors[variant_index] + if dc.Data.axes["variant_index"] in ydata["axes_index"]: + variant_index = ydata["axes_index"][dc.Data.axes["variant_index"]] + ycolor = dc.Data.variant_colors[variant_index] if not yname in kernel_data["ynames"]: kernel_data["ynames"][yname] = len(kernel_data["ynames"]) @@ -1930,8 +597,8 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): ycolor = kernel_data["ycolor"][yname] yaxis = kernel_data["ydata"][yname] - if yname in g_series_reformat and "color" in g_series_reformat[yname]: - ycolor = g_series_reformat[yname]["color"] + if yname in dc.g_series_reformat and "color" in dc.g_series_reformat[yname]: + ycolor = dc.g_series_reformat[yname]["color"] print(" series \"{}\" color \"{}\"".format(yname, ycolor)) @@ -1996,21 +663,21 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): gname = "{}\n{}".format(gname, ykind) else: gname = "{}".format(ykind) - if not ykind in Data.kinds: + if not ykind in dc.Data.kinds: raise NameError("Unknown kind {}".format(ykind)) if not xlabel: - xlabel = Data.kinds[ykind].label - elif (not g_xlabel) and xlabel != Data.kinds[ykind].label: - raise NameError("kinds use different labels {}".format([Data.kinds[_ykind].label for _ykind in hkinds])) + xlabel = dc.Data.kinds[ykind].label + elif (not g_xlabel) and xlabel != dc.Data.kinds[ykind].label: + raise NameError("kinds use different labels {}".format([dc.Data.kinds[_ykind].label for _ykind in hkinds])) if not hbin_size: hdata_all = [] - for kernel_index in range(0, Data.num_kernels): - kernel_name = Data.kernels[kernel_index] + for kernel_index in range(0, dc.Data.num_kernels): + kernel_name = dc.Data.kernels[kernel_index] - axes_index = { Data.axes["kernel_index"]: kernel_index } + axes_index = { dc.Data.axes["kernel_index"]: kernel_index } for ykind in hkinds: @@ -2043,10 +710,10 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): "hcolor": {}, "hbins": {}, } - for kernel_index in range(0, Data.num_kernels): - kernel_name = Data.kernels[kernel_index] + for kernel_index in range(0, dc.Data.num_kernels): + kernel_name = dc.Data.kernels[kernel_index] - axes_index = { Data.axes["kernel_index"]: kernel_index } + axes_index = { dc.Data.axes["kernel_index"]: kernel_index } for ykind in hkinds: @@ -2058,12 +725,12 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): hname = hdata["name"] if len(hkinds) > 1: - hname = "{} {}".format(Data.kinds[ykind].kind, hname) + hname = "{} {}".format(dc.Data.kinds[ykind].kind, hname) hcolor = (0.0, 0.0, 0.0, 1.0) if Data.axes["variant_index"] in hdata["axes_index"]: variant_index = hdata["axes_index"][Data.axes["variant_index"]] - hcolor = Data.variant_colors[variant_index] + hcolor = dc.Data.variant_colors[variant_index] if not hname in kernel_data["hnames"]: kernel_data["hnames"][hname] = len(kernel_data["hnames"]) @@ -2102,8 +769,8 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): hcolor = kernel_data["hcolor"][hname] hbins = kernel_data["hbins"][hname] - if hname in g_series_reformat and "color" in g_series_reformat[hname]: - hcolor = g_series_reformat[hname]["color"] + if hname in dc.g_series_reformat and "color" in dc.g_series_reformat[hname]: + hcolor = dc.g_series_reformat[hname]["color"] print(" series \"{}\" color \"{}\" offset {}".format(hname, hcolor, xoffset)) @@ -2139,16 +806,14 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): def main(argv): - sweep_dir_paths = [] outputfile = "graph" - help_string = "sweep_graph.py -o " - runinfo_filename = g_runinfo_filename - timing_filename = g_timing_filename + runinfo_filename = dc.g_runinfo_filename + timing_filename = dc.g_timing_filename print_kinds = [] split_line_graph_kind_lists = [] bar_graph_kind_lists = [] histogram_graph_kind_lists = [] - can_process_caliper = False + # set a few plot params - see rcParams.keys() for list params = {'xtick.labelsize':'small', @@ -2158,226 +823,19 @@ def main(argv): 'legend.fontsize':'x-small'} plt.rcParams.update(params) - """ - i = 0 - while i < len(argv): - opt = argv[i] - if len(opt) == 0: - print(help_string) - sys.exit(2) - elif opt[0] == "-": - handle_num = None - handle_arg = None - # no arg options - if opt in ("-h", "--help"): - print(help_string) - sys.exit() - if opt in ("-pc", "--process-caliper"): - print("Request process Caliper") - handle_num = -1 - can_process_caliper = check_hatchet_import() - if can_process_caliper: - cr = importlib.import_module("hatchet") - print("Caliper processing using hatchet:" + os.path.dirname(cr.__file__)) - - # single arg options - if opt in ("-o", "--output"): - handle_num = 1 - def fo(arg): - nonlocal outputfile - outputfile = arg - handle_arg = fo - elif opt in ("-gname", "--graph-name"): - handle_num = 1 - def gn(arg): - global g_gname - g_gname = arg - handle_arg = gn - elif opt in ("-lloc", "--legend-location"): - handle_num = 1 - def gll(arg): - global g_lloc - atup = make_tuple_str(arg) - if not atup: - g_lloc = arg - elif len(atup) == 2: - g_lloc = (float(atup[0]), float(atup[1]),) - else: - print("Expected a string or tuple of 2 numbers: {}".format(arg)) - sys.exit(2) - handle_arg = gll - elif opt in ("-ylabel", "--y-axis-label"): - handle_num = 1 - def yl(arg): - global g_ylabel - g_ylabel = arg - handle_arg = yl - elif opt in ("-yscale", "--y-axis-scale"): - handle_num = 1 - def ys(arg): - global g_yscale - g_yscale = arg - handle_arg = ys - elif opt in ("-xlabel", "--x-axis-label"): - handle_num = 1 - def xl(arg): - global g_xlabel - g_xlabel = arg - handle_arg = xl - elif opt in ("-xscale", "--x-axis-scale"): - handle_num = 1 - def xs(arg): - global g_xscale - g_xscale = arg - handle_arg = xs - elif opt in ("-hbin", "--histogram-bin-size"): - handle_num = 1 - def hbin(arg): - global g_hbin_size - g_hbin_size = float(arg) - handle_arg = hbin - # two arg options - elif opt in ("-ylim", "--y-axis-limit"): - handle_num = 2 - def yl(ymin, ymax): - global g_ylim - g_ylim = (float(ymin), float(ymax)) - handle_arg = yl - elif opt in ("-xlim", "--x-axis-limit"): - handle_num = 2 - def xl(xmin, xmax): - global g_xlim - g_xlim = (float(xmin), float(xmax)) - handle_arg = xl - elif opt in ("--recolor"): - handle_num = 2 - def recolor(series_name, color_str): - if not series_name in g_series_reformat: - g_series_reformat[series_name] = {} - g_series_reformat[series_name]["color"] = make_color_tuple_str(color_str) - handle_arg = recolor - elif opt in ("--reformat"): - handle_num = 2 - def reformat(series_name, format_str): - if not series_name in g_series_reformat: - g_series_reformat[series_name] = {} - g_series_reformat[series_name]["format"] = format_str - handle_arg = reformat - # multi arg options - elif opt in ("-p", "--print"): - handle_num = -1 - def p(arg): - print_kinds.append(arg) - handle_arg = p - elif opt in ("-slg", "--split-line-graphs"): - handle_num = -1 - split_line_graph_kind_lists.append([]) - def fslg(arg): - split_line_graph_kind_lists[len(split_line_graph_kind_lists)-1].append(arg) - handle_arg = fslg - elif opt in ("-bg", "--bar-graph"): - handle_num = -1 - bar_graph_kind_lists.append([]) - def fbg(arg): - bar_graph_kind_lists[len(bar_graph_kind_lists)-1].append(arg) - handle_arg = fbg - elif opt in ("-hg", "--histogram-graph"): - handle_num = -1 - histogram_graph_kind_lists.append([]) - def fhg(arg): - histogram_graph_kind_lists[len(histogram_graph_kind_lists)-1].append(arg) - handle_arg = fhg - elif opt in ("-kg", "--kernel-groups"): - handle_num = -1 - def fkg(arg): - Data.include_kernel_groups[arg] = arg - handle_arg = fkg - elif opt in ("-ekg", "--exclude-kernel-groups"): - handle_num = -1 - def fekg(arg): - Data.exclude_kernel_groups[arg] = arg - handle_arg = fekg - elif opt in ("-k", "--kernels"): - handle_num = -1 - def fk(arg): - if check_kernel_name(arg): - Data.include_kernels[arg] = arg - else: - print("invalid include kernels argument: " + arg) - sys.exit(1) - handle_arg = fk - elif opt in ("-ek", "--exclude-kernels"): - handle_num = -1 - def fek(arg): - if check_kernel_name(arg): - Data.exclude_kernels[arg] = arg - else: - print("invalid exclude kernels argument: " + arg) - sys.exit(1) - handle_arg = fek - elif opt in ("-v", "--variants"): - handle_num = -1 - def fv(arg): - Data.include_variants[arg] = arg - handle_arg = fv - elif opt in ("-ev", "--exclude-variants"): - handle_num = -1 - def fev(arg): - Data.exclude_variants[arg] = arg - handle_arg = fev - elif opt in ("-t", "--tunings"): - handle_num = -1 - def ft(arg): - Data.include_tunings[arg] = arg - handle_arg = ft - elif opt in ("-et", "--exclude-tunings"): - handle_num = -1 - def fet(arg): - Data.exclude_tunings[arg] = arg - handle_arg = fet - elif opt in ("-es", "--exclude-sweeps"): - handle_num = -1 - def fes(arg): - Data.exclude_sweeps[arg] = arg - handle_arg = fes - - # error unknown opt - if handle_num == None: - print(help_string) - sys.exit(2) - - # fixed num args, handled together - elif handle_num > 0: - if not i+handle_num < len(argv): - print("Missing option to {}".format(opt)) - sys.exit(2) - args = [] - for h in range(1, handle_num+1): - arg = argv[i+h] - if arg[0] == "-": - print("Missing option to {}".format(opt)) - sys.exit(2) - args.append(arg) - handle_arg(*args) - i += handle_num - - # unfixed num args, handled one-by-one - elif handle_num < 0: - while i+1 < len(argv): - arg = argv[i+1] - if arg[0] == "-": - break - handle_arg(arg) - i += 1 - - else: - sweep_dir_paths.append(opt) - i += 1 -""" + parser = argparse_sweep_graph.process_argparse() args, unknown = parser.parse_args(argv) print(args) - + + cr = None + # argparse module can do a Hatchet Caliper Reader check for arg --caliper + # arg.caliper is False by default + can_process_caliper = args.caliper + # cr is set to importlib hatchet + if can_process_caliper: + cr = args.cr + #kernels section parse_set = set() if args.kernels != None: @@ -2386,7 +844,7 @@ def fes(arg): parse_set.update(set(args.kernels_close)) for k in list(parse_set): print("including kernel:" + str(k)) - Data.include_kernels[k] = k + dc.Data.include_kernels[k] = k parse_set = set() if args.exclude_kernels != None: @@ -2395,7 +853,7 @@ def fes(arg): parse_set.update(set(args.exclude_kernels_close)) for k in list(parse_set): print("excluding kernel:" + str(k)) - Data.exclude_kernels[k] = k + dc.Data.exclude_kernels[k] = k # variant section parse_set = set() @@ -2405,7 +863,7 @@ def fes(arg): parse_set.update(set(args.variants_close)) for k in list(parse_set): print("including variant:" + str(k)) - Data.include_variants[k] = k + dc.Data.include_variants[k] = k parse_set = set() if args.exclude_variants != None: @@ -2414,7 +872,7 @@ def fes(arg): parse_set.update(set(args.exclude_variants_close)) for k in list(parse_set): print("excluding variant:" + str(k)) - Data.exclude_variants[k] = k + dc.Data.exclude_variants[k] = k #tuning section parse_set = set() @@ -2424,7 +882,7 @@ def fes(arg): parse_set.update(set(args.tunings_close)) for k in list(parse_set): print("including tuning:" + str(k)) - Data.include_tunings[k] = k + dc.Data.include_tunings[k] = k parse_set = set() if args.exclude_tunings != None: @@ -2433,7 +891,7 @@ def fes(arg): parse_set.update(set(args.exclude_tunings_close)) for k in list(parse_set): print("excluding tuning:" + str(k)) - Data.exclude_tunings[k] = k + dc.Data.exclude_tunings[k] = k sweep_dir_paths = args.prescan["directories"] @@ -2471,26 +929,43 @@ def fes(arg): if args.x_axis_limit != None: global g_xlim g_xlim = (float(args.x_axis_limit[0]), float(args.x_axis_limit[1])) - """ - for kernel_group in Data.include_kernel_groups.keys(): - if kernel_group in g_known_kernel_groups: - for kernel_name in g_known_kernel_groups[kernel_group]["kernels"]: - Data.include_kernels[kernel_name] = kernel_name + + if args.kernel_groups != None: + for g in args.kernel_groups: + dc.Data.include_kernel_groups[g] = g + + for kernel_group in dc.Data.include_kernel_groups.keys(): + if kernel_group in dc.g_known_kernel_groups: + print("include kernel group:"+str(kernel_group)) + for kernel_name in dc.g_known_kernel_groups[kernel_group]["kernels"]: + if kernel_name in args.prescan["kernels_union"]: + dc.Data.include_kernels[kernel_name] = kernel_name else: print("Unknown kernel group {}".format(kernel_group)) sys.exit(2) - - for kernel_group in Data.exclude_kernel_groups.keys(): - if kernel_group in g_known_kernel_groups: - for kernel_name in g_known_kernel_groups[kernel_group]["kernels"]: - Data.exclude_kernels[kernel_name] = kernel_name + + if args.exclude_kernel_groups != None: + for g in args.exclude_kernel_groups: + dc.Data.exclude_kernel_groups[g] = g + + for kernel_group in dc.Data.exclude_kernel_groups.keys(): + if kernel_group in dc.g_known_kernel_groups: + print("exclude kernel group:"+str(kernel_group)) + for kernel_name in dc.g_known_kernel_groups[kernel_group]["kernels"]: + if kernel_name in args.prescan["kernels_union"]: + dc.Data.exclude_kernels[kernel_name] = kernel_name else: print("Unknown kernel group {}".format(kernel_group)) sys.exit(2) - """ + + compact_flag = True + if args.print_compact != None: + for aa in args.print_compact: + print_kinds.append(aa) - if args.print != None: - for aa in args.print: + if args.print_expanded != None: + compact_flag = False + for aa in args.print_expanded: print_kinds.append(aa) if args.split_line_graphs != None: @@ -2498,6 +973,16 @@ def fes(arg): for aa in args.split_line_graphs: split_line_graph_kind_lists[len(split_line_graph_kind_lists) - 1].append(aa) + if args.bar_graph != None: + bar_graph_kind_lists.append([]) + for aa in args.bar_graph: + bar_graph_kind_lists[len(bar_graph_kind_lists) - 1].append(aa) + + if args.histogram_graph != None: + histogram_graph_kind_lists.append([]) + for aa in args.histogram_graph: + histogram_graph_kind_lists[len(histogram_graph_kind_lists) - 1].append(aa) + #done with options print("Input directories are \"{0}\"".format(sweep_dir_paths)) print("Output file is \"{0}\"".format(outputfile)) @@ -2506,16 +991,16 @@ def fes(arg): sweep_dir_name = os.path.basename(sweep_dir_path) print("sweep_dir_name:" + sweep_dir_name) - if sweep_dir_name in Data.exclude_sweeps: + if sweep_dir_name in dc.Data.exclude_sweeps: continue - if sweep_dir_name in Data.sweeps: + if sweep_dir_name in dc.Data.sweeps: raise NameError("Repeated sweep_dir_name {}".format(sweep_dir_name)) - Data.add_sweep(sweep_dir_name) - sweep_index = Data.sweeps[sweep_dir_name] - if sweep_index >= len(g_markers): + dc.Data.add_sweep(sweep_dir_name) + sweep_index = dc.Data.sweeps[sweep_dir_name] + if sweep_index >= len(dc.g_markers): raise NameError("Ran out of sweep markers for {}".format(sweep_dir_name)) - Data.sweep_markers[sweep_index] = g_markers[sweep_index] + dc.Data.sweep_markers[sweep_index] = dc.g_markers[sweep_index] for r0,sweep_subdir_names,f0 in os.walk(sweep_dir_path): for sweep_subdir_name in sweep_subdir_names: @@ -2524,9 +1009,9 @@ def fes(arg): run_size_name = get_size_from_dir_name(sweep_subdir_name) if run_size_name in args.prescan["sweep_sizes"]: - if not run_size_name in Data.run_sizes: - Data.add_run_size(run_size_name) - run_size_index = Data.run_sizes[run_size_name] + if not run_size_name in dc.Data.run_sizes: + dc.Data.add_run_size(run_size_name) + run_size_index = dc.Data.run_sizes[run_size_name] else: continue @@ -2552,81 +1037,84 @@ def fes(arg): kinds_string = "" - for kindTree in Data.kinds.values(): + for kindTree in dc.Data.kinds.values(): kinds_string += ", {}".format(kindTree.kind) print("kinds") print(" {}".format(kinds_string[2:])) kind_templates_string = "" - for kindTree_template in Data.kind_templates.values(): + for kindTree_template in dc.Data.kind_templates.values(): kind_templates_string += ", {}".format(kindTree_template.kind_template) print("kind_templates") print(" {}".format(kind_templates_string[2:])) axes_string = "" - for v in range(0, Data.num_axes): - axes_string += ", {}".format(Data.axes[v]) + for v in range(0, dc.Data.num_axes): + axes_string += ", {}".format(dc.Data.axes[v]) print("axes") print(" {}".format(axes_string[2:])) sweeps_string = "" - for v in range(0, Data.num_sweeps): - sweeps_string += ", {}".format(Data.sweeps[v]) + for v in range(0, dc.Data.num_sweeps): + sweeps_string += ", {}".format(dc.Data.sweeps[v]) print("sweeps") print(" {}".format(sweeps_string[2:])) run_sizes_string = "" - for v in range(0, Data.num_run_sizes): - run_sizes_string += ", {}".format(Data.run_sizes[v]) + for v in range(0, dc.Data.num_run_sizes): + run_sizes_string += ", {}".format(dc.Data.run_sizes[v]) print("run_sizes") print(" {}".format(run_sizes_string[2:])) kernel_groups_string = "" - for kernel_group in g_known_kernel_groups: + for kernel_group in dc.g_known_kernel_groups: kernel_groups_string += ", {}".format(kernel_group) print("kernel groups") print(" {}".format(kernel_groups_string[2:])) - assert Data.num_kernels > 0,f"Expected kernels to be greater than zero; kernel name typo in cmdline arg??" + assert dc.Data.num_kernels > 0,f"Expected kernels to be greater than zero; kernel name typo in cmdline arg??" kernel_string = "" - for v in range(0, Data.num_kernels): - kernel_string += ", {}".format(Data.kernels[v]) + for v in range(0, dc.Data.num_kernels): + kernel_string += ", {}".format(dc.Data.kernels[v]) print("kernels") print(" {}".format(kernel_string[2:])) variant_string = "" - for v in range(0, Data.num_variants): - variant_string += ", {}".format(Data.variants[v]) + for v in range(0, dc.Data.num_variants): + variant_string += ", {}".format(dc.Data.variants[v]) print("variants") print(" {}".format(variant_string[2:])) tuning_string = "" - for v in range(0, Data.num_tunings): - tuning_string += ", {}".format(Data.tunings[v]) + for v in range(0, dc.Data.num_tunings): + tuning_string += ", {}".format(dc.Data.tunings[v]) print("tunings") print(" {}".format(tuning_string[2:])) for kind in print_kinds: print("Print Data {}:".format(kind)) - Data.compute(kind) - print(Data.kinds[kind].dataString()) + #dc.Data.compute(kind) + dc.compute(kind) + print(dc.Data.kinds[kind].dataString(compact_flag)) for kind_list in split_line_graph_kind_lists: print("Plot split line graph {}:".format(kind_list)) for kind in kind_list: - Data.compute(kind) + #dc.Data.compute(kind) + dc.compute(kind) plot_data_split_line(outputfile, "kernel_index", "run_size", "Problem size", kind_list) for kind_list in bar_graph_kind_lists: print("Plot bar graph {}:".format(kind_list)) for kind in kind_list: - Data.compute(kind) + dc.Data.compute(kind) plot_data_bar(outputfile, "kernel_index", kind_list) for kind_list in histogram_graph_kind_lists: print("Plot histogram graph {}:".format(kind_list)) for kind in kind_list: - Data.compute(kind) + #dc.Data.compute(kind) + dc.compute(kind) plot_data_histogram(outputfile, "kernel_index", kind_list) if __name__ == "__main__": From 57f50c4432fa6cd7535e3a13f429189a4782a9cf Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 5 Oct 2022 12:49:27 -0700 Subject: [PATCH 086/174] change column attribute data such as ProblemSize so aggregation is more normal, i.e. doesn't include repeat |- artifacts --- src/common/KernelBase.cpp | 29 ++++++++-------- src/common/KernelBase.hpp | 73 ++++++++++++++++----------------------- 2 files changed, 43 insertions(+), 59 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index 2089c7b00..ae54859a1 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -345,6 +345,7 @@ void KernelBase::print(std::ostream& os) const } os << std::endl; } + #ifdef RAJA_PERFSUITE_USE_CALIPER void KernelBase::setKernelAdiakMeta() { @@ -370,28 +371,26 @@ void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { // use json spec query expr if(doCaliMetaOnce[vid].at(tune_idx)) { - cali_begin_double_byname("ProblemSize",(double)getActualProblemSize()); - cali_begin_double_byname("Reps",(double)getRunReps()); - cali_begin_double_byname("Iterations/Rep",(double)getItsPerRep()); - cali_begin_double_byname("Kernels/Rep",(double)getKernelsPerRep()); - cali_begin_double_byname("Bytes/Rep",(double)getBytesPerRep()); - cali_begin_double_byname("Flops/Rep",(double)getFLOPsPerRep()); - } + cali_id_t ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(ProblemSize_attr,(double)getActualProblemSize()); + cali_id_t Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(Reps_attr,(double)getRunReps()); + cali_id_t Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(Iters_Rep_attr,(double)getItsPerRep()); + cali_id_t Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(Kernels_Rep_attr,(double)getKernelsPerRep()); + cali_id_t Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(Bytes_Rep_attr,(double)getBytesPerRep()); + cali_id_t Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_set_double(Flops_Rep_attr,(double)getFLOPsPerRep()); + } } void KernelBase::doOnceCaliMetaEnd(VariantID vid, size_t tune_idx) { - // use json spec query exp if(doCaliMetaOnce[vid].at(tune_idx)) { - cali_end_byname("Flops/Rep"); - cali_end_byname("Bytes/Rep"); - cali_end_byname("Kernels/Rep"); - cali_end_byname("Iterations/Rep"); - cali_end_byname("Reps"); - cali_end_byname("ProblemSize"); doCaliMetaOnce[vid].at(tune_idx) = false; } - } // initialize a KernelBase static diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 1710a8aae..58faac1e2 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -297,120 +297,106 @@ class KernelBase "query" : [ { "level" : "local", - "select" : { "expr": "ProblemSize" }, - "group by" : "ProblemSize" + "select": { "expr": "any(max#ProblemSize)", "as": "ProblemSize" }, }, { "level" : "cross", - "select" : { "expr": "ProblemSize" }, - "group by" : "ProblemSize" + "select": { "expr": "any(any#max#ProblemSize)", "as": "ProblemSize" }, } ] } )json"; - const std::string reps_json_spec = R"json( - { - "name" : "reps", + const std::string reps_json_spec = R"json( + { + "name" : "reps", "type" : "boolean", "category" : "metric", "description" : "reps", "query" : [ { "level" : "local", - "select" : { "expr": "Reps" }, - "group by" : "Reps" + "select": { "expr": "any(max#Reps)", "as": "Reps" }, }, { "level" : "cross", - "select" : { "expr": "Reps" }, - "group by" : "Reps" + "select": { "expr": "any(any#max#Reps)", "as": "Reps" }, } ] } )json"; - const std::string iters_json_spec = R"json( - { - "name" : "iters_p_rep", + const std::string iters_json_spec = R"json( + { + "name" : "iters_p_rep", "type" : "boolean", "category" : "metric", "description" : "iterations per rep", "query" : [ { "level" : "local", - "select" : { "expr": "Iterations/Rep" }, - "group by" : "Iterations/Rep" + "select": { "expr": "any(max#Iterations/Rep)", "as": "Iterations/Rep" }, }, { "level" : "cross", - "select" : { "expr": "Iterations/Rep" }, - "group by" : "Iterations/Rep" + "select": { "expr": "any(any#max#Iterations/Rep)", "as": "Iterations/Rep" }, } ] } )json"; - - const std::string kernels_json_spec = R"json( - { - "name" : "kernels_p_rep", + const std::string kernels_json_spec = R"json( + { + "name" : "kernels_p_rep", "type" : "boolean", "category" : "metric", "description" : "kernels per rep", "query" : [ { "level" : "local", - "select" : { "expr": "Kernels/Rep" }, - "group by" : "Kernels/Rep" + "select": { "expr": "any(max#Kernels/Rep)", "as": "Kernels/Rep" }, }, { "level" : "cross", - "select" : { "expr": "Kernels/Rep" }, - "group by" : "Kernels/Rep" + "select": { "expr": "any(any#max#Kernels/Rep)", "as": "Kernels/Rep" }, } ] } )json"; - const std::string bytes_json_spec = R"json( - { - "name" : "bytes_p_rep", + const std::string bytes_json_spec = R"json( + { + "name" : "bytes_p_rep", "type" : "boolean", "category" : "metric", "description" : "bytes per rep", "query" : [ { "level" : "local", - "select" : { "expr": "Bytes/Rep" }, - "group by" : "Bytes/Rep" + "select": { "expr": "any(max#Bytes/Rep)", "as": "Bytes/Rep" }, }, { "level" : "cross", - "select" : { "expr": "Bytes/Rep" }, - "group by" : "Bytes/Rep" + "select": { "expr": "any(any#max#Bytes/Rep)", "as": "Bytes/Rep" }, } ] } )json"; - - const std::string flops_rep_json_spec = R"json( - { - "name" : "flops_p_rep", + const std::string flops_rep_json_spec = R"json( + { + "name" : "flops_p_rep", "type" : "boolean", "category" : "metric", "description" : "flops per rep", "query" : [ { "level" : "local", - "select" : { "expr": "Flops/Rep" }, - "group by" : "Flops/Rep" + "select": { "expr": "any(max#Flops/Rep)", "as": "Flops/Rep" }, }, { "level" : "cross", - "select" : { "expr": "Flops/Rep" }, - "group by" : "Flops/Rep" + "select": { "expr": "any(any#max#Flops/Rep)", "as": "Flops/Rep" }, } ] } )json"; - + cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); std::string od("./"); @@ -432,7 +418,7 @@ class KernelBase mgr[vid].set_default_parameter("bytes_p_rep","true"); mgr[vid].add_option_spec(flops_rep_json_spec.c_str()); mgr[vid].set_default_parameter("flops_p_rep","true"); - mgr[vid].add(profile.c_str()); + mgr[vid].add(profile.c_str()); } static void setCaliperMgrStart(VariantID vid) { mgr[vid].start(); } @@ -501,7 +487,6 @@ class KernelBase bool doCaliperTiming = true; // warmup can use this to exclude timing std::vector doCaliMetaOnce[NumVariants]; - // we need a Caliper Manager object per variant // we can inline this with c++17 static std::map mgr; From bf45a796bbead8b34dc51e3728d68af74dc0a9c1 Mon Sep 17 00:00:00 2001 From: holger Date: Fri, 7 Oct 2022 10:40:28 -0700 Subject: [PATCH 087/174] cmake Caliper/Adiak includes back in main so it's in one section, and easily propagates to test directory --- CMakeLists.txt | 4 ++++ src/CMakeLists.txt | 7 ------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e18d7e7a4..18512dd8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,10 @@ if (RAJA_PERFSUITE_USE_CALIPER) # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't set_target_properties(${adiak_LIBRARIES} PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") endif () + message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") + message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") + include_directories(${caliper_INCLUDE_DIR}) + include_directories(${adiak_INCLUDE_DIRS}) endif () set(RAJAPERF_BUILD_SYSTYPE $ENV{SYS_TYPE}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index da0ada219..cb8a9a70c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,13 +8,6 @@ include_directories(.) -if(RAJA_PERFSUITE_USE_CALIPER) - message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") - message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") - include_directories(${caliper_INCLUDE_DIR}) - include_directories(${adiak_INCLUDE_DIRS}) -endif () - add_subdirectory(common) add_subdirectory(basic) add_subdirectory(basic-kokkos) From a616fe19a0a85e9f8126b89e08bd4008a14f6e85 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Fri, 7 Oct 2022 11:01:35 -0700 Subject: [PATCH 088/174] put cmake Caliper/Adiak includes back into top; accomodate Adiak@0.2.2 wrt -pthread under cuda --- CMakeLists.txt | 8 ++++++++ src/CMakeLists.txt | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e18d7e7a4..da4c68053 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,7 +136,15 @@ if (RAJA_PERFSUITE_USE_CALIPER) # Adiak will propagate -pthread from spectrum mpi from a spack install of Caliper with +mpi; and needs to be handled even if RAJAPerf is non MPI program # We should delegate to BLT to handle unguarded -pthread from any dependencies, but currently BLT doesn't set_target_properties(${adiak_LIBRARIES} PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") + # the following for adiak-0.2.2 + if (TARGET adiak::mpi) + set_target_properties(adiak::mpi PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$>:-pthread>;$<$:-Xcompiler=-pthread>") + endif () endif () + message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") + message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") + include_directories(${caliper_INCLUDE_DIR}) + include_directories(${adiak_INCLUDE_DIRS}) endif () set(RAJAPERF_BUILD_SYSTYPE $ENV{SYS_TYPE}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index da0ada219..cb8a9a70c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,13 +8,6 @@ include_directories(.) -if(RAJA_PERFSUITE_USE_CALIPER) - message(STATUS "Caliper includes : ${caliper_INCLUDE_DIR}") - message(STATUS "Adiak includes : ${adiak_INCLUDE_DIRS}") - include_directories(${caliper_INCLUDE_DIR}) - include_directories(${adiak_INCLUDE_DIRS}) -endif () - add_subdirectory(common) add_subdirectory(basic) add_subdirectory(basic-kokkos) From 505cc953bbc00c3b36ab6eee0730d2806459f678 Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 10 Oct 2022 09:50:11 -0700 Subject: [PATCH 089/174] Empty commit to force CI From 3002f990a53a4edb5ab945104ade5d7749445365 Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Mon, 10 Oct 2022 09:52:32 -0700 Subject: [PATCH 090/174] Remove README banner that we don't want in develop --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 141ca6ad4..2f3bd516b 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,6 @@ [comment]: # (# SPDX-License-Identifier: BSD-3-Clause) [comment]: # (#################################################################) -Kokkos Implementation of RAJAPerf Suite Kernel Groups -====================== - -We are developing Kokkos variants of the RAJAPerf Suite kernels. - RAJA Performance Suite ====================== From 10c54800ffc0e1eac32bda54270f061aed94a4e1 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 10 Oct 2022 13:19:44 -0700 Subject: [PATCH 091/174] add caliper based prescan --- scripts/argparse_sweep_graph.py | 68 +++++++++++++++++++++++++++-- scripts/data_classes_sweep_graph.py | 2 +- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index cac364db2..f50e35bb8 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -172,7 +172,12 @@ def __init__(self, option_strings, dest, nargs='+', **kwargs): def __call__(self, parser, namespace, values, option_string=None): # print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) - prescan = self.prescan_sweep_dirs(values) + cr = getattr(namespace,'cr') + if cr != None: + print("DirectoryAction detects .cali file processing") + prescan = self.prescan_caliper_sweep_dirs(cr,values) + else: + prescan = self.prescan_sweep_dirs(values) setattr(namespace, 'prescan', prescan) setattr(namespace, self.dest, prescan["directories"]) # do the normal attr set for dest @@ -233,8 +238,65 @@ def prescan_sweep_dirs(self,sweep_dir_paths) -> dict: prescan["kernels_intersection"] = set.intersection(*sets) prescan["sweep_sizes"] = list(outer_runsizes_set) return prescan - - + + def prescan_caliper_sweep_dirs(self, cr,sweep_dir_paths) -> dict: + prescan = {"directories": [], "kernels_union": [], "kernels_intersection": [], "variants": [], "tunings": [], + "sweep_sizes": [], + "machines" : []} + # machines only gleans os.path.basename of sweep_dir_paths, and does not actually parse real encoded machine names from data; so machine_name is a convention for directory naming + sets = [] + outer_runsizes_set = set() + for sweep_dir_path in sweep_dir_paths: + if not os.path.exists(sweep_dir_path): + raise NameError("Invalid directory: {0}".format(sweep_dir_path)) + kernel_set = set() + sweep_dir_path = sweep_dir_path.rstrip(os.sep) + prescan["directories"].append(sweep_dir_path) + sweep_dir_name = os.path.basename(sweep_dir_path) + if sweep_dir_name not in prescan["machines"]: + prescan["machines"].append(sweep_dir_name) + subdirs = sorted(glob.glob(glob.escape(sweep_dir_path) + os.sep + "**" + os.sep + "SIZE_*", recursive=True)) + inner_runsizes_set = set() + for subdir in subdirs: + # print(subdir) + run_size = get_size_from_dir_name(os.path.basename(subdir)) + inner_runsizes_set.add(run_size) + cali_files = sorted(glob.glob(glob.escape(subdir) + os.sep + "*.cali", recursive=False)) + # not all kernels run in every variant so capture kernel list across variants + for f in cali_files: + gf = cr.GraphFrame.from_caliperreader(f) + #print(gf.metadata) + variant_name = gf.metadata['variant'] + if variant_name not in prescan["variants"]: + prescan["variants"].append(variant_name) + #machine = gf.metadata["cluster"] + "_" + gf.metadata["compiler"] + #if machine not in prescan["machines"]: + # prescan["machines"].append(machine) + # extract kernel list + kernel_index = -1 + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + # kernel_tuning_name is kernel.tuning in Caliper + kernel_tuning_name = gf.dataframe.loc[nn, 'name'] + kernel_name = kernel_tuning_name.split('.')[0] + tuning_name = kernel_tuning_name.split('.')[1] + if kernel_name not in prescan["kernels_union"]: + prescan["kernels_union"].append(kernel_name) + if kernel_name not in kernel_set: + kernel_set.add(kernel_name) + if tuning_name not in prescan["tunings"]: + prescan["tunings"].append(tuning_name) + + + if (not outer_runsizes_set) and inner_runsizes_set: + outer_runsizes_set = inner_runsizes_set + outer_runsizes_set = outer_runsizes_set.intersection(inner_runsizes_set) + sets.append(kernel_set) + prescan["kernels_intersection"] = set.intersection(*sets) + prescan["sweep_sizes"] = list(outer_runsizes_set) + return prescan def __init__(self): self.parent_caliper_parser= argparse.ArgumentParser(add_help=False) diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py index ee3e6f9b6..b20a4500c 100644 --- a/scripts/data_classes_sweep_graph.py +++ b/scripts/data_classes_sweep_graph.py @@ -1000,7 +1000,7 @@ def dataString(self, compact=True): buf = "" for item in self.items(): keys, value = item - print(str(keys)) + #print(str(keys)) if compact: buf += str(item) + "\n" else: From f91cd217bf63181c9a06b640fb6ef65fdc851d32 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 11 Oct 2022 15:11:11 -0700 Subject: [PATCH 092/174] fix some namespace bugs wrt Data class; add kinds closeness check in an argparse action for several arguments --- scripts/argparse_sweep_graph.py | 45 ++++++++++++++++++++++++++++----- scripts/sweep_graph.py | 14 +++++----- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index f50e35bb8..4f2530f22 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -9,6 +9,8 @@ import pkgutil import traceback +import data_classes_sweep_graph as dc + def import_submodules(package, recursive=True): """ Import all submodules of a module, recursively, including subpackages @@ -69,6 +71,30 @@ def get_close_matches(test_value,match_values) -> list: close_matches = found_sub return close_matches + +def kind_action_check(values,kinds, kind_tempplates): + check = [] + + for k in values: + items = k.split('<') + if k in kinds: + check.append(k) + elif len(items) == 1: + close_matches = get_close_matches(k, kinds.keys()) + if len(close_matches) > 0: + raise NameError( + "Invalid kinds check for {0}: Did you mean one of {1}, or try changing case".format(k, + str(close_matches))) + else: + raise NameError("Invalid kinds check for {0}: Use one of {1}".format(k, str(kinds.keys()))) + elif len(items) > 1: + # continue for now because this is a DSL expression + print('DSL: No checking yet') + check.append(k) + + return check + + def direct_action_check(values,prescan_dict_name, namespace): check = [] for k in values: @@ -115,8 +141,15 @@ def __call__(self, parser, namespace, values, option_string=None): else: cr = None setattr(namespace,"cr",cr) - + class KindAction(argparse.Action): + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super().__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + check = kind_action_check(values, dc.Data.kinds, dc.Data.kind_templates) + setattr(namespace, self.dest, check) + class KernelAction(argparse.Action): def __init__(self, option_strings, dest, nargs='+', **kwargs): super().__init__(option_strings, dest, nargs, **kwargs) @@ -331,15 +364,15 @@ def __init__(self): help="reformat series_name format_str") #the following should be modified to use action based on possible kinds pgroup = self.child_parser.add_mutually_exclusive_group() - pgroup.add_argument('-pc','--print-compact', nargs=1, + pgroup.add_argument('-pc','--print-compact', nargs=1,action=self.KindAction, help="print one of kind argument expression in compact form") - pgroup.add_argument('-pe','--print-expanded', nargs=1, + pgroup.add_argument('-pe','--print-expanded', nargs=1,action=self.KindAction, help="print one of kind argument expression in expanded form") - self.child_parser.add_argument('-slg','--split-line-graphs', nargs=1, + self.child_parser.add_argument('-slg','--split-line-graphs', nargs=1,action=self.KindAction, help="split line graph of one kind argument expression") - self.child_parser.add_argument('-bg','--bar-graph', nargs=1, + self.child_parser.add_argument('-bg','--bar-graph', nargs=1,action=self.KindAction, help="bar graph of one kind argument expression") - self.child_parser.add_argument('-hg','--histogram-graph', nargs=1, + self.child_parser.add_argument('-hg','--histogram-graph', nargs=1,action=self.KindAction, help="histogram graph of one kind argument expression") self.child_parser.add_argument('-k', '--kernels', nargs='+', action=self.KernelAction, diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 3d51c8066..cdb3f7b7d 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -163,8 +163,8 @@ def read_timing_file(sweep_index, sweep_subdir_timing_file_path, run_size_index) if not run_size_index in dc.Data.kinds[data_kind].data.data[sweep_index]: dc.Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} else: - sweep_dir_name = dc.Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = dc.Data.get_index_name(Data.axes["run_size"], run_size_index) + sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) c_to_variant_index = {} @@ -246,8 +246,8 @@ def read_caliper_timing_file(cr, sweep_index, sweep_subdir, run_size_index): if not run_size_index in dc.Data.kinds[data_kind].data.data[sweep_index]: dc.Data.kinds[data_kind].data.data[sweep_index][run_size_index] = {} else: - sweep_dir_name = dc.Data.get_index_name(Data.axes["sweep_dir_name"], sweep_index) - run_size_name = dc.Data.get_index_name(Data.axes["run_size"], run_size_index) + sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) + run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) raise NameError("Already seen {0} in {1}".format(sweep_dir_name, run_size_name)) #print("run size:" + Data.get_index_name(Data.axes["run_size"], run_size_index)) @@ -550,7 +550,7 @@ def plot_data_bar(outputfile_name, xaxis, ykinds): kernel_data["kernel_names"].append(kernel_name) kernel_data["kernel_centers"].append(kernel_index) - axes_index = { Data.axes["kernel_index"]: kernel_index } + axes_index = { dc.Data.axes["kernel_index"]: kernel_index } for ykind in ykinds: @@ -728,8 +728,8 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): hname = "{} {}".format(dc.Data.kinds[ykind].kind, hname) hcolor = (0.0, 0.0, 0.0, 1.0) - if Data.axes["variant_index"] in hdata["axes_index"]: - variant_index = hdata["axes_index"][Data.axes["variant_index"]] + if dc.Data.axes["variant_index"] in hdata["axes_index"]: + variant_index = hdata["axes_index"][dc.Data.axes["variant_index"]] hcolor = dc.Data.variant_colors[variant_index] if not hname in kernel_data["hnames"]: From f57e3c76ef2db6db5c8e45f56b41cb2180a7a3e7 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 17 Oct 2022 12:12:08 -0700 Subject: [PATCH 093/174] move several free functions back into Data class - reorg not apropo yet; kind action check now strips whitespace before closeness match; for test if we're using caliper use hasattr vs getattr --- scripts/argparse_sweep_graph.py | 6 +- scripts/data_classes_sweep_graph.py | 371 ++++++++++++++-------------- scripts/sweep_graph.py | 9 +- 3 files changed, 192 insertions(+), 194 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index 4f2530f22..b70687537 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -76,8 +76,11 @@ def kind_action_check(values,kinds, kind_tempplates): check = [] for k in values: + # strip whitespace + k = ''.join(k.split()) items = k.split('<') if k in kinds: + print("matches kinds: " + k) check.append(k) elif len(items) == 1: close_matches = get_close_matches(k, kinds.keys()) @@ -205,8 +208,7 @@ def __init__(self, option_strings, dest, nargs='+', **kwargs): def __call__(self, parser, namespace, values, option_string=None): # print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) - cr = getattr(namespace,'cr') - if cr != None: + if hasattr(namespace,'cr'): print("DirectoryAction detects .cali file processing") prescan = self.prescan_caliper_sweep_dirs(cr,values) else: diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py index b20a4500c..ddf3539df 100644 --- a/scripts/data_classes_sweep_graph.py +++ b/scripts/data_classes_sweep_graph.py @@ -207,192 +207,6 @@ def set_legend_order(labels) -> list: g_series_reformat = {} -def compute_data(kind): - if not kind in Data.kinds: - raise NameError("Unknown data kind {}".format(kind)) - - datatree = Data.kinds[kind] - if datatree.data: - return # already calculated - if not (datatree.model_kind and datatree.args and datatree.func): - raise NameError("Computing data is not supported for kind {0}".format(kind)) - - model_kind = datatree.model_kind - compute_args = datatree.args - compute_func = datatree.func - - if model_kind != kind: - Data.compute(model_kind) - - arg_datatrees = () - for arg_kind in compute_args: - # calculate data for arg_kind - Data.compute(arg_kind) - arg_datatree = Data.kinds[arg_kind] - arg_datatrees = arg_datatrees + (arg_datatree,) - - if (not model_kind in Data.kinds) or (not Data.kinds[model_kind].data): - raise NameError("Model data not available {0}, no args".format(model_kind)) - - datatree.makeData() - - use_lists = () - for arg_datatree in arg_datatrees: - use_list = datatree.missingAxes(arg_datatree.axes) - use_lists = use_lists + (use_list,) - - for axes_index in Data.kinds[model_kind]: - # print("compute_data:"+str(axes_index)) - if not datatree.check(axes_index): - args_val = () - for i in range(0, len(arg_datatrees)): - arg_datatree = arg_datatrees[i] - arg_val = arg_datatree.get(axes_index) - if use_lists[i]: - arg_val = [arg_val, ] - args_val = args_val + (arg_val,) - datatree.set(axes_index, args_val) - else: - args_val = datatree.get(axes_index) - for i in range(0, len(arg_datatrees)): - if use_lists[i]: - arg_datatree = arg_datatrees[i] - arg_val = arg_datatree.get(axes_index) - args_val[i].append(arg_val) - - for axes_index, args_val in datatree.items(): - val = compute_func(*args_val) - datatree.set(axes_index, val) - - -def compute_index(kind_preindex, index_args): - # print("compute_index", kind_preindex, index_args) - Data.compute(kind_preindex) - datatree_preindex = Data.kinds[kind_preindex] - - # extract axes and indices - partial_axis_index = {} - for index_str in index_args: - index_list = index_str.split("::") - if len(index_list) != 2: - raise NameError("Expected valid index ::: {}".format(index_str)) - axis_name = index_list[0].strip() - index_name = index_list[1].strip() - partial_axis_index.update(Data.get_axis_index(axis_name, index_name)) - - kind = "{}[{}]".format(kind_preindex, ",".join(index_args)) - - datatree = None - if kind in Data.kinds: - datatree = Data.kinds[kind] - if datatree.data: - return - else: - axes = Data.axes_difference(datatree_preindex.axes, partial_axis_index) - datatree = Data.DataTree(kind, datatree_preindex.label, axes=axes) - Data.kinds[kind] = datatree - - datatree.makeData() - - for axes_index, partial_axes_index, value in datatree_preindex.partial_match_items(partial_axis_index): - datatree.set(partial_axes_index, value) - - -def compute_templated_data(kind_template, template_args): - # print("compute_templated_data", kind_template, template_args) - if kind_template in Data.kind_templates: - kind = Data.kind_templates[kind_template].getKind(template_args) - if not kind in Data.kinds: - # compute args first to ensure arg kinds exist - for arg_kind in Data.kind_templates[kind_template].getArgs(template_args): - Data.compute(arg_kind) - Data.kinds[kind] = Data.kind_templates[kind_template].makeDataTree(template_args) - Data.compute(kind) - else: - raise NameError("Unkown kind template {}".format(kind_template)) - - -def kind_template_scan(kind): - # print("kind_template_scan", kind) - - kind_prefix = None - - template_args = [] - index_args = [] - - template_depth = 0 - index_depth = 0 - - arg_end_idx = -1 - - # look through string backwards to find indexing or templating - for i_forward in range(0, len(kind)): - i = len(kind) - i_forward - 1 - c = kind[i] - if c == ">" or c == "]": - if template_depth == 0 and index_depth == 0: - arg_end_idx = i - if c == ">": - template_depth += 1 - elif c == "]": - index_depth += 1 - elif c == ",": - if template_depth == 1 and index_depth == 0: - template_args.append(kind[i + 1:arg_end_idx].strip()) - arg_end_idx = i - elif template_depth == 0 and index_depth == 1: - index_args.append(kind[i + 1:arg_end_idx].strip()) - arg_end_idx = i - elif c == "<" or c == "[": - if template_depth == 1 and index_depth == 0: - template_args.append(kind[i + 1:arg_end_idx].strip()) - arg_end_idx = -1 - elif template_depth == 0 and index_depth == 1: - index_args.append(kind[i + 1:arg_end_idx].strip()) - arg_end_idx = -1 - if c == "<": - template_depth -= 1 - elif c == "[": - index_depth -= 1 - if template_depth == 0 and index_depth == 0: - if not kind_prefix: - kind_prefix = kind[:i].strip() - break - assert (arg_end_idx == -1) - assert (template_depth == 0) - assert (index_depth == 0) - assert (kind_prefix) - - # reverse lists - for i in range(0, len(template_args) // 2): - i_rev = len(template_args) - i - 1 - template_args[i], template_args[i_rev] = template_args[i_rev], template_args[i] - for i in range(0, len(index_args) // 2): - i_rev = len(index_args) - i - 1 - index_args[i], index_args[i_rev] = index_args[i_rev], index_args[i] - - return (kind_prefix, template_args, index_args) - - -def compute(kind): - if kind in Data.kinds: - if not Data.kinds[kind].data: - Data.compute_data(kind) - else: - pass - else: - kind_template, template_args, index_args = Data.kind_template_scan(kind) - # print("Data.kind_template_scan", kind_template, template_args, index_args) - if template_args: - if kind_template in Data.kind_templates: - Data.compute_templated_data(kind_template, template_args) - else: - raise NameError("Unknown data kind template {}".format(kind)) - elif index_args: - Data.compute_index(kind_template, index_args) - else: - raise NameError("Unknown data kind {}".format(kind)) - def first(vals): return vals[0] @@ -1075,6 +889,7 @@ def __iter__(self): class DataTree: def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): + print("DataTree init:"+str(kind)+ ' ' + str(label) + ' ' + str(args)) self.kind = kind self.label = label self.axes = axes @@ -1387,3 +1202,187 @@ def makeDataTree(self, template_args): func=eval_segmented_linearRegression_loglog), } + + def compute_data(kind): + if not kind in Data.kinds: + raise NameError("Unknown data kind {}".format(kind)) + + datatree = Data.kinds[kind] + if datatree.data: + return # already calculated + if not (datatree.model_kind and datatree.args and datatree.func): + raise NameError("Computing data is not supported for kind {0}".format(kind)) + + model_kind = datatree.model_kind + compute_args = datatree.args + compute_func = datatree.func + + if model_kind != kind: + Data.compute(model_kind) + + arg_datatrees = () + for arg_kind in compute_args: + # calculate data for arg_kind + Data.compute(arg_kind) + arg_datatree = Data.kinds[arg_kind] + arg_datatrees = arg_datatrees + (arg_datatree,) + + if (not model_kind in Data.kinds) or (not Data.kinds[model_kind].data): + raise NameError("Model data not available {0}, no args".format(model_kind)) + + datatree.makeData() + + use_lists = () + for arg_datatree in arg_datatrees: + use_list = datatree.missingAxes(arg_datatree.axes) + use_lists = use_lists + (use_list,) + + for axes_index in Data.kinds[model_kind]: + # print("compute_data:"+str(axes_index)) + if not datatree.check(axes_index): + args_val = () + for i in range(0, len(arg_datatrees)): + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + if use_lists[i]: + arg_val = [arg_val, ] + args_val = args_val + (arg_val,) + datatree.set(axes_index, args_val) + else: + args_val = datatree.get(axes_index) + for i in range(0, len(arg_datatrees)): + if use_lists[i]: + arg_datatree = arg_datatrees[i] + arg_val = arg_datatree.get(axes_index) + args_val[i].append(arg_val) + + for axes_index, args_val in datatree.items(): + val = compute_func(*args_val) + datatree.set(axes_index, val) + + def compute_index(kind_preindex, index_args): + # print("compute_index", kind_preindex, index_args) + Data.compute(kind_preindex) + datatree_preindex = Data.kinds[kind_preindex] + + # extract axes and indices + partial_axis_index = {} + for index_str in index_args: + index_list = index_str.split("::") + if len(index_list) != 2: + raise NameError("Expected valid index ::: {}".format(index_str)) + axis_name = index_list[0].strip() + index_name = index_list[1].strip() + partial_axis_index.update(Data.get_axis_index(axis_name, index_name)) + + kind = "{}[{}]".format(kind_preindex, ",".join(index_args)) + + datatree = None + if kind in Data.kinds: + datatree = Data.kinds[kind] + if datatree.data: + return + else: + axes = Data.axes_difference(datatree_preindex.axes, partial_axis_index) + datatree = Data.DataTree(kind, datatree_preindex.label, axes=axes) + Data.kinds[kind] = datatree + + datatree.makeData() + + for axes_index, partial_axes_index, value in datatree_preindex.partial_match_items(partial_axis_index): + datatree.set(partial_axes_index, value) + + def compute_templated_data(kind_template, template_args): + # print("compute_templated_data", kind_template, template_args) + if kind_template in Data.kind_templates: + kind = Data.kind_templates[kind_template].getKind(template_args) + if not kind in Data.kinds: + # compute args first to ensure arg kinds exist + for arg_kind in Data.kind_templates[kind_template].getArgs(template_args): + Data.compute(arg_kind) + Data.kinds[kind] = Data.kind_templates[kind_template].makeDataTree(template_args) + Data.compute(kind) + else: + raise NameError("Unkown kind template {}".format(kind_template)) + + def kind_template_scan(kind): + # print("kind_template_scan", kind) + + kind_prefix = None + + template_args = [] + index_args = [] + + template_depth = 0 + index_depth = 0 + + arg_end_idx = -1 + + # look through string backwards to find indexing or templating + for i_forward in range(0, len(kind)): + i = len(kind) - i_forward - 1 + c = kind[i] + if c == ">" or c == "]": + if template_depth == 0 and index_depth == 0: + arg_end_idx = i + if c == ">": + template_depth += 1 + elif c == "]": + index_depth += 1 + elif c == ",": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = i + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = i + elif c == "<" or c == "[": + if template_depth == 1 and index_depth == 0: + template_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = -1 + elif template_depth == 0 and index_depth == 1: + index_args.append(kind[i + 1:arg_end_idx].strip()) + arg_end_idx = -1 + if c == "<": + template_depth -= 1 + elif c == "[": + index_depth -= 1 + if template_depth == 0 and index_depth == 0: + if not kind_prefix: + kind_prefix = kind[:i].strip() + break + assert (arg_end_idx == -1) + assert (template_depth == 0) + assert (index_depth == 0) + assert (kind_prefix) + + # reverse lists + for i in range(0, len(template_args) // 2): + i_rev = len(template_args) - i - 1 + template_args[i], template_args[i_rev] = template_args[i_rev], template_args[i] + for i in range(0, len(index_args) // 2): + i_rev = len(index_args) - i - 1 + index_args[i], index_args[i_rev] = index_args[i_rev], index_args[i] + + return (kind_prefix, template_args, index_args) + + def compute(kind): + if kind in Data.kinds: + if not Data.kinds[kind].data: + Data.compute_data(kind) + else: + pass + else: + kind_template, template_args, index_args = Data.kind_template_scan(kind) + # print("Data.kind_template_scan", kind_template, template_args, index_args) + if template_args: + if kind_template in Data.kind_templates: + Data.compute_templated_data(kind_template, template_args) + else: + raise NameError("Unknown data kind template {}".format(kind)) + elif index_args: + Data.compute_index(kind_template, index_args) + else: + raise NameError("Unknown data kind {}".format(kind)) + + diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index cdb3f7b7d..5316c18c7 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1093,15 +1093,13 @@ def main(argv): for kind in print_kinds: print("Print Data {}:".format(kind)) - #dc.Data.compute(kind) - dc.compute(kind) + dc.Data.compute(kind) print(dc.Data.kinds[kind].dataString(compact_flag)) for kind_list in split_line_graph_kind_lists: print("Plot split line graph {}:".format(kind_list)) for kind in kind_list: - #dc.Data.compute(kind) - dc.compute(kind) + dc.Data.compute(kind) plot_data_split_line(outputfile, "kernel_index", "run_size", "Problem size", kind_list) for kind_list in bar_graph_kind_lists: @@ -1113,8 +1111,7 @@ def main(argv): for kind_list in histogram_graph_kind_lists: print("Plot histogram graph {}:".format(kind_list)) for kind in kind_list: - #dc.Data.compute(kind) - dc.compute(kind) + dc.Data.compute(kind) plot_data_histogram(outputfile, "kernel_index", kind_list) if __name__ == "__main__": From 1cc3f4a135e9cf6bbdda495a3b9ddeb11722b829 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 17 Oct 2022 12:18:04 -0700 Subject: [PATCH 094/174] still need our local cr (caliper reader) object to pass to prescan --- scripts/argparse_sweep_graph.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index b70687537..0c7203f7c 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -209,6 +209,7 @@ def __init__(self, option_strings, dest, nargs='+', **kwargs): def __call__(self, parser, namespace, values, option_string=None): # print('Action Namespace=%r values=%r option_string=%r' % (namespace, values, option_string)) if hasattr(namespace,'cr'): + cr = getattr(namespace,'cr') print("DirectoryAction detects .cali file processing") prescan = self.prescan_caliper_sweep_dirs(cr,values) else: From 334bd37a483e6388f3614696039e9067d0cf44e8 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 18 Oct 2022 16:09:02 -0700 Subject: [PATCH 095/174] add --recolor --reformat flags; kind closeness check is more insensitive to case --- scripts/argparse_sweep_graph.py | 23 +++++++++++++++++++---- scripts/data_classes_sweep_graph.py | 2 +- scripts/sweep_graph.py | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index 0c7203f7c..3825bfb36 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -5,6 +5,7 @@ import csv import glob import difflib +import itertools import importlib import pkgutil import traceback @@ -72,6 +73,20 @@ def get_close_matches(test_value,match_values) -> list: return close_matches +def get_close_matches_icase(word, possibilities, *args, **kwargs): + """ Case-insensitive version of difflib.get_close_matches """ + lword = word.lower() + lpos = {} + for p in possibilities: + if p.lower() not in lpos: + lpos[p.lower()] = [p] + else: + lpos[p.lower()].append(p) + lmatches = difflib.get_close_matches(lword, lpos.keys(), *args, **kwargs) + ret = [lpos[m] for m in lmatches] + ret = itertools.chain.from_iterable(ret) + return set(ret) + def kind_action_check(values,kinds, kind_tempplates): check = [] @@ -83,7 +98,7 @@ def kind_action_check(values,kinds, kind_tempplates): print("matches kinds: " + k) check.append(k) elif len(items) == 1: - close_matches = get_close_matches(k, kinds.keys()) + close_matches = get_close_matches_icase(k, kinds.keys()) if len(close_matches) > 0: raise NameError( "Invalid kinds check for {0}: Did you mean one of {1}, or try changing case".format(k, @@ -361,9 +376,9 @@ def __init__(self): help="y axis limit") self.child_parser.add_argument('-xlim', '--x-axis-limit', nargs=2, help="x axis limit") - self.child_parser.add_argument('--recolor', nargs=4, - help="recolor series_name r g b") - self.child_parser.add_argument('--reformat', nargs=2, + self.child_parser.add_argument('--recolor', action='append',nargs=2, + help="recolor series_name (r,g,b) : series name followed by rgb in tuple form r,g,b floats in [0-1], optional repeat series color pairs") + self.child_parser.add_argument('--reformat', action='append',nargs=2, help="reformat series_name format_str") #the following should be modified to use action based on possible kinds pgroup = self.child_parser.add_mutually_exclusive_group() diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py index ddf3539df..f7d206714 100644 --- a/scripts/data_classes_sweep_graph.py +++ b/scripts/data_classes_sweep_graph.py @@ -889,7 +889,7 @@ def __iter__(self): class DataTree: def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): - print("DataTree init:"+str(kind)+ ' ' + str(label) + ' ' + str(args)) + #print("DataTree init:"+str(kind)+ ' ' + str(label) + ' ' + str(args)) self.kind = kind self.label = label self.axes = axes diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 5316c18c7..75797f94f 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -929,6 +929,24 @@ def main(argv): if args.x_axis_limit != None: global g_xlim g_xlim = (float(args.x_axis_limit[0]), float(args.x_axis_limit[1])) + + if args.recolor != None: + # expect one or more repeating sequence of series tuple + for ll in args.recolor: + series_name = ll[0] + # expecting tuple string "(r,g,b)" with r,g,b floats in [0-1] + tuple_str = ll[1] + if not series_name in dc.g_series_reformat: + dc.g_series_reformat[series_name] = {} + dc.g_series_reformat[series_name]['color'] = dc.make_color_tuple_str(tuple_str) + + if args.reformat != None: + for ll in args.reformat: + series_name = ll[0] + format_str = ll[1] + if not series_name in dc.g_series_reformat: + dc.g_series_reformat[series_name] = {} + dc.g_series_reformat[series_name]['format'] = format_str if args.kernel_groups != None: for g in args.kernel_groups: From 2e036125b020ecddc51000b570c4a3df7d6e61a7 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 19 Oct 2022 10:41:41 -0700 Subject: [PATCH 096/174] Caliper column metadata Aggregatable attributes need to be initialized before Manager start - now these are init'ed in KernelBase ctor --- src/common/KernelBase.cpp | 17 ++++++++++------- src/common/KernelBase.hpp | 10 ++++++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index ae54859a1..6d1d72fd1 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -39,6 +39,15 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) : running_tuning = getUnknownTuningIdx(); checksum_scale_factor = 1.0; +#ifdef RAJA_PERFSUITE_USE_CALIPER + // Init Caliper column metadata attributes; aggregatable attributes need to be initialized before manager.start() + ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); +#endif } @@ -369,19 +378,13 @@ void KernelBase::setKernelAdiakMeta() void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { - // use json spec query expr + // attributes are class variables initialized in ctor if(doCaliMetaOnce[vid].at(tune_idx)) { - cali_id_t ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(ProblemSize_attr,(double)getActualProblemSize()); - cali_id_t Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Reps_attr,(double)getRunReps()); - cali_id_t Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Iters_Rep_attr,(double)getItsPerRep()); - cali_id_t Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Kernels_Rep_attr,(double)getKernelsPerRep()); - cali_id_t Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Bytes_Rep_attr,(double)getBytesPerRep()); - cali_id_t Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Flops_Rep_attr,(double)getFLOPsPerRep()); } } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 58faac1e2..dddd734a4 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -396,7 +396,6 @@ class KernelBase } )json"; - cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); std::string od("./"); @@ -486,8 +485,15 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing std::vector doCaliMetaOnce[NumVariants]; + cali_id_t ProblemSize_attr; // in ctor cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_id_t Reps_attr; + cali_id_t Iters_Rep_attr; + cali_id_t Kernels_Rep_attr; + cali_id_t Bytes_Rep_attr; + cali_id_t Flops_Rep_attr; + -// we need a Caliper Manager object per variant + // we need a Caliper Manager object per variant // we can inline this with c++17 static std::map mgr; #endif From 0171719c28bfdef437d20d96853b6ed31ed7f60a Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 18 Oct 2022 16:09:02 -0700 Subject: [PATCH 097/174] add --recolor --reformat flags; kind closeness check is more insensitive to case --- scripts/argparse_sweep_graph.py | 23 +++++++++++++++++++---- scripts/data_classes_sweep_graph.py | 2 +- scripts/sweep_graph.py | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index 0c7203f7c..3825bfb36 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -5,6 +5,7 @@ import csv import glob import difflib +import itertools import importlib import pkgutil import traceback @@ -72,6 +73,20 @@ def get_close_matches(test_value,match_values) -> list: return close_matches +def get_close_matches_icase(word, possibilities, *args, **kwargs): + """ Case-insensitive version of difflib.get_close_matches """ + lword = word.lower() + lpos = {} + for p in possibilities: + if p.lower() not in lpos: + lpos[p.lower()] = [p] + else: + lpos[p.lower()].append(p) + lmatches = difflib.get_close_matches(lword, lpos.keys(), *args, **kwargs) + ret = [lpos[m] for m in lmatches] + ret = itertools.chain.from_iterable(ret) + return set(ret) + def kind_action_check(values,kinds, kind_tempplates): check = [] @@ -83,7 +98,7 @@ def kind_action_check(values,kinds, kind_tempplates): print("matches kinds: " + k) check.append(k) elif len(items) == 1: - close_matches = get_close_matches(k, kinds.keys()) + close_matches = get_close_matches_icase(k, kinds.keys()) if len(close_matches) > 0: raise NameError( "Invalid kinds check for {0}: Did you mean one of {1}, or try changing case".format(k, @@ -361,9 +376,9 @@ def __init__(self): help="y axis limit") self.child_parser.add_argument('-xlim', '--x-axis-limit', nargs=2, help="x axis limit") - self.child_parser.add_argument('--recolor', nargs=4, - help="recolor series_name r g b") - self.child_parser.add_argument('--reformat', nargs=2, + self.child_parser.add_argument('--recolor', action='append',nargs=2, + help="recolor series_name (r,g,b) : series name followed by rgb in tuple form r,g,b floats in [0-1], optional repeat series color pairs") + self.child_parser.add_argument('--reformat', action='append',nargs=2, help="reformat series_name format_str") #the following should be modified to use action based on possible kinds pgroup = self.child_parser.add_mutually_exclusive_group() diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py index ddf3539df..f7d206714 100644 --- a/scripts/data_classes_sweep_graph.py +++ b/scripts/data_classes_sweep_graph.py @@ -889,7 +889,7 @@ def __iter__(self): class DataTree: def __init__(self, kind, label, model_kind=None, axes=None, args=None, func=None): - print("DataTree init:"+str(kind)+ ' ' + str(label) + ' ' + str(args)) + #print("DataTree init:"+str(kind)+ ' ' + str(label) + ' ' + str(args)) self.kind = kind self.label = label self.axes = axes diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 5316c18c7..75797f94f 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -929,6 +929,24 @@ def main(argv): if args.x_axis_limit != None: global g_xlim g_xlim = (float(args.x_axis_limit[0]), float(args.x_axis_limit[1])) + + if args.recolor != None: + # expect one or more repeating sequence of series tuple + for ll in args.recolor: + series_name = ll[0] + # expecting tuple string "(r,g,b)" with r,g,b floats in [0-1] + tuple_str = ll[1] + if not series_name in dc.g_series_reformat: + dc.g_series_reformat[series_name] = {} + dc.g_series_reformat[series_name]['color'] = dc.make_color_tuple_str(tuple_str) + + if args.reformat != None: + for ll in args.reformat: + series_name = ll[0] + format_str = ll[1] + if not series_name in dc.g_series_reformat: + dc.g_series_reformat[series_name] = {} + dc.g_series_reformat[series_name]['format'] = format_str if args.kernel_groups != None: for g in args.kernel_groups: From 7c6f110b67b492e9da18d39b79659b0fa5d51308 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 19 Oct 2022 10:41:41 -0700 Subject: [PATCH 098/174] Caliper column metadata Aggregatable attributes need to be initialized before Manager start - now these are init'ed in KernelBase ctor --- src/common/KernelBase.cpp | 17 ++++++++++------- src/common/KernelBase.hpp | 10 ++++++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index c5a96171a..bb94ac8bb 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -39,6 +39,15 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) : running_tuning = getUnknownTuningIdx(); checksum_scale_factor = 1.0; +#ifdef RAJA_PERFSUITE_USE_CALIPER + // Init Caliper column metadata attributes; aggregatable attributes need to be initialized before manager.start() + ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); +#endif } @@ -369,19 +378,13 @@ void KernelBase::setKernelAdiakMeta() void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { - // use json spec query expr + // attributes are class variables initialized in ctor if(doCaliMetaOnce[vid].at(tune_idx)) { - cali_id_t ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(ProblemSize_attr,(double)getActualProblemSize()); - cali_id_t Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Reps_attr,(double)getRunReps()); - cali_id_t Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Iters_Rep_attr,(double)getItsPerRep()); - cali_id_t Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Kernels_Rep_attr,(double)getKernelsPerRep()); - cali_id_t Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Bytes_Rep_attr,(double)getBytesPerRep()); - cali_id_t Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); cali_set_double(Flops_Rep_attr,(double)getFLOPsPerRep()); } } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 47d3fa40f..e79572099 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -396,7 +396,6 @@ class KernelBase } )json"; - cali::ConfigManager m; mgr.insert(std::make_pair(vid,m)); std::string od("./"); @@ -486,8 +485,15 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER bool doCaliperTiming = true; // warmup can use this to exclude timing std::vector doCaliMetaOnce[NumVariants]; + cali_id_t ProblemSize_attr; // in ctor cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + cali_id_t Reps_attr; + cali_id_t Iters_Rep_attr; + cali_id_t Kernels_Rep_attr; + cali_id_t Bytes_Rep_attr; + cali_id_t Flops_Rep_attr; + -// we need a Caliper Manager object per variant + // we need a Caliper Manager object per variant // we can inline this with c++17 static std::map mgr; #endif From 9ad36acac749564037de07a5ab6b406b6c08fa2a Mon Sep 17 00:00:00 2001 From: holger Date: Fri, 21 Oct 2022 09:53:31 -0700 Subject: [PATCH 099/174] Spot config add via command line argument implemented, e.g. you can specify on the command line -atsc topdown.all --- src/common/Executor.cpp | 2 +- src/common/KernelBase.hpp | 67 +++++++++++++++++++++++++-------------- src/common/RunParams.cpp | 22 +++++++++++++ src/common/RunParams.hpp | 8 +++++ 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 727ef9827..4a56d7fc4 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -708,7 +708,7 @@ void Executor::setupSuite() vid != run_var.end(); ++vid) { variant_ids.push_back( *vid ); #ifdef RAJA_PERFSUITE_USE_CALIPER - KernelBase::setCaliperMgrVariant(*vid,run_params.getOutputDirName()); + KernelBase::setCaliperMgrVariant(*vid,run_params.getOutputDirName(),run_params.getAddToSpotConfig()); #endif } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index e79572099..da433c208 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -286,8 +286,10 @@ class KernelBase void setKernelAdiakMeta(); void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); void doOnceCaliMetaEnd(VariantID vid, size_t tune_idx); - static void setCaliperMgrVariant(VariantID vid, const std::string& outdir) + static void setCaliperMgrVariant(VariantID vid, const std::string& outdir, const std::string& addToConfig) { + static bool ran_spot_config_check = false; + bool config_ok = true; const std::string problem_size_json_spec = R"json( { "name" : "problem_size", @@ -396,28 +398,47 @@ class KernelBase } )json"; - cali::ConfigManager m; - mgr.insert(std::make_pair(vid,m)); - std::string od("./"); - if(outdir.size()) { - od = outdir + "/"; - } - std::string vstr = getVariantName(vid); - std::string profile = "spot(output=" +od + vstr + ".cali)"; - std::cout << "Profile: " << profile << std::endl; - mgr[vid].add_option_spec(problem_size_json_spec.c_str()); - mgr[vid].set_default_parameter("problem_size","true"); - mgr[vid].add_option_spec(reps_json_spec.c_str()); - mgr[vid].set_default_parameter("reps","true"); - mgr[vid].add_option_spec(iters_json_spec.c_str()); - mgr[vid].set_default_parameter("iters_p_rep","true"); - mgr[vid].add_option_spec(kernels_json_spec.c_str()); - mgr[vid].set_default_parameter("kernels_p_rep","true"); - mgr[vid].add_option_spec(bytes_json_spec.c_str()); - mgr[vid].set_default_parameter("bytes_p_rep","true"); - mgr[vid].add_option_spec(flops_rep_json_spec.c_str()); - mgr[vid].set_default_parameter("flops_p_rep","true"); - mgr[vid].add(profile.c_str()); + if(!ran_spot_config_check && (!addToConfig.empty())) { + cali::ConfigManager cm; + std::string check_profile = "spot()," + addToConfig; + std::string msg = cm.check(check_profile.c_str()); + if(!msg.empty()) { + std::cerr << "Problem with Cali Config: " << check_profile << "\n"; + std::cerr << "Check your command line argument: " << addToConfig << "\n"; + config_ok = false; + exit(-1); + } + ran_spot_config_check = true; + std::cout << "Caliper ran Spot config check\n"; + } + + if(config_ok) { + cali::ConfigManager m; + mgr.insert(std::make_pair(vid, m)); + std::string od("./"); + if (outdir.size()) { + od = outdir + "/"; + } + std::string vstr = getVariantName(vid); + std::string profile = "spot(output=" + od + vstr + ".cali)"; + if(!addToConfig.empty()) { + profile += "," + addToConfig; + } + std::cout << "Profile: " << profile << std::endl; + mgr[vid].add_option_spec(problem_size_json_spec.c_str()); + mgr[vid].set_default_parameter("problem_size", "true"); + mgr[vid].add_option_spec(reps_json_spec.c_str()); + mgr[vid].set_default_parameter("reps", "true"); + mgr[vid].add_option_spec(iters_json_spec.c_str()); + mgr[vid].set_default_parameter("iters_p_rep", "true"); + mgr[vid].add_option_spec(kernels_json_spec.c_str()); + mgr[vid].set_default_parameter("kernels_p_rep", "true"); + mgr[vid].add_option_spec(bytes_json_spec.c_str()); + mgr[vid].set_default_parameter("bytes_p_rep", "true"); + mgr[vid].add_option_spec(flops_rep_json_spec.c_str()); + mgr[vid].set_default_parameter("flops_p_rep", "true"); + mgr[vid].add(profile.c_str()); + } } static void setCaliperMgrStart(VariantID vid) { mgr[vid].start(); } diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index 58e6ba086..c189e6c9a 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -54,6 +54,9 @@ RunParams::RunParams(int argc, char** argv) invalid_npasses_combiner_input(), outdir(), outfile_prefix("RAJAPerf") +#ifdef RAJA_PERFSUITE_USE_CALIPER + ,add_to_spot_config() +#endif { parseCommandLineOptions(argc, argv); } @@ -108,6 +111,12 @@ void RunParams::print(std::ostream& str) const str << "\n outdir = " << outdir; str << "\n outfile_prefix = " << outfile_prefix; +#ifdef RAJA_PERFSUITE_USE_CALIPER + if(add_to_spot_config.length() > 0) { + str << "\n add_to_spot_config = " << add_to_spot_config; + } +#endif + str << "\n kernel_input = "; for (size_t j = 0; j < kernel_input.size(); ++j) { str << "\n\t" << kernel_input[j]; @@ -515,7 +524,20 @@ void RunParams::parseCommandLineOptions(int argc, char** argv) } } +#ifdef RAJA_PERFSUITE_USE_CALIPER + } else if ( std::string(argv[i]) == std::string("--add-to-spot-config") || + std::string(argv[i]) == std::string("-atsc") ) { + i++; + if ( i < argc ) { + opt = std::string(argv[i]); + if ( opt.at(0) == '-' ) { + i--; + } else { + add_to_spot_config = std::string( argv[i] ); + } + } +#endif } else { input_state = BadInput; diff --git a/src/common/RunParams.hpp b/src/common/RunParams.hpp index d0e7d81bf..7f2bb8cb6 100644 --- a/src/common/RunParams.hpp +++ b/src/common/RunParams.hpp @@ -194,6 +194,11 @@ class RunParams { const std::string& getOutputDirName() const { return outdir; } const std::string& getOutputFilePrefix() const { return outfile_prefix; } +#ifdef RAJA_PERFSUITE_USE_CALIPER + const std::string& getAddToSpotConfig() const { return add_to_spot_config; } +#endif + + //@} /*! @@ -265,6 +270,9 @@ class RunParams { std::string outdir; /*!< Output directory name. */ std::string outfile_prefix; /*!< Prefix for output data file names. */ +#ifdef RAJA_PERFSUITE_USE_CALIPER + std::string add_to_spot_config; +#endif }; From 62341ea4a88cde11dc4bbc55c91dc18b006a88e2 Mon Sep 17 00:00:00 2001 From: holger Date: Fri, 21 Oct 2022 10:29:52 -0700 Subject: [PATCH 100/174] add help text for --add-to-spot-config -atsc --- src/common/RunParams.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index c189e6c9a..3522e04dd 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -686,6 +686,13 @@ void RunParams::printHelpMessage(std::ostream& str) const str << "\t\t Example...\n" << "\t\t --checkrun 2 (run each kernel twice)\n\n"; +#ifdef RAJA_PERFSUITE_USE_CALIPER + str << "\t --add-to-spot-config, -atsc [Default is none]\n" + << "\t\t appends additional parameters to the built-in Caliper spot config\n"; + str << "\t\t Example to include some PAPI counters (Intel arch)\n" + << "\t\t -atsc topdown.all\n\n"; +#endif + str << std::endl; str.flush(); } From 93dee342c9ce4b243645d9f4bc027aea998e8601 Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 23 Oct 2022 16:46:11 -0700 Subject: [PATCH 101/174] advance caliper to caliper@master until caliper@2.9.0 is released --- scripts/spack_packages/raja_perf/package.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/spack_packages/raja_perf/package.py b/scripts/spack_packages/raja_perf/package.py index 1d37b06bb..05a2c25ad 100644 --- a/scripts/spack_packages/raja_perf/package.py +++ b/scripts/spack_packages/raja_perf/package.py @@ -81,9 +81,9 @@ class RajaPerf(CMakePackage, CudaPackage, ROCmPackage): depends_on('cmake@3.9:', type='build') depends_on('blt@0.4.1', type='build', when='@main') depends_on('blt@0.4.1:', type='build') - depends_on('caliper@2.8.0',when='+caliper') - depends_on('caliper@2.8.0 +cuda',when='+caliper +cuda') - depends_on('caliper@2.8.0 +rocm',when='+caliper +rocm') + depends_on('caliper@master',when='+caliper') + depends_on('caliper@master +cuda',when='+caliper +cuda') + depends_on('caliper@master +rocm',when='+caliper +rocm') conflicts('+openmp', when='+rocm') conflicts('~openmp', when='+openmp_target', msg='OpenMP target requires OpenMP') From dfbdcb9771dc31d75625a1b50e1c89de4a29ab01 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 7 Nov 2022 12:49:09 -0800 Subject: [PATCH 102/174] use cmp0048 for project version, and propagate to original version variables; sweep_graph now supports column metadata; new map entry for _OPENMP at 5.2 --- CMakeLists.txt | 11 +++++++---- scripts/sweep_graph.py | 28 +++++++++++++++++++++------- src/common/Executor.cpp | 10 +--------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da4c68053..5ae850612 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,9 @@ ############################################################################### # C is required for googletest to find Threads -project(RAJAPerfSuite LANGUAGES CXX C) +cmake_policy(SET CMP0048 NEW) + +project(RAJAPerfSuite VERSION 0.11.0 LANGUAGES CXX C) cmake_minimum_required(VERSION 3.14.5) @@ -91,9 +93,10 @@ if (ENABLE_OPENMP) add_definitions(-DRUN_OPENMP) endif () -set(RAJA_PERFSUITE_VERSION_MAJOR 0) -set(RAJA_PERFSUITE_VERSION_MINOR 11) -set(RAJA_PERFSUITE_VERSION_PATCHLEVEL 0) +set(RAJA_PERFSUITE_VERSION_MAJOR ${RAJAPerfSuite_VERSION_MAJOR}) +set(RAJA_PERFSUITE_VERSION_MINOR ${RAJAPerfSuite_VERSION_MINOR}) +set(RAJA_PERFSUITE_VERSION_PATCHLEVEL ${RAJAPerfSuite_VERSION_PATCH}) +message(STATUS "CMAKE_PROJECT_VERSION:" ${CMAKE_PROJECT_VERSION}) set(RAJA_PERFSUITE_DEPENDS RAJA) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 75797f94f..6b2f1db21 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -94,18 +94,18 @@ def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_inde # we expect the following to overlap wrt redundancies to read_caliper_timing_file; they should be refactored def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): #print(sweep_index, sweep_subdir, run_size_index) - graph_frames = [] kernel_list = [] candidate_list = [] + kernel_metadata = {} - # per kernel metadata is Adiak key/values, so we need our kernel list + # per kernel metadata is in dataframe columns per kernel.tuning, so we need our kernel list allfiles = sorted(glob.glob(glob.escape(sweep_subdir) + "/*.cali")) # not all kernels run in every variant so capture kernel list across variants for f in allfiles: + #print(f) gf = cr.GraphFrame.from_caliperreader(f) metric = 'min#inclusive#sum#time.duration' #print(gf.inc_metrics) - graph_frames.append(gf) # extract kernel list kernel_index = -1 @@ -116,15 +116,29 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): # kernel_tuning_name is kernel.tuning in Caliper kernel_tuning_name = gf.dataframe.loc[nn, 'name'] kernel_name = kernel_tuning_name.split('.')[0] + if kernel_name not in kernel_metadata: + kernel_metadata[kernel_name] = {} if (len(dc.Data.include_kernels) == 0 or kernel_name in dc.Data.include_kernels) and (not kernel_name in dc.Data.exclude_kernels): candidate_list.append(kernel_name) + if len(kernel_metadata[kernel_name]) == 0: + metadata = {} + metadata['Problem size'] = gf.dataframe.loc[nn, 'any#any#max#ProblemSize'] + metadata['Reps'] = gf.dataframe.loc[nn, 'any#any#max#Reps'] + metadata['Iterations/rep'] = gf.dataframe.loc[nn, 'any#any#max#Iterations/Rep'] + metadata['Kernels/rep'] = gf.dataframe.loc[nn, 'any#any#max#Kernels/Rep'] + metadata['Bytes/rep'] = gf.dataframe.loc[nn, 'any#any#max#Bytes/Rep'] + metadata['FLOPS/rep'] = gf.dataframe.loc[nn, 'any#any#max#Flops/Rep'] + kernel_metadata[kernel_name] = metadata + #print("Kernel Column Metadata:" + kernel_name ) + #print(kernel_metadata[kernel_name]['Problem size']) + kernel_list = list(set(candidate_list) | set(kernel_list)) for kernel_name in kernel_list: if kernel_name not in dc.Data.kernels: dc.Data.add_kernel(kernel_name) kernel_index = dc.Data.kernels[kernel_name] - metadata = eval(gf.metadata[kernel_name]) + metadata = kernel_metadata[kernel_name] # use column metadata instead for info_kind, info_value in metadata.items(): if not info_kind in dc.Data.kinds: dc.Data.kinds[info_kind] = dc.Data.DataTree(info_kind, "info", dc.Data.info_axes) @@ -140,9 +154,9 @@ def read_caliper_runinfo_file(cr, sweep_index, sweep_subdir, run_size_index): dc.Data.axes["run_size"]: run_size_index, dc.Data.axes["kernel_index"]: kernel_index, } dc.Data.kinds[info_kind].set(axes_index, val) - sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) - run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) - kernel_index_name = dc.Data.get_index_name(dc.Data.axes["kernel_index"], kernel_index) + #sweep_dir_name = dc.Data.get_index_name(dc.Data.axes["sweep_dir_name"], sweep_index) + #run_size_name = dc.Data.get_index_name(dc.Data.axes["run_size"], run_size_index) + #kernel_index_name = dc.Data.get_index_name(dc.Data.axes["kernel_index"], kernel_index) #print("Info kind {0} {1} size {2} kernel {3} val {4}".format(info_kind,sweep_dir_name, run_size_name,kernel_index_name,val)) except ValueError: print("read_caliper_runinfo_file ValueError") diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 4a56d7fc4..b564a5abf 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -186,11 +186,9 @@ Executor::Executor(int argc, char** argv) } // Openmp section - // todo get lib : e.g libomp,libiomp5,libgomp etc : parse adiak::libraries via tool callback - // note version map only goes to 5.1; revise as needed #if defined(_OPENMP) std::unordered_map map{ - {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"},{201811,"5.0"},{202011,"5.1"}}; + {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"},{201811,"5.0"},{202011,"5.1"},{202111,"5.2"}}; string strval = map.at(_OPENMP); adiak::value("omp_version",strval.c_str()); strval = std::to_string(omp_get_max_threads()); @@ -991,12 +989,6 @@ void Executor::runSuite() } // loop over passes through suite #ifdef RAJA_PERFSUITE_USE_CALIPER - // setup per kernel Adiak meta data - for (size_t ik = 0; ik < kernels.size(); ++ik) { - KernelBase* kernel = kernels[ik]; - kernel->setKernelAdiakMeta(); - } // loop over kernels - // Flush Caliper data KernelBase::setCaliperMgrFlush(); #endif From a742ebea06f48e1ff0c2ca5c94e8c683d27aceea Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 8 Nov 2022 13:10:03 -0800 Subject: [PATCH 103/174] remove dirty git ignore for BLT in .gitmodules; add README.md documentation for Using Caliper in RAJAPerf --- .gitmodules | 1 - README.md | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 9c56db234..0993afb86 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,6 @@ [submodule "blt"] path = blt url = https://github.com/LLNL/blt.git - ignore = dirty [submodule "tpl/RAJA"] path = tpl/RAJA url = https://github.com/LLNL/RAJA.git diff --git a/README.md b/README.md index 2f3bd516b..a8946298d 100644 --- a/README.md +++ b/README.md @@ -811,6 +811,86 @@ RAJAPerf Suite uses continuous integration to ensure that changes added to the r RAJAPerf Suite shares its Gitlab CI workflow with other projects. The documentation is therefore [shared](https://radiuss-ci.readthedocs.io/en/latest). * * * +# Using Caliper +RAJAPerf Suite may also use Caliper instrumentation, with per variant output into Spot/Hatchet .cali files. Original timing is nested within Caliper annotations and so is not impacted when Caliper support is turned on. While Caliper is low-overhead it is not zero, so it will add a small amount of timing skew in its data as compared to the original. +For much more on Caliper, read it's documentation: +[Caliper](http://software.llnl.gov/Caliper/) +### Building with Caliper support +In Cmake scripts add +-DRAJA_PERFSUITE_USE_CALIPER=On + +Assuming you've built Caliper/Adiak with Spack or by hand (Note: build version caliper@master or caliper@2.9.0 when it's available) + +Add to -DCMAKE_PREFIX_PATH ${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak + +or use -Dcaliper_DIR -Dadiak_DIR package prefixes + +For Spack : raja_perf +caliper ^caliper@master + +For Uberenv: python3 scripts/uberenv/uberenv.py --spec +caliper ^caliper@master + +If you intend on passing nvtx or roctx annotation to Nvidia or AMD profiling tools, build Caliper with +cuda cuda_arch=XX or +rocm respectively. Then you can specify an additional Caliper service for nvtx or roctx like so: +roctx example: + +CALI_SERVICES_ENABLE=roctx rocprof --roctx-trace --hip-trace raja-perf.exe + +### Inspecting .cali files +1: Use cali-query in Caliper's bin directory: cali-query -T RAJA_OpenMP.cali + +2: Use Caliper's python reader (pip install caliper-reader or add the python/caliper-reader path in the cloned Caliper repository to PYTHONPATH.) +```python +import caliperreader as cr + +(records,globals) = cr.read_caliper_contents('RAJA_OpenMP.cali') + +variant = globals['variant'] +``` +For a more complete example of Caliper's python reader [caliper-reader](https://pypi.org/project/caliper-reader) + +3: Use Hatchet +```python +import hatchet as ht + +gf = ht.GraphFrame.from_caliperreader('RAJA_OpenMP.cali') + +print(gf.tree()) +``` +Find more on Hatchet here: [hatchet](https://github.com/LLNL/hatchet) + +### Collecting PAPI topdown statistics on Intel Architectures +On Intel systems, you can collect topdown PAPI counter statistics by using a command line switch + +--add-to-spot-config, -atsc [Default is none] + +appends additional parameters to the built-in Caliper spot config + +Example to include some PAPI counters (Intel arch) + +-atsc topdown.all + +When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. + +This will hopefully allow you to correlate using hardware counters to memory or core bound behavior. Note that small kernels may result in anomalous readings, so it is suggested to use a larger problem size. + +### Generating trace events (time-series) for viewing in chrome://tracing or [Perfetto](https://ui.perfetto.dev/) +Use Caliper's event trace service to collect timestamp info, where kernel timing can be viewed using browser trace profile views + +CALI_CONFIG=event-trace,event.timestamps ./raja-perf.exe -ek PI_ATOMIC INDEXLIST -sp + +This will produce a separate .cali file with date prefix which looks something like 221108-100718_724_ZKrHC68b77Yd.cali + +Then we'll need to convert this .cali file to JSON records, but first we need to make sure Caliper's python reader is available in the PYTHONPATH, + +$ export PYTHONPATH=/python/caliper-reader + +then run cali2traceevent.py. Example: + +python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xvetnu.cali RAJAPerf.trace.json + +You can then load the resulting JSON file either in Chrome by going to chrome://tracing or in Perfetto. + +[Todo] show trace.cuda and other options for PAPI, CUDA, or ROCM activities + # Contributions From ef804d47972e77268a0dd2345c74c78360630a64 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 8 Nov 2022 13:21:47 -0800 Subject: [PATCH 104/174] add Use Caliper to table of contents in README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a8946298d..7f22f0f65 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,10 @@ Table of Contents 3. [Generated output](#generated-output) 4. [Adding kernels and variants](#adding-kernels-and-variants) 4. [Continuous Integration](#continuous-integration) -5. [Contributions](#contributions) -6. [Authors](#authors) -7. [Copyright and Release](#copyright-and-release) +5. [Using Caliper](#using-caliper) +6. [Contributions](#contributions) +7. [Authors](#authors) +8. [Copyright and Release](#copyright-and-release) * * * From 752f6437c6a419c8737a1e05702451cd3bd11868 Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 8 Nov 2022 13:28:34 -0800 Subject: [PATCH 105/174] adjust for github render --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f22f0f65..70488f5f4 100644 --- a/README.md +++ b/README.md @@ -822,7 +822,7 @@ In Cmake scripts add Assuming you've built Caliper/Adiak with Spack or by hand (Note: build version caliper@master or caliper@2.9.0 when it's available) -Add to -DCMAKE_PREFIX_PATH ${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak +Add to -DCMAKE_PREFIX_PATH ;${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak or use -Dcaliper_DIR -Dadiak_DIR package prefixes From ccdfc0eba2dd184f41c6833fbe24138965bd4757 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 9 Nov 2022 14:55:31 -0800 Subject: [PATCH 106/174] Add event-trace info for CUDA and ROCM; to be viewed in chrome or perfetto --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 70488f5f4..56953cb7c 100644 --- a/README.md +++ b/README.md @@ -890,9 +890,15 @@ python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xv You can then load the resulting JSON file either in Chrome by going to chrome://tracing or in Perfetto. -[Todo] show trace.cuda and other options for PAPI, CUDA, or ROCM activities +For CUDA, assuming you built Caliper with CUDA support, you can collect and combine trace information for memcpy, kernel launch, synchronization, and kernels; with example: +CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp +However, when you run cali2traceevent.py you need to add --sort option before the filenames. + +~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json + +For HIP substitute rocm.activities vs. cuda.activities; note currently there is no analog trace.rocm. # Contributions The RAJA Performance Suite is a work-in-progress, with new kernels and variants From 1ec65b56627b8ca758158c308a469f056f89f88b Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 9 Nov 2022 15:53:32 -0800 Subject: [PATCH 107/174] noticed an issue with rendering text between < > brackets on github --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56953cb7c..29385381e 100644 --- a/README.md +++ b/README.md @@ -882,7 +882,7 @@ This will produce a separate .cali file with date prefix which looks something l Then we'll need to convert this .cali file to JSON records, but first we need to make sure Caliper's python reader is available in the PYTHONPATH, -$ export PYTHONPATH=/python/caliper-reader +$ export PYTHONPATH=caliper-source-dir/python/caliper-reader then run cali2traceevent.py. Example: From d5dbda0689607da7464901e9d3e770bbae774e71 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 14 Nov 2022 12:21:47 -0800 Subject: [PATCH 108/174] minor edits to README -- mostly format/highlight tags --- README.md | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 29385381e..ce4c78fa5 100644 --- a/README.md +++ b/README.md @@ -814,29 +814,40 @@ RAJAPerf Suite shares its Gitlab CI workflow with other projects. The documentat * * * # Using Caliper RAJAPerf Suite may also use Caliper instrumentation, with per variant output into Spot/Hatchet .cali files. Original timing is nested within Caliper annotations and so is not impacted when Caliper support is turned on. While Caliper is low-overhead it is not zero, so it will add a small amount of timing skew in its data as compared to the original. -For much more on Caliper, read it's documentation: +For much more on Caliper, read it's documentation here: [Caliper](http://software.llnl.gov/Caliper/) ### Building with Caliper support +Build against these Caliper versions +```asm +caliper@master +caliper@2.9.0 (when available) +``` In Cmake scripts add +```asm -DRAJA_PERFSUITE_USE_CALIPER=On +``` -Assuming you've built Caliper/Adiak with Spack or by hand (Note: build version caliper@master or caliper@2.9.0 when it's available) -Add to -DCMAKE_PREFIX_PATH ;${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak +Add to -DCMAKE_PREFIX_PATH +```CMake +;${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak +``` or use -Dcaliper_DIR -Dadiak_DIR package prefixes -For Spack : raja_perf +caliper ^caliper@master +For Spack : ```raja_perf +caliper ^caliper@master``` -For Uberenv: python3 scripts/uberenv/uberenv.py --spec +caliper ^caliper@master +For Uberenv: ```python3 scripts/uberenv/uberenv.py --spec +caliper ^caliper@master``` If you intend on passing nvtx or roctx annotation to Nvidia or AMD profiling tools, build Caliper with +cuda cuda_arch=XX or +rocm respectively. Then you can specify an additional Caliper service for nvtx or roctx like so: roctx example: +```asm CALI_SERVICES_ENABLE=roctx rocprof --roctx-trace --hip-trace raja-perf.exe +``` ### Inspecting .cali files -1: Use cali-query in Caliper's bin directory: cali-query -T RAJA_OpenMP.cali +1: Use cali-query in Caliper's bin directory: ```cali-query -T RAJA_OpenMP.cali``` 2: Use Caliper's python reader (pip install caliper-reader or add the python/caliper-reader path in the cloned Caliper repository to PYTHONPATH.) ```python @@ -861,13 +872,13 @@ Find more on Hatchet here: [hatchet](https://github.com/LLNL/hatchet) ### Collecting PAPI topdown statistics on Intel Architectures On Intel systems, you can collect topdown PAPI counter statistics by using a command line switch ---add-to-spot-config, -atsc [Default is none] +```--add-to-spot-config, -atsc [Default is none]``` appends additional parameters to the built-in Caliper spot config Example to include some PAPI counters (Intel arch) --atsc topdown.all +```-atsc topdown.all``` When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. @@ -876,27 +887,27 @@ This will hopefully allow you to correlate using hardware counters to memory or ### Generating trace events (time-series) for viewing in chrome://tracing or [Perfetto](https://ui.perfetto.dev/) Use Caliper's event trace service to collect timestamp info, where kernel timing can be viewed using browser trace profile views -CALI_CONFIG=event-trace,event.timestamps ./raja-perf.exe -ek PI_ATOMIC INDEXLIST -sp +```CALI_CONFIG=event-trace,event.timestamps ./raja-perf.exe -ek PI_ATOMIC INDEXLIST -sp``` This will produce a separate .cali file with date prefix which looks something like 221108-100718_724_ZKrHC68b77Yd.cali Then we'll need to convert this .cali file to JSON records, but first we need to make sure Caliper's python reader is available in the PYTHONPATH, -$ export PYTHONPATH=caliper-source-dir/python/caliper-reader +```$ export PYTHONPATH=caliper-source-dir/python/caliper-reader``` then run cali2traceevent.py. Example: -python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xvetnu.cali RAJAPerf.trace.json +```python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xvetnu.cali RAJAPerf.trace.json``` You can then load the resulting JSON file either in Chrome by going to chrome://tracing or in Perfetto. For CUDA, assuming you built Caliper with CUDA support, you can collect and combine trace information for memcpy, kernel launch, synchronization, and kernels; with example: -CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp +```CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp``` However, when you run cali2traceevent.py you need to add --sort option before the filenames. -~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json +```~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json``` For HIP substitute rocm.activities vs. cuda.activities; note currently there is no analog trace.rocm. # Contributions From 3ae59ac8df2c2409a5d0f3954495c111f502a47c Mon Sep 17 00:00:00 2001 From: holger Date: Tue, 15 Nov 2022 14:32:23 -0800 Subject: [PATCH 109/174] advance spack commit in uberenv config to v0.19.0 via hash --- .uberenv_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.uberenv_config.json b/.uberenv_config.json index bae8bf1f6..60aed35bd 100644 --- a/.uberenv_config.json +++ b/.uberenv_config.json @@ -4,7 +4,7 @@ "package_final_phase" : "hostconfig", "package_source_dir" : "../..", "spack_url": "https://github.com/spack/spack.git", -"spack_branch": "v0.18.1", +"spack_commit": "bb8b4f9", "spack_activate" : {}, "spack_configs_path": "tpl/RAJA/scripts/radiuss-spack-configs", "spack_packages_path": "scripts/spack_packages", From 22c8f5b2dcc19e975a7b6ba30d9499dc930c2905 Mon Sep 17 00:00:00 2001 From: holger Date: Thu, 17 Nov 2022 14:45:17 -0800 Subject: [PATCH 110/174] setup new adiak key ProblemSizeRunParam to reflect command line arg --size or --sizefact; cleanup some unused code --- src/common/Executor.cpp | 7 +++---- src/common/KernelBase.cpp | 20 -------------------- src/common/KernelBase.hpp | 1 - 3 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index b564a5abf..c2acc01b2 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -176,13 +176,12 @@ Executor::Executor(int argc, char** argv) adiak::value("machine_build", cc.adiak_machine_build); } - adiak::value("Tuning","default"); - adiak::value("ProblemSize",1.0); + adiak::value("ProblemSizeRunParam",(double)1.0); adiak::value("SizeMeaning",run_params.SizeMeaningToStr(run_params.getSizeMeaning()).c_str()); if (run_params.getSizeMeaning() == RunParams::SizeMeaning::Factor) { - adiak::value("ProblemSize",run_params.getSizeFactor()); + adiak::value("ProblemSizeRunParam",(double)run_params.getSizeFactor()); } else if (run_params.getSizeMeaning() == RunParams::SizeMeaning::Direct) { - adiak::value("ProblemSize",run_params.getSize()); + adiak::value("ProblemSizeRunParam",(double)run_params.getSize()); } // Openmp section diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index bb94ac8bb..fa5beb63c 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -356,26 +356,6 @@ void KernelBase::print(std::ostream& os) const } #ifdef RAJA_PERFSUITE_USE_CALIPER -void KernelBase::setKernelAdiakMeta() -{ - std::string problem_size = std::to_string(getActualProblemSize()); - std::string reps = std::to_string(getRunReps()); - std::string iters_rep = std::to_string(getItsPerRep()); - std::string kerns_rep = std::to_string(getKernelsPerRep()); - std::string bytes_rep = std::to_string(getBytesPerRep()); - std::string flops_rep = std::to_string(getFLOPsPerRep()); - - // put into python dict form - std::string valStr = "{'Problem size': "+problem_size; - valStr += ",'Reps':"+reps; - valStr += ",'Iterations/rep': "+iters_rep; - valStr += ",'Kernels/rep': "+kerns_rep; - valStr += ",'Bytes/rep': "+bytes_rep; - valStr += ",'FLOPS/rep': "+flops_rep; - valStr += "}"; - adiak::value(getName().c_str(),valStr.c_str()); -} - void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { // attributes are class variables initialized in ctor diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index da433c208..e20e9eb23 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -283,7 +283,6 @@ class KernelBase #ifdef RAJA_PERFSUITE_USE_CALIPER void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } - void setKernelAdiakMeta(); void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); void doOnceCaliMetaEnd(VariantID vid, size_t tune_idx); static void setCaliperMgrVariant(VariantID vid, const std::string& outdir, const std::string& addToConfig) From 449a705454b0b70be2d70a7c7a114846aed35486 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Thu, 17 Nov 2022 15:27:29 -0800 Subject: [PATCH 111/174] fix _OPENMP version detect, including out-of-range for map version entries with try/catch, map 201611 to 4.5 (Intel) --- src/common/Executor.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index c2acc01b2..04813ded0 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -186,9 +186,18 @@ Executor::Executor(int argc, char** argv) // Openmp section #if defined(_OPENMP) + std::string strval = ""; + std::string test = std::to_string(_OPENMP); + std::unordered_map map{ - {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"},{201811,"5.0"},{202011,"5.1"},{202111,"5.2"}}; - string strval = map.at(_OPENMP); + {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"},{201611,"4.5"},{201811,"5.0"},{202011,"5.1"},{202111,"5.2"}}; + + try { + strval = map.at(_OPENMP); + } catch(...) { + strval="Version Not Detected"; + } + std::cerr << "_OPENMP:" << test << " at version: " << strval << "\n"; adiak::value("omp_version",strval.c_str()); strval = std::to_string(omp_get_max_threads()); adiak::value("omp_max_threads",strval.c_str()); From 592c85418c711d74d73f1899dd512da088f0027a Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 7 Dec 2022 17:47:44 -0800 Subject: [PATCH 112/174] More detail for the topdown/PAPI section of the documentation --- README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ce4c78fa5..35648879a 100644 --- a/README.md +++ b/README.md @@ -814,8 +814,14 @@ RAJAPerf Suite shares its Gitlab CI workflow with other projects. The documentat * * * # Using Caliper RAJAPerf Suite may also use Caliper instrumentation, with per variant output into Spot/Hatchet .cali files. Original timing is nested within Caliper annotations and so is not impacted when Caliper support is turned on. While Caliper is low-overhead it is not zero, so it will add a small amount of timing skew in its data as compared to the original. -For much more on Caliper, read it's documentation here: +For much more on Caliper, read it's documentation here: [Caliper](http://software.llnl.gov/Caliper/) + +Caliper annotation is in the following tree structure +>* Variant +> * Group +> * Kernel +> * Kernel.Tuning ### Building with Caliper support Build against these Caliper versions ```asm @@ -864,8 +870,8 @@ For a more complete example of Caliper's python reader [caliper-reader](https:// import hatchet as ht gf = ht.GraphFrame.from_caliperreader('RAJA_OpenMP.cali') - print(gf.tree()) +print(gf.show_metric_columns()) ``` Find more on Hatchet here: [hatchet](https://github.com/LLNL/hatchet) @@ -880,9 +886,62 @@ Example to include some PAPI counters (Intel arch) ```-atsc topdown.all``` -When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. +Caliper's topdown service generates derived metrics from raw PAPI counters; a hierarchy of metrics to identify bottlenecks in out-of-order processors. This is based on an an approach described in Ahmad Yasin's paper *A Top-Down Method for Performance Analysis and Counters Architecture*. The toplevel of the hierarchy has a reliable set of four derived metrics or starting weights (sum to 1.0) which include: + +1. Frontend Bound: stalls attributed to the front end which is responsible for fetching and decoding program code. +2. Bad Speculation: fraction of the workload that is affected by incorrect execution paths, i.e. branch misprediction penalties +3. Retiring: Increases in this category reflects overall Instructions Per Cycle (IPC) fraction which is good in general. However, a large retiring fraction for non-vectorized code could also be a hint to the user to vectorize their code (see Yasin's paper) +4. Backend Bound: Memory Bound where execution stalls are related to the memory subsystem, or Core Bound where execution unit occupancy is sub-optimal lowering IPC (more compiler dependent) + +> Backend Bound = 1 - (Frontend Bound + Bad Speculation + Retiring) + +Caveats: + +1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. +2. Small kernels should be run at large problem sizes to minimize anomalous readings +3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation +4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepency + +```-atsc topdown-counters.all``` + +A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Kernel.Tuning) nodes across several files using -atsc topdown.toplevel + +```python + def load_toplevel(cr): + md = {} + metric = [] + metric.append('any#any#topdown.retiring') + metric.append('any#any#topdown.backend_bound') + metric.append('any#any#topdown.frontend_bound') + metric.append('any#any#topdown.bad_speculation') + values = np.zeros((3, 4)) + files = sorted(glob.glob('data/*topleve*.cali')) + findex = 0 + for f in files: + print(f) + gf = cr.GraphFrame.from_caliperreader(f) + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + for mindex in range(0, 4): + values[findex, mindex] = gf.dataframe.loc[nn, metric[mindex]] + findex += 1 + for mindex in range(0,len(metric)): + md[metric[mindex]] = np.average(values[:,mindex]) + return values,md +``` + + +> Caveat for the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning + +> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Model of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. + +[Yasin's Paper](https://www.researchgate.net/publication/269302126_A_Top-Down_method_for_performance_analysis_and_counters_architecture) + +[Vtune-cookbook topdown method](https://www.intel.com/content/www/us/en/develop/documentation/vtune-cookbook/top/methodologies/top-down-microarchitecture-analysis-method.html) -This will hopefully allow you to correlate using hardware counters to memory or core bound behavior. Note that small kernels may result in anomalous readings, so it is suggested to use a larger problem size. +[Automatic Generation of Models of Microarchitectures](https://uops.info/dissertation.pdf) ### Generating trace events (time-series) for viewing in chrome://tracing or [Perfetto](https://ui.perfetto.dev/) Use Caliper's event trace service to collect timestamp info, where kernel timing can be viewed using browser trace profile views From dfb6ad366951f9652e74197ea19a0b25dfe36044 Mon Sep 17 00:00:00 2001 From: jonesholger Date: Wed, 7 Dec 2022 18:04:01 -0800 Subject: [PATCH 113/174] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 35648879a..1e004adc3 100644 --- a/README.md +++ b/README.md @@ -818,10 +818,10 @@ For much more on Caliper, read it's documentation here: [Caliper](http://software.llnl.gov/Caliper/) Caliper annotation is in the following tree structure ->* Variant -> * Group -> * Kernel -> * Kernel.Tuning +>Variant +>   Group +>     Kernel +>       Kernel.Tuning ### Building with Caliper support Build against these Caliper versions ```asm From ca71f90b742e32dfaa6b9d2df779e92ccfec2033 Mon Sep 17 00:00:00 2001 From: jonesholger Date: Wed, 7 Dec 2022 18:14:50 -0800 Subject: [PATCH 114/174] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e004adc3..09aef7a9f 100644 --- a/README.md +++ b/README.md @@ -935,7 +935,7 @@ A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Ker > Caveat for the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning -> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Model of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. +> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Models of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. [Yasin's Paper](https://www.researchgate.net/publication/269302126_A_Top-Down_method_for_performance_analysis_and_counters_architecture) From e8ade7238bf0c7eb4b3ba8ff09994ba43be6cbf1 Mon Sep 17 00:00:00 2001 From: jonesholger Date: Wed, 7 Dec 2022 18:30:49 -0800 Subject: [PATCH 115/174] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09aef7a9f..9d0231b2a 100644 --- a/README.md +++ b/README.md @@ -900,7 +900,7 @@ Caveats: 1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. 2. Small kernels should be run at large problem sizes to minimize anomalous readings 3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation -4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepency +4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepancy ```-atsc topdown-counters.all``` From fc5e6d340ddd35fff9c646963f0f1a797e3d56f9 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 12 Dec 2022 14:41:20 -0800 Subject: [PATCH 116/174] update uberenv config file for Spack v0.19.0; add Caliper and Adiak prefixes to Spack package.py --- .uberenv_config.json | 2 +- scripts/spack_packages/raja_perf/package.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.uberenv_config.json b/.uberenv_config.json index 60aed35bd..1c461c4f3 100644 --- a/.uberenv_config.json +++ b/.uberenv_config.json @@ -4,7 +4,7 @@ "package_final_phase" : "hostconfig", "package_source_dir" : "../..", "spack_url": "https://github.com/spack/spack.git", -"spack_commit": "bb8b4f9", +"spack_branch": "v0.19.0", "spack_activate" : {}, "spack_configs_path": "tpl/RAJA/scripts/radiuss-spack-configs", "spack_packages_path": "scripts/spack_packages", diff --git a/scripts/spack_packages/raja_perf/package.py b/scripts/spack_packages/raja_perf/package.py index 05a2c25ad..ceb1afff0 100644 --- a/scripts/spack_packages/raja_perf/package.py +++ b/scripts/spack_packages/raja_perf/package.py @@ -355,6 +355,10 @@ def hostconfig(self, spec, prefix, py_site_pkgs_dir=None): cfg.write(cmake_cache_option("ENABLE_BENCHMARKS", 'tests=benchmarks' in spec)) cfg.write(cmake_cache_option("ENABLE_TESTS", not 'tests=none' in spec or self.run_tests)) cfg.write(cmake_cache_option("RAJA_PERFSUITE_USE_CALIPER","+caliper" in spec)) + if "caliper" in self.spec: + cfg.write(cmake_cache_path("caliper_DIR", spec["caliper"].prefix+"/share/cmake/caliper/")) + cfg.write(cmake_cache_path("adiak_DIR", spec["adiak"].prefix+"/lib/cmake/adiak/")) + ####################### # Close and save From a2708a1f2e3fae648f545416008ca285d04de36b Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 1 Dec 2022 09:10:39 +0100 Subject: [PATCH 117/174] Update (and fix) flags syntax in CI --- .gitlab/lassen-build-and-test-extra.yml | 22 +++++++++++----------- .gitlab/ruby-build-and-test-extra.yml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index aad9c6c2e..b7808dbe9 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -23,42 +23,42 @@ ibm_clang_9_0_0: # Overriding shared spec: Allow failures ibm_clang_9_0_0_gcc_8_3_1: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %clang@ibm.9.0.0 cxxflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" extends: .build_and_test_on_lassen allow_failure: true # Overriding shared spec: Extra flags gcc_8_3_1: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %gcc@8.3.1 cxxflags=\"-finline-functions -finline-limit=20000\" cflags=\"-finline-functions -finline-limit=20000\" ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %gcc@8.3.1 cxxflags==\"-finline-functions -finline-limit=20000\" cflags==\"-finline-functions -finline-limit=20000\" ${PROJECT_LASSEN_DEPS}" extends: .build_and_test_on_lassen # Overriding shared spec: Longer allocation + Allow failures pgi_20_4_gcc_8_3_1: - extends: .build_and_test_on_lassen variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %pgi@20.4 cxxflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %pgi@20.4 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" + extends: .build_and_test_on_lassen allow_failure: true # Overriding shared spec: Longer allocation + Extra flags xl_16_1_1_12: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags=\"-qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036 ${PROJECT_LASSEN_DEPS}\"" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"-qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036 ${PROJECT_LASSEN_DEPS}\"" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 50" extends: .build_and_test_on_lassen # Overriding shared spec: Longer allocation + Extra flags xl_16_1_1_12_gcc_8_3_1: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 50" extends: .build_and_test_on_lassen # Overriding shared spec: Longer allocation + Allow failures ibm_clang_9_0_0_gcc_8_3_1_cuda_10_1_168: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" extends: .build_and_test_on_lassen allow_failure: true @@ -66,7 +66,7 @@ ibm_clang_9_0_0_gcc_8_3_1_cuda_10_1_168: # Overriding shared spec: Extra flags + Longer allocation + Allow failure xl_16_1_1_12_cuda_11_1_0: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags=\"-qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"-qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" allow_failure: true extends: .build_and_test_on_lassen @@ -74,7 +74,7 @@ xl_16_1_1_12_cuda_11_1_0: # Overriding shared spec: Extra flags + Longer allocation + Allow failure xl_16_1_1_12_gcc_8_3_1_cuda_11_1_0: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags\"=--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cflags=--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" allow_failure: true extends: .build_and_test_on_lassen @@ -102,7 +102,7 @@ clang_14_0_5: clang_12_0_1_cuda_11_5_0: variables: - SPEC: " +openmp +cuda cuda_arch=70 %clang@12.0.1 cxxflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags=\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@11.5.0" + SPEC: " +openmp +cuda cuda_arch=70 %clang@12.0.1 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@11.5.0" extends: .build_and_test_on_lassen gcc_8_3_1_cuda_11_1_0: @@ -127,7 +127,7 @@ clang_13_0_1_libcpp: clang_14_0_5_asan: variables: - SPEC: " +openmp %clang@14.0.5 cxxflags=-fsanitize=address" + SPEC: " +openmp %clang@14.0.5 cxxflags==\"-fsanitize=address\"" ASAN_OPTIONS: "detect_leaks=1" extends: .build_and_test_on_lassen diff --git a/.gitlab/ruby-build-and-test-extra.yml b/.gitlab/ruby-build-and-test-extra.yml index 68a6bf0d7..543adca42 100644 --- a/.gitlab/ruby-build-and-test-extra.yml +++ b/.gitlab/ruby-build-and-test-extra.yml @@ -23,7 +23,7 @@ gcc_8_1_0: # Overriding shared spec: Allow failures pgi_20_1_gcc_local_8_3_1: variables: - SPEC: " ${PROJECT_RUBY_VARIANTS} %pgi@20.1 cxxflags\"=-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" cflags\"=-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" fflags=\"-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" ${PROJECT_RUBY_DEPS}" + SPEC: " ${PROJECT_RUBY_VARIANTS} %pgi@20.1 cxxflags==\"-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" cflags==\"-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" fflags==\"-rc=/usr/workspace/umpire/pgi/x86_64/local-gcc-8.3.1-rc\" ${PROJECT_RUBY_DEPS}" extends: .build_and_test_on_ruby allow_failure: true From e68710e505c85c64a0f120c42984f3a96774e138 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 1 Dec 2022 09:27:35 +0100 Subject: [PATCH 118/174] Update shared CI --- .gitlab-ci.yml | 11 +++++++++-- tpl/RAJA | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 34c636131..4f53f8eff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,9 @@ # We define the following GitLab pipeline variables: variables: +# Required information about GitHub repository + GITHUB_PROJECT_NAME: "RAJAPerf" + GITHUB_PROJECT_ORG: "LLNL" # Use the umdev service user to run CI. This prevents from running pipelines as # an actual user. LLNL_SERVICE_USER: umdev @@ -50,13 +53,17 @@ stages: include: - local: '.gitlab/custom-jobs-and-variables.yml' - project: 'radiuss/radiuss-shared-ci' - ref: v2022.09.0 + ref: v2022.12.0 file: '${CI_MACHINE}-build-and-test.yml' - local: '.gitlab/${CI_MACHINE}-build-and-test-extra.yml' strategy: depend forward: pipeline_variables: true -# pipelines subscribed by the project include: + # [Optional] checks preliminary to running the actual CI test + #- project: 'radiuss/radiuss-shared-ci' + # ref: v2022.12.0 + # file: 'preliminary-ignore-draft-pr.yml' + # pipelines subscribed by the project - local: .gitlab/subscribed-pipelines.yml diff --git a/tpl/RAJA b/tpl/RAJA index c2a6b1740..b8aa3a6b1 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit c2a6b1740759ae3ae7c85b35e20dbffbe235355d +Subproject commit b8aa3a6b1160849729f07e35067df4d3df633177 From a31768eec206c5c03e81faa47ca43a03487cf95c Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 1 Dec 2022 18:04:55 +0100 Subject: [PATCH 119/174] Attempt to build with caliper --- .gitlab/ruby-build-and-test-extra.yml | 6 ++++++ scripts/spack_packages/raja_perf/package.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitlab/ruby-build-and-test-extra.yml b/.gitlab/ruby-build-and-test-extra.yml index 543adca42..08a1ca3c6 100644 --- a/.gitlab/ruby-build-and-test-extra.yml +++ b/.gitlab/ruby-build-and-test-extra.yml @@ -35,6 +35,12 @@ pgi_20_1_gcc_local_8_3_1: # ${PROJECT__DEPS} in the extra jobs. There is no reason not to fully # describe the spec here. +gcc_8_3_1: + variables: + SPEC: " ${PROJECT_RUBY_VARIANTS} +caliper %gcc@8.3.1 ${PROJECT_RUBY_DEPS}" + RUBY_BUILD_AND_TEST_JOB_ALLOC: "--time=60 --nodes=1" + extends: .build_and_test_on_ruby + icpc_19_1_0: variables: SPEC: " +openmp %intel@19.1.0" diff --git a/scripts/spack_packages/raja_perf/package.py b/scripts/spack_packages/raja_perf/package.py index d15a42a4f..c8861b883 100644 --- a/scripts/spack_packages/raja_perf/package.py +++ b/scripts/spack_packages/raja_perf/package.py @@ -373,7 +373,7 @@ def hostconfig(self, spec, prefix, py_site_pkgs_dir=None): if "caliper" in self.spec: cfg.write(cmake_cache_path("caliper_DIR", spec["caliper"].prefix+"/share/cmake/caliper/")) cfg.write(cmake_cache_path("adiak_DIR", spec["adiak"].prefix+"/lib/cmake/adiak/")) - + ####################### # Close and save From 97edc528a2cba9e6e7e854c6f0a34a969d8d447b Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 9 Jan 2023 16:55:42 +0100 Subject: [PATCH 120/174] Update tpl/RAJA to get latest changes in RAJA CI --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index b8aa3a6b1..28fbae0c9 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit b8aa3a6b1160849729f07e35067df4d3df633177 +Subproject commit 28fbae0c957d223ea88685669f5eb2108aca84d1 From 03d256290de9aac11a0e7244e54aa460732154d3 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 9 Jan 2023 20:55:35 +0100 Subject: [PATCH 121/174] Update extra specs in lassen CI --- .gitlab/lassen-build-and-test-extra.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index b7808dbe9..736dea65f 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -27,6 +27,14 @@ ibm_clang_9_0_0_gcc_8_3_1: extends: .build_and_test_on_lassen allow_failure: true +# Overriding shared spec: Longer allocation + Allow failures +ibm_clang_9_0_0_gcc_8_3_1_cuda_10_1_168: + variables: + SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" + LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" + extends: .build_and_test_on_lassen + allow_failure: true + # Overriding shared spec: Extra flags gcc_8_3_1: variables: @@ -51,24 +59,22 @@ xl_16_1_1_12: # Overriding shared spec: Longer allocation + Extra flags xl_16_1_1_12_gcc_8_3_1: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cuda_arch=70 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 50" extends: .build_and_test_on_lassen -# Overriding shared spec: Longer allocation + Allow failures -ibm_clang_9_0_0_gcc_8_3_1_cuda_10_1_168: +# Overriding shared spec: Longer allocation + Extra flags +xl_16_1_1_12_gcc_7_3_1_cuda_10_1_168: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" + SPEC: "${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-7.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-7.3.1\" cuda_arch=70 ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" extends: .build_and_test_on_lassen - allow_failure: true # Overriding shared spec: Extra flags + Longer allocation + Allow failure xl_16_1_1_12_cuda_11_1_0: variables: SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"-qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" - allow_failure: true extends: .build_and_test_on_lassen # Overriding shared spec: Extra flags + Longer allocation + Allow failure @@ -76,7 +82,6 @@ xl_16_1_1_12_gcc_8_3_1_cuda_11_1_0: variables: SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qpic -qsmp=omp -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cuda_arch=70 ^cuda@11.1.0 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" - allow_failure: true extends: .build_and_test_on_lassen From 49659db357ad07e99ee6b74bb00b1e61f93813e5 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Tue, 10 Jan 2023 10:43:16 +0100 Subject: [PATCH 122/174] Specify cuda_arch when building with Cuda --- .gitlab/lassen-build-and-test-extra.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index 736dea65f..6fa58e8b4 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -30,7 +30,7 @@ ibm_clang_9_0_0_gcc_8_3_1: # Overriding shared spec: Longer allocation + Allow failures ibm_clang_9_0_0_gcc_8_3_1_cuda_10_1_168: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} +cuda %clang@ibm.9.0.0 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cuda_arch=70 ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" extends: .build_and_test_on_lassen allow_failure: true From e5bdd6c4db17818d0603300ad5a945a2c1b007e1 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Tue, 10 Jan 2023 10:48:30 +0100 Subject: [PATCH 123/174] Fix caliper CI job name --- .gitlab/ruby-build-and-test-extra.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/ruby-build-and-test-extra.yml b/.gitlab/ruby-build-and-test-extra.yml index 08a1ca3c6..b8db43fa3 100644 --- a/.gitlab/ruby-build-and-test-extra.yml +++ b/.gitlab/ruby-build-and-test-extra.yml @@ -35,7 +35,7 @@ pgi_20_1_gcc_local_8_3_1: # ${PROJECT__DEPS} in the extra jobs. There is no reason not to fully # describe the spec here. -gcc_8_3_1: +gcc_8_3_1_caliper: variables: SPEC: " ${PROJECT_RUBY_VARIANTS} +caliper %gcc@8.3.1 ${PROJECT_RUBY_DEPS}" RUBY_BUILD_AND_TEST_JOB_ALLOC: "--time=60 --nodes=1" From 54919cc627ed7c394f37bd8b10e44e62ce18882c Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 12:02:26 +0100 Subject: [PATCH 124/174] Add the option to not build and test in /dev/shm + copy caliper files in dedicated directory --- scripts/gitlab/build_and_test.sh | 33 +++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index f05571e8d..d918a06ce 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -27,10 +27,11 @@ spec=${SPEC:-""} job_unique_id=${CI_JOB_ID:-""} raja_version=${UPDATE_RAJA:-""} sys_type=${SYS_TYPE:-""} +use_dev_shm=${USE_DEV_SHM:-True} prefix="" -if [[ -d /dev/shm ]] +if [[ -d /dev/shm && $use_dev_shm ]] then prefix="/dev/shm/${hostname}" if [[ -z ${job_unique_id} ]]; then @@ -43,6 +44,9 @@ then prefix="${prefix}-${job_unique_id}" mkdir -p ${prefix} +else + prefix="spack-and-build-root" + mkdir ${prefix} fi # Dependencies @@ -62,20 +66,15 @@ then exit 1 fi - prefix_opt="" + prefix_opt="--prefix=${prefix}" - if [[ -d /dev/shm ]] - then - prefix_opt="--prefix=${prefix}" - - # We force Spack to put all generated files (cache and configuration of - # all sorts) in a unique location so that there can be no collision - # with existing or concurrent Spack. - spack_user_cache="${prefix}/spack-user-cache" - export SPACK_DISABLE_LOCAL_CONFIG="" - export SPACK_USER_CACHE_PATH="${spack_user_cache}" - mkdir -p ${spack_user_cache} - fi + # We force Spack to put all generated files (cache and configuration of + # all sorts) in a unique location so that there can be no collision + # with existing or concurrent Spack. + spack_user_cache="${prefix}/spack-user-cache" + export SPACK_DISABLE_LOCAL_CONFIG="" + export SPACK_USER_CACHE_PATH="${spack_user_cache}" + mkdir -p ${spack_user_cache} ./tpl/RAJA/scripts/uberenv/uberenv.py --project-json=".uberenv_config.json" --spec="${spec}" ${prefix_opt} @@ -118,7 +117,7 @@ hostconfig=$(basename ${hostconfig_path}) # Build Directory if [[ -z ${build_root} ]] then - if [[ -d /dev/shm ]] + if [[ -d /dev/shm && $use_dev_shm ]] then build_root="${prefix}" else @@ -250,6 +249,10 @@ then xsltproc -o junit.xml ${project_dir}/blt/tests/ctest-to-junit.xsl Testing/*/Test.xml mv junit.xml ${project_dir}/junit.xml + cali_dir=${project_dir}/caliper_reports + mkdir -p ${cali_dir} + cp test/*.cali ${cali_dir} + if grep -q "Errors while running CTest" ./tests_output.txt then echo "ERROR: failure(s) while running CTest" && exit 1 From b30035864fc5de7d1e3c0795f7a94bd1c4b71828 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 12:07:17 +0100 Subject: [PATCH 125/174] Do not use /dev/shm for caliper job --- .gitlab/ruby-build-and-test-extra.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab/ruby-build-and-test-extra.yml b/.gitlab/ruby-build-and-test-extra.yml index b8db43fa3..452db6a0d 100644 --- a/.gitlab/ruby-build-and-test-extra.yml +++ b/.gitlab/ruby-build-and-test-extra.yml @@ -45,4 +45,6 @@ icpc_19_1_0: variables: SPEC: " +openmp %intel@19.1.0" RUBY_BUILD_AND_TEST_JOB_ALLOC: "--time=40 --nodes=1" + before_script: + - export USE_DEV_SHM=False extends: .build_and_test_on_ruby From fc2981a9eaf44a1ccf8d076945c945a53cafa771 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 13:39:16 +0100 Subject: [PATCH 126/174] Protect cali files copy with existence check --- scripts/gitlab/build_and_test.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index d918a06ce..f30290964 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -249,9 +249,11 @@ then xsltproc -o junit.xml ${project_dir}/blt/tests/ctest-to-junit.xsl Testing/*/Test.xml mv junit.xml ${project_dir}/junit.xml - cali_dir=${project_dir}/caliper_reports - mkdir -p ${cali_dir} - cp test/*.cali ${cali_dir} + if ( find test -name '*.cali' | grep -q '.' ); then + cali_dir=${project_dir}/caliper_reports + mkdir -p ${cali_dir} + cp test/*.cali ${cali_dir} + fi if grep -q "Errors while running CTest" ./tests_output.txt then From 3c6503ecb28fa1a4ffe54f187effa57a8d57f953 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 13:45:14 +0100 Subject: [PATCH 127/174] Add caliper reference files + minor --- test/CMakeLists.txt | 2 +- test/caliper-refs/Base_OpenMP.cali | 396 ++++++++++++++++++++++++++ test/caliper-refs/Base_Seq.cali | 408 +++++++++++++++++++++++++++ test/caliper-refs/Lambda_OpenMP.cali | 384 +++++++++++++++++++++++++ test/caliper-refs/Lambda_Seq.cali | 384 +++++++++++++++++++++++++ test/caliper-refs/RAJA_OpenMP.cali | 400 ++++++++++++++++++++++++++ test/caliper-refs/RAJA_Seq.cali | 404 ++++++++++++++++++++++++++ 7 files changed, 2377 insertions(+), 1 deletion(-) create mode 100644 test/caliper-refs/Base_OpenMP.cali create mode 100644 test/caliper-refs/Base_Seq.cali create mode 100644 test/caliper-refs/Lambda_OpenMP.cali create mode 100644 test/caliper-refs/Lambda_Seq.cali create mode 100644 test/caliper-refs/RAJA_OpenMP.cali create mode 100644 test/caliper-refs/RAJA_Seq.cali diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 001c81190..5fe711de8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -15,7 +15,7 @@ set(RAJA_PERFSUITE_TEST_EXECUTABLE_DEPENDS stream algorithm) list(APPEND RAJA_PERFSUITE_TEST_EXECUTABLE_DEPENDS ${RAJA_PERFSUITE_DEPENDS}) - + raja_add_test( NAME test-raja-perf-suite SOURCES test-raja-perf-suite.cpp diff --git a/test/caliper-refs/Base_OpenMP.cali b/test/caliper-refs/Base_OpenMP.cali new file mode 100644 index 000000000..a8400a47f --- /dev/null +++ b/test/caliper-refs/Base_OpenMP.cali @@ -0,0 +1,396 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=195,attr=14,data=sec,parent=5 +__rec=node,id=196,attr=13,data=Min time/rank,parent=195 +__rec=node,id=197,attr=10,data=65,parent=196 +__rec=node,id=198,attr=8,data=min#inclusive#sum#time.duration,parent=197 +__rec=node,id=199,attr=13,data=Max time/rank,parent=195 +__rec=node,id=200,attr=10,data=65,parent=199 +__rec=node,id=201,attr=8,data=max#inclusive#sum#time.duration,parent=200 +__rec=node,id=202,attr=13,data=Avg time/rank,parent=195 +__rec=node,id=203,attr=10,data=65,parent=202 +__rec=node,id=204,attr=8,data=avg#inclusive#sum#time.duration,parent=203 +__rec=node,id=207,attr=10,data=193,parent=5 +__rec=node,id=208,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=207 +__rec=node,id=205,attr=10,data=193,parent=2 +__rec=node,id=206,attr=8,data=avg.count#inclusive#sum#time.duration,parent=205 +__rec=node,id=209,attr=13,data=Total time,parent=195 +__rec=node,id=210,attr=10,data=65,parent=209 +__rec=node,id=211,attr=8,data=sum#inclusive#sum#time.duration,parent=210 +__rec=node,id=212,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=213,attr=10,data=65,parent=212 +__rec=node,id=214,attr=8,data=any#any#max#Bytes/Rep,parent=213 +__rec=node,id=215,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=216,attr=10,data=65,parent=215 +__rec=node,id=217,attr=8,data=any#any#max#Flops/Rep,parent=216 +__rec=node,id=218,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=219,attr=10,data=65,parent=218 +__rec=node,id=220,attr=8,data=any#any#max#Iterations/Rep,parent=219 +__rec=node,id=221,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=222,attr=10,data=65,parent=221 +__rec=node,id=223,attr=8,data=any#any#max#Kernels/Rep,parent=222 +__rec=node,id=224,attr=13,data=ProblemSize,parent=5 +__rec=node,id=225,attr=10,data=65,parent=224 +__rec=node,id=226,attr=8,data=any#any#max#ProblemSize,parent=225 +__rec=node,id=227,attr=13,data=Reps,parent=5 +__rec=node,id=228,attr=10,data=65,parent=227 +__rec=node,id=229,attr=8,data=any#any#max#Reps,parent=228 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=230,attr=15,data=regionprofile +__rec=ctx,ref=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=61.857732=61.857732=61.857732=61.857732=1=61.857732=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=Base_OpenMP +__rec=ctx,ref=60=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.920587=0.920587=0.920587=0.920587=1=0.920587=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.161730=0.161730=0.161730=0.161730=1=0.161730=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000159=0.000159=0.000159=0.000159=1=0.000159=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000155=0.000155=0.000155=0.000155=1=0.000155=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000345=0.000345=0.000345=0.000345=1=0.000345=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000298=0.000298=0.000298=0.000298=1=0.000298=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000292=0.000292=0.000292=0.000292=1=0.000292=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 +__rec=ctx,ref=72=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000614=0.000614=0.000614=0.000614=1=0.000614=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 +__rec=ctx,ref=73=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000609=0.000609=0.000609=0.000609=1=0.000609=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=74=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000691=0.000691=0.000691=0.000691=1=0.000691=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 +__rec=ctx,ref=75=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000686=0.000686=0.000686=0.000686=1=0.000686=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=76=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000276=0.000276=0.000276=0.000276=1=0.000276=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 +__rec=ctx,ref=77=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000270=0.000270=0.000270=0.000270=1=0.000270=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=78=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000189=0.000189=0.000189=0.000189=1=0.000189=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 +__rec=ctx,ref=79=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000184=0.000184=0.000184=0.000184=1=0.000184=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=80=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000196=0.000196=0.000196=0.000196=1=0.000196=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 +__rec=ctx,ref=81=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000191=0.000191=0.000191=0.000191=1=0.000191=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=82=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.025155=0.025155=0.025155=0.025155=1=0.025155=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 +__rec=ctx,ref=83=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.025147=0.025147=0.025147=0.025147=1=0.025147=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=84=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000287=0.000287=0.000287=0.000287=1=0.000287=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 +__rec=ctx,ref=85=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000280=0.000280=0.000280=0.000280=1=0.000280=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=86=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000193=0.000193=0.000193=0.000193=1=0.000193=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 +__rec=ctx,ref=87=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000187=0.000187=0.000187=0.000187=1=0.000187=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=88=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.131724=0.131724=0.131724=0.131724=1=0.131724=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 +__rec=ctx,ref=89=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.131717=0.131717=0.131717=0.131717=1=0.131717=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=90=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 +__rec=ctx,ref=91=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=92=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000386=0.000386=0.000386=0.000386=1=0.000386=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 +__rec=ctx,ref=93=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000383=0.000383=0.000383=0.000383=1=0.000383=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=94=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000401=0.000401=0.000401=0.000401=1=0.000401=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 +__rec=ctx,ref=95=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000397=0.000397=0.000397=0.000397=1=0.000397=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=96=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000397=0.000397=0.000397=0.000397=1=0.000397=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 +__rec=ctx,ref=97=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000392=0.000392=0.000392=0.000392=1=0.000392=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=98=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010836=0.010836=0.010836=0.010836=1=0.010836=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 +__rec=ctx,ref=99=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.006266=0.006266=0.006266=0.006266=1=0.006266=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 +__rec=ctx,ref=100=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.006255=0.006255=0.006255=0.006255=1=0.006255=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 +__rec=ctx,ref=101=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000234=0.000234=0.000234=0.000234=1=0.000234=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 +__rec=ctx,ref=102=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000227=0.000227=0.000227=0.000227=1=0.000227=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 +__rec=ctx,ref=103=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000348=0.000348=0.000348=0.000348=1=0.000348=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 +__rec=ctx,ref=104=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 +__rec=ctx,ref=105=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 +__rec=ctx,ref=106=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 +__rec=ctx,ref=107=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000421=0.000421=0.000421=0.000421=1=0.000421=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 +__rec=ctx,ref=108=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000417=0.000417=0.000417=0.000417=1=0.000417=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 +__rec=ctx,ref=109=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000583=0.000583=0.000583=0.000583=1=0.000583=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 +__rec=ctx,ref=110=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000575=0.000575=0.000575=0.000575=1=0.000575=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 +__rec=ctx,ref=111=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000256=0.000256=0.000256=0.000256=1=0.000256=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 +__rec=ctx,ref=112=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000250=0.000250=0.000250=0.000250=1=0.000250=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 +__rec=ctx,ref=113=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000675=0.000675=0.000675=0.000675=1=0.000675=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 +__rec=ctx,ref=114=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000666=0.000666=0.000666=0.000666=1=0.000666=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 +__rec=ctx,ref=115=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001105=0.001105=0.001105=0.001105=1=0.001105=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 +__rec=ctx,ref=116=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001097=0.001097=0.001097=0.001097=1=0.001097=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 +__rec=ctx,ref=117=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000362=0.000362=0.000362=0.000362=1=0.000362=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 +__rec=ctx,ref=118=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 +__rec=ctx,ref=119=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 +__rec=ctx,ref=120=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000260=0.000260=0.000260=0.000260=1=0.000260=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=121=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.692691=0.692691=0.692691=0.692691=1=0.692691=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 +__rec=ctx,ref=122=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.172226=0.172226=0.172226=0.172226=1=0.172226=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 +__rec=ctx,ref=123=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.172215=0.172215=0.172215=0.172215=1=0.172215=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 +__rec=ctx,ref=124=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.260338=0.260338=0.260338=0.260338=1=0.260338=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 +__rec=ctx,ref=125=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.260325=0.260325=0.260325=0.260325=1=0.260325=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 +__rec=ctx,ref=126=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.084499=0.084499=0.084499=0.084499=1=0.084499=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 +__rec=ctx,ref=127=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.084492=0.084492=0.084492=0.084492=1=0.084492=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 +__rec=ctx,ref=128=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000487=0.000487=0.000487=0.000487=1=0.000487=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 +__rec=ctx,ref=129=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000481=0.000481=0.000481=0.000481=1=0.000481=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 +__rec=ctx,ref=130=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.008184=0.008184=0.008184=0.008184=1=0.008184=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 +__rec=ctx,ref=131=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.008178=0.008178=0.008178=0.008178=1=0.008178=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 +__rec=ctx,ref=132=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.049104=0.049104=0.049104=0.049104=1=0.049104=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 +__rec=ctx,ref=133=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.049098=0.049098=0.049098=0.049098=1=0.049098=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 +__rec=ctx,ref=134=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.098291=0.098291=0.098291=0.098291=1=0.098291=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 +__rec=ctx,ref=135=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.098285=0.098285=0.098285=0.098285=1=0.098285=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 +__rec=ctx,ref=136=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000887=0.000887=0.000887=0.000887=1=0.000887=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 +__rec=ctx,ref=137=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000881=0.000881=0.000881=0.000881=1=0.000881=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 +__rec=ctx,ref=138=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000431=0.000431=0.000431=0.000431=1=0.000431=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 +__rec=ctx,ref=139=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000422=0.000422=0.000422=0.000422=1=0.000422=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 +__rec=ctx,ref=140=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010573=0.010573=0.010573=0.010573=1=0.010573=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 +__rec=ctx,ref=141=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010568=0.010568=0.010568=0.010568=1=0.010568=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 +__rec=ctx,ref=142=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001703=0.001703=0.001703=0.001703=1=0.001703=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 +__rec=ctx,ref=143=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001694=0.001694=0.001694=0.001694=1=0.001694=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 +__rec=ctx,ref=144=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005532=0.005532=0.005532=0.005532=1=0.005532=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 +__rec=ctx,ref=145=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005526=0.005526=0.005526=0.005526=1=0.005526=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 +__rec=ctx,ref=146=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000373=0.000373=0.000373=0.000373=1=0.000373=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 +__rec=ctx,ref=147=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000368=0.000368=0.000368=0.000368=1=0.000368=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream,parent=60 +__rec=ctx,ref=148=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001627=0.001627=0.001627=0.001627=1=0.001627=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 +__rec=ctx,ref=149=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000274=0.000274=0.000274=0.000274=1=0.000274=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 +__rec=ctx,ref=150=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000268=0.000268=0.000268=0.000268=1=0.000268=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 +__rec=ctx,ref=151=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 +__rec=ctx,ref=152=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 +__rec=ctx,ref=153=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000348=0.000348=0.000348=0.000348=1=0.000348=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 +__rec=ctx,ref=154=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 +__rec=ctx,ref=155=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 +__rec=ctx,ref=156=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 +__rec=ctx,ref=157=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000295=0.000295=0.000295=0.000295=1=0.000295=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 +__rec=ctx,ref=158=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000289=0.000289=0.000289=0.000289=1=0.000289=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps,parent=60 +__rec=ctx,ref=159=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.033974=0.033974=0.033974=0.033974=1=0.033974=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_CONVECTION3DPA,parent=159 +__rec=ctx,ref=160=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000623=0.000623=0.000623=0.000623=1=0.000623=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_CONVECTION3DPA.default,parent=160 +__rec=ctx,ref=161=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000617=0.000617=0.000617=0.000617=1=0.000617=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 +__rec=ctx,ref=162=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=162 +__rec=ctx,ref=163=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000910=0.000910=0.000910=0.000910=1=0.000910=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_DIFFUSION3DPA,parent=159 +__rec=ctx,ref=164=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000903=0.000903=0.000903=0.000903=1=0.000903=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_DIFFUSION3DPA.default,parent=164 +__rec=ctx,ref=165=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000895=0.000895=0.000895=0.000895=1=0.000895=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_ENERGY,parent=159 +__rec=ctx,ref=166=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000473=0.000473=0.000473=0.000473=1=0.000473=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_ENERGY.default,parent=166 +__rec=ctx,ref=167=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000464=0.000464=0.000464=0.000464=1=0.000464=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_FIR,parent=159 +__rec=ctx,ref=168=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000380=0.000380=0.000380=0.000380=1=0.000380=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_FIR.default,parent=168 +__rec=ctx,ref=169=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000374=0.000374=0.000374=0.000374=1=0.000374=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE,parent=159 +__rec=ctx,ref=170=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005267=0.005267=0.005267=0.005267=1=0.005267=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE.default,parent=170 +__rec=ctx,ref=171=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005261=0.005261=0.005261=0.005261=1=0.005261=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 +__rec=ctx,ref=172=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.016486=0.016486=0.016486=0.016486=1=0.016486=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=172 +__rec=ctx,ref=173=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.016481=0.016481=0.016481=0.016481=1=0.016481=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_LTIMES,parent=159 +__rec=ctx,ref=174=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000417=0.000417=0.000417=0.000417=1=0.000417=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_LTIMES.default,parent=174 +__rec=ctx,ref=175=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000411=0.000411=0.000411=0.000411=1=0.000411=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 +__rec=ctx,ref=176=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000400=0.000400=0.000400=0.000400=1=0.000400=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=176 +__rec=ctx,ref=177=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_MASS3DPA,parent=159 +__rec=ctx,ref=178=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000392=0.000392=0.000392=0.000392=1=0.000392=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_MASS3DPA.default,parent=178 +__rec=ctx,ref=179=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000369=0.000369=0.000369=0.000369=1=0.000369=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=180,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 +__rec=ctx,ref=180=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001055=0.001055=0.001055=0.001055=1=0.001055=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=180 +__rec=ctx,ref=181=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001050=0.001050=0.001050=0.001050=1=0.001050=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Apps_PRESSURE,parent=159 +__rec=ctx,ref=182=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000776=0.000776=0.000776=0.000776=1=0.000776=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=183,attr=59,data=Apps_PRESSURE.default,parent=182 +__rec=ctx,ref=183=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000770=0.000770=0.000770=0.000770=1=0.000770=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=184,attr=59,data=Apps_VOL3D,parent=159 +__rec=ctx,ref=184=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005820=0.005820=0.005820=0.005820=1=0.005820=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=185,attr=59,data=Apps_VOL3D.default,parent=184 +__rec=ctx,ref=185=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005805=0.005805=0.005805=0.005805=1=0.005805=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=186=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.019237=0.019237=0.019237=0.019237=1=0.019237=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_SCAN,parent=186 +__rec=ctx,ref=187=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000377=0.000377=0.000377=0.000377=1=0.000377=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_SCAN.default,parent=187 +__rec=ctx,ref=188=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000373=0.000373=0.000373=0.000373=1=0.000373=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=189,attr=59,data=Algorithm_REDUCE_SUM,parent=186 +__rec=ctx,ref=189=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000208=0.000208=0.000208=0.000208=1=0.000208=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=190,attr=59,data=Algorithm_REDUCE_SUM.default,parent=189 +__rec=ctx,ref=190=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000203=0.000203=0.000203=0.000203=1=0.000203=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=191,attr=59,data=Algorithm_MEMSET,parent=186 +__rec=ctx,ref=191=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009344=0.009344=0.009344=0.009344=1=0.009344=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=192,attr=59,data=Algorithm_MEMSET.default,parent=191 +__rec=ctx,ref=192=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009339=0.009339=0.009339=0.009339=1=0.009339=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=193,attr=59,data=Algorithm_MEMCPY,parent=186 +__rec=ctx,ref=193=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009290=0.009290=0.009290=0.009290=1=0.009290=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=194,attr=59,data=Algorithm_MEMCPY.default,parent=193 +__rec=ctx,ref=194=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009285=0.009285=0.009285=0.009285=1=0.009285=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=306,attr=10,data=512,parent=3 +__rec=node,id=312,attr=8,data=spot.channels,parent=306 +__rec=node,id=311,attr=8,data=spot.options,parent=306 +__rec=node,id=309,attr=10,data=512,parent=1 +__rec=node,id=310,attr=8,data=spot.format.version,parent=309 +__rec=node,id=308,attr=8,data=spot.timeseries.metrics,parent=306 +__rec=node,id=307,attr=8,data=spot.metrics,parent=306 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=313,attr=307,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=314,attr=308,data=,parent=313 +__rec=node,id=315,attr=310,data=2,parent=314 +__rec=node,id=316,attr=311,data=,parent=315 +__rec=node,id=317,attr=312,data=regionprofile,parent=316 +__rec=node,id=231,attr=10,data=84,parent=3 +__rec=node,id=232,attr=8,data=adiak.subcategory,parent=231 +__rec=node,id=233,attr=10,data=84,parent=1 +__rec=node,id=234,attr=8,data=adiak.category,parent=233 +__rec=node,id=235,attr=8,data=adiak.type,parent=231 +__rec=node,id=236,attr=235,data=string,parent=3 +__rec=node,id=237,attr=234,data=2,parent=236 +__rec=node,id=238,attr=232,data=none,parent=237 +__rec=node,id=239,attr=10,data=1612,parent=238 +__rec=node,id=240,attr=8,data=variant,parent=239 +__rec=node,id=241,attr=8,data=omp_max_threads,parent=239 +__rec=node,id=242,attr=8,data=omp_version,parent=239 +__rec=node,id=243,attr=8,data=SizeMeaning,parent=239 +__rec=node,id=244,attr=235,data=double,parent=5 +__rec=node,id=245,attr=234,data=2,parent=244 +__rec=node,id=246,attr=232,data=none,parent=245 +__rec=node,id=247,attr=10,data=1612,parent=246 +__rec=node,id=248,attr=8,data=ProblemSizeRunParam,parent=247 +__rec=node,id=249,attr=8,data=machine_build,parent=239 +__rec=node,id=250,attr=8,data=systype_build,parent=239 +__rec=node,id=251,attr=8,data=Compiler_path_version,parent=239 +__rec=node,id=252,attr=8,data=compiler,parent=239 +__rec=node,id=253,attr=8,data=compiler_version,parent=239 +__rec=node,id=254,attr=8,data=rajaperf_compiler_options,parent=239 +__rec=node,id=255,attr=8,data=rajaperf_compiler,parent=239 +__rec=node,id=256,attr=8,data=cmake_exe_linker_flags,parent=239 +__rec=node,id=257,attr=8,data=cmake_cxx_flags,parent=239 +__rec=node,id=258,attr=8,data=cmake_build_type,parent=239 +__rec=node,id=259,attr=8,data=raja_version,parent=239 +__rec=node,id=260,attr=8,data=perfsuite_version,parent=239 +__rec=node,id=261,attr=232,data=host,parent=237 +__rec=node,id=262,attr=10,data=1612,parent=261 +__rec=node,id=263,attr=8,data=cluster,parent=262 +__rec=node,id=264,attr=235,data=set of string,parent=3 +__rec=node,id=265,attr=234,data=2,parent=264 +__rec=node,id=266,attr=232,data=runinfo,parent=265 +__rec=node,id=267,attr=10,data=1612,parent=266 +__rec=node,id=268,attr=8,data=cmdline,parent=267 +__rec=node,id=269,attr=235,data=set of path,parent=3 +__rec=node,id=270,attr=234,data=2,parent=269 +__rec=node,id=271,attr=232,data=binary,parent=270 +__rec=node,id=272,attr=10,data=1612,parent=271 +__rec=node,id=273,attr=8,data=libraries,parent=272 +__rec=node,id=274,attr=235,data=date,parent=2 +__rec=node,id=275,attr=234,data=2,parent=274 +__rec=node,id=276,attr=232,data=runinfo,parent=275 +__rec=node,id=277,attr=10,data=1612,parent=276 +__rec=node,id=278,attr=8,data=launchdate,parent=277 +__rec=node,id=279,attr=232,data=runinfo,parent=237 +__rec=node,id=280,attr=10,data=1612,parent=279 +__rec=node,id=281,attr=8,data=user,parent=280 +__rec=node,id=282,attr=8,data=cali.channel,parent=16 +__rec=node,id=283,attr=282,data=spot +__rec=node,id=284,attr=281,data=umdev,parent=283 +__rec=node,id=285,attr=278,data=1673516370,parent=284 +__rec=node,id=286,attr=273,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=285 +__rec=node,id=287,attr=268,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=286 +__rec=node,id=288,attr=263,data=ruby,parent=287 +__rec=node,id=289,attr=260,data=0.11.0,parent=288 +__rec=node,id=290,attr=259,data=2022.10.4,parent=289 +__rec=node,id=291,attr=258,data=RelWithDebInfo,parent=290 +__rec=node,id=292,attr=257,data= -Wall -Wextra ,parent=291 +__rec=node,id=293,attr=256,data=,parent=292 +__rec=node,id=294,attr=255,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=293 +__rec=node,id=295,attr=254,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=294 +__rec=node,id=296,attr=253,data=8.3.1,parent=295 +__rec=node,id=297,attr=252,data=g++-8.3.1,parent=296 +__rec=node,id=298,attr=251,data=gcc-8.3.1,parent=297 +__rec=node,id=299,attr=250,data=toss_3_x86_64_ib,parent=298 +__rec=node,id=300,attr=249,data=ruby961,parent=299 +__rec=node,id=301,attr=248,data=1.000000,parent=300 +__rec=node,id=302,attr=243,data=Factor,parent=301 +__rec=node,id=303,attr=242,data=4.5,parent=302 +__rec=node,id=304,attr=241,data=112,parent=303 +__rec=node,id=305,attr=240,data=Base_OpenMP,parent=304 +__rec=globals,ref=317=305 diff --git a/test/caliper-refs/Base_Seq.cali b/test/caliper-refs/Base_Seq.cali new file mode 100644 index 000000000..8cf774638 --- /dev/null +++ b/test/caliper-refs/Base_Seq.cali @@ -0,0 +1,408 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=201,attr=14,data=sec,parent=5 +__rec=node,id=202,attr=13,data=Min time/rank,parent=201 +__rec=node,id=203,attr=10,data=65,parent=202 +__rec=node,id=204,attr=8,data=min#inclusive#sum#time.duration,parent=203 +__rec=node,id=205,attr=13,data=Max time/rank,parent=201 +__rec=node,id=206,attr=10,data=65,parent=205 +__rec=node,id=207,attr=8,data=max#inclusive#sum#time.duration,parent=206 +__rec=node,id=208,attr=13,data=Avg time/rank,parent=201 +__rec=node,id=209,attr=10,data=65,parent=208 +__rec=node,id=210,attr=8,data=avg#inclusive#sum#time.duration,parent=209 +__rec=node,id=213,attr=10,data=193,parent=5 +__rec=node,id=214,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=213 +__rec=node,id=211,attr=10,data=193,parent=2 +__rec=node,id=212,attr=8,data=avg.count#inclusive#sum#time.duration,parent=211 +__rec=node,id=215,attr=13,data=Total time,parent=201 +__rec=node,id=216,attr=10,data=65,parent=215 +__rec=node,id=217,attr=8,data=sum#inclusive#sum#time.duration,parent=216 +__rec=node,id=218,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=219,attr=10,data=65,parent=218 +__rec=node,id=220,attr=8,data=any#any#max#Bytes/Rep,parent=219 +__rec=node,id=221,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=222,attr=10,data=65,parent=221 +__rec=node,id=223,attr=8,data=any#any#max#Flops/Rep,parent=222 +__rec=node,id=224,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=225,attr=10,data=65,parent=224 +__rec=node,id=226,attr=8,data=any#any#max#Iterations/Rep,parent=225 +__rec=node,id=227,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=228,attr=10,data=65,parent=227 +__rec=node,id=229,attr=8,data=any#any#max#Kernels/Rep,parent=228 +__rec=node,id=230,attr=13,data=ProblemSize,parent=5 +__rec=node,id=231,attr=10,data=65,parent=230 +__rec=node,id=232,attr=8,data=any#any#max#ProblemSize,parent=231 +__rec=node,id=233,attr=13,data=Reps,parent=5 +__rec=node,id=234,attr=10,data=65,parent=233 +__rec=node,id=235,attr=8,data=any#any#max#Reps,parent=234 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=236,attr=15,data=regionprofile +__rec=ctx,ref=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=49.766543=49.766543=49.766543=49.766543=1=49.766543=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=Base_Seq +__rec=ctx,ref=60=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=12.966579=12.966579=12.966579=12.966579=1=12.966579=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.662882=0.662882=0.662882=0.662882=1=0.662882=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000811=0.000811=0.000811=0.000811=1=0.000811=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000802=0.000802=0.000802=0.000802=1=0.000802=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000913=0.000913=0.000913=0.000913=1=0.000913=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000908=0.000908=0.000908=0.000908=1=0.000908=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007082=0.007082=0.007082=0.007082=1=0.007082=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007077=0.007077=0.007077=0.007077=1=0.007077=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 +__rec=ctx,ref=72=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003863=0.003863=0.003863=0.003863=1=0.003863=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 +__rec=ctx,ref=73=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003858=0.003858=0.003858=0.003858=1=0.003858=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=74=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005224=0.005224=0.005224=0.005224=1=0.005224=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 +__rec=ctx,ref=75=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005221=0.005221=0.005221=0.005221=1=0.005221=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=76=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002231=0.002231=0.002231=0.002231=1=0.002231=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 +__rec=ctx,ref=77=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002227=0.002227=0.002227=0.002227=1=0.002227=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=78=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000568=0.000568=0.000568=0.000568=1=0.000568=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 +__rec=ctx,ref=79=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000563=0.000563=0.000563=0.000563=1=0.000563=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=80=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000554=0.000554=0.000554=0.000554=1=0.000554=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 +__rec=ctx,ref=81=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000550=0.000550=0.000550=0.000550=1=0.000550=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=82=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.625770=0.625770=0.625770=0.625770=1=0.625770=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 +__rec=ctx,ref=83=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.625756=0.625756=0.625756=0.625756=1=0.625756=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=84=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002304=0.002304=0.002304=0.002304=1=0.002304=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 +__rec=ctx,ref=85=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002299=0.002299=0.002299=0.002299=1=0.002299=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=86=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000683=0.000683=0.000683=0.000683=1=0.000683=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 +__rec=ctx,ref=87=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000679=0.000679=0.000679=0.000679=1=0.000679=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=88=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001179=0.001179=0.001179=0.001179=1=0.001179=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 +__rec=ctx,ref=89=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001176=0.001176=0.001176=0.001176=1=0.001176=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=90=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002556=0.002556=0.002556=0.002556=1=0.002556=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 +__rec=ctx,ref=91=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002550=0.002550=0.002550=0.002550=1=0.002550=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=92=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000621=0.000621=0.000621=0.000621=1=0.000621=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 +__rec=ctx,ref=93=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000617=0.000617=0.000617=0.000617=1=0.000617=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=94=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001534=0.001534=0.001534=0.001534=1=0.001534=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 +__rec=ctx,ref=95=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001531=0.001531=0.001531=0.001531=1=0.001531=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=96=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006940=0.006940=0.006940=0.006940=1=0.006940=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 +__rec=ctx,ref=97=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006937=0.006937=0.006937=0.006937=1=0.006937=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=98=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.048223=0.048223=0.048223=0.048223=1=0.048223=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 +__rec=ctx,ref=99=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006946=0.006946=0.006946=0.006946=1=0.006946=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 +__rec=ctx,ref=100=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006941=0.006941=0.006941=0.006941=1=0.006941=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 +__rec=ctx,ref=101=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002547=0.002547=0.002547=0.002547=1=0.002547=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 +__rec=ctx,ref=102=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002542=0.002542=0.002542=0.002542=1=0.002542=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 +__rec=ctx,ref=103=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000826=0.000826=0.000826=0.000826=1=0.000826=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 +__rec=ctx,ref=104=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000821=0.000821=0.000821=0.000821=1=0.000821=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 +__rec=ctx,ref=105=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001055=0.001055=0.001055=0.001055=1=0.001055=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 +__rec=ctx,ref=106=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001050=0.001050=0.001050=0.001050=1=0.001050=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 +__rec=ctx,ref=107=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001154=0.001154=0.001154=0.001154=1=0.001154=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 +__rec=ctx,ref=108=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001148=0.001148=0.001148=0.001148=1=0.001148=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 +__rec=ctx,ref=109=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002939=0.002939=0.002939=0.002939=1=0.002939=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 +__rec=ctx,ref=110=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002934=0.002934=0.002934=0.002934=1=0.002934=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 +__rec=ctx,ref=111=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001127=0.001127=0.001127=0.001127=1=0.001127=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 +__rec=ctx,ref=112=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001120=0.001120=0.001120=0.001120=1=0.001120=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 +__rec=ctx,ref=113=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009863=0.009863=0.009863=0.009863=1=0.009863=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 +__rec=ctx,ref=114=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009856=0.009856=0.009856=0.009856=1=0.009856=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 +__rec=ctx,ref=115=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005138=0.005138=0.005138=0.005138=1=0.005138=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 +__rec=ctx,ref=116=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005132=0.005132=0.005132=0.005132=1=0.005132=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 +__rec=ctx,ref=117=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015191=0.015191=0.015191=0.015191=1=0.015191=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 +__rec=ctx,ref=118=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015185=0.015185=0.015185=0.015185=1=0.015185=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 +__rec=ctx,ref=119=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001401=0.001401=0.001401=0.001401=1=0.001401=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 +__rec=ctx,ref=120=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001395=0.001395=0.001395=0.001395=1=0.001395=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=121=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=11.951622=11.951622=11.951622=11.951622=1=11.951622=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 +__rec=ctx,ref=122=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=3.496143=3.496143=3.496143=3.496143=1=3.496143=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 +__rec=ctx,ref=123=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=3.496127=3.496127=3.496127=3.496127=1=3.496127=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 +__rec=ctx,ref=124=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=5.138641=5.138641=5.138641=5.138641=1=5.138641=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 +__rec=ctx,ref=125=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=5.138628=5.138628=5.138628=5.138628=1=5.138628=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 +__rec=ctx,ref=126=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.090364=0.090364=0.090364=0.090364=1=0.090364=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 +__rec=ctx,ref=127=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.090354=0.090354=0.090354=0.090354=1=0.090354=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 +__rec=ctx,ref=128=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002595=0.002595=0.002595=0.002595=1=0.002595=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 +__rec=ctx,ref=129=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002590=0.002590=0.002590=0.002590=1=0.002590=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 +__rec=ctx,ref=130=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.092578=0.092578=0.092578=0.092578=1=0.092578=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 +__rec=ctx,ref=131=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.092575=0.092575=0.092575=0.092575=1=0.092575=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 +__rec=ctx,ref=132=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.701023=0.701023=0.701023=0.701023=1=0.701023=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 +__rec=ctx,ref=133=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.701017=0.701017=0.701017=0.701017=1=0.701017=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 +__rec=ctx,ref=134=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=2.258295=2.258295=2.258295=2.258295=1=2.258295=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 +__rec=ctx,ref=135=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=2.258288=2.258288=2.258288=2.258288=1=2.258288=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 +__rec=ctx,ref=136=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003622=0.003622=0.003622=0.003622=1=0.003622=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 +__rec=ctx,ref=137=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003616=0.003616=0.003616=0.003616=1=0.003616=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 +__rec=ctx,ref=138=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001192=0.001192=0.001192=0.001192=1=0.001192=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 +__rec=ctx,ref=139=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001185=0.001185=0.001185=0.001185=1=0.001185=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 +__rec=ctx,ref=140=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.067311=0.067311=0.067311=0.067311=1=0.067311=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 +__rec=ctx,ref=141=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.067307=0.067307=0.067307=0.067307=1=0.067307=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 +__rec=ctx,ref=142=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.022086=0.022086=0.022086=0.022086=1=0.022086=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 +__rec=ctx,ref=143=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.022081=0.022081=0.022081=0.022081=1=0.022081=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 +__rec=ctx,ref=144=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.075110=0.075110=0.075110=0.075110=1=0.075110=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 +__rec=ctx,ref=145=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.075105=0.075105=0.075105=0.075105=1=0.075105=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 +__rec=ctx,ref=146=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002618=0.002618=0.002618=0.002618=1=0.002618=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 +__rec=ctx,ref=147=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002611=0.002611=0.002611=0.002611=1=0.002611=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream,parent=60 +__rec=ctx,ref=148=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004530=0.004530=0.004530=0.004530=1=0.004530=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 +__rec=ctx,ref=149=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001071=0.001071=0.001071=0.001071=1=0.001071=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 +__rec=ctx,ref=150=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001067=0.001067=0.001067=0.001067=1=0.001067=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 +__rec=ctx,ref=151=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000644=0.000644=0.000644=0.000644=1=0.000644=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 +__rec=ctx,ref=152=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000640=0.000640=0.000640=0.000640=1=0.000640=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 +__rec=ctx,ref=153=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001039=0.001039=0.001039=0.001039=1=0.001039=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 +__rec=ctx,ref=154=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001035=0.001035=0.001035=0.001035=1=0.001035=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 +__rec=ctx,ref=155=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000788=0.000788=0.000788=0.000788=1=0.000788=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 +__rec=ctx,ref=156=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 +__rec=ctx,ref=157=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000971=0.000971=0.000971=0.000971=1=0.000971=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 +__rec=ctx,ref=158=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000964=0.000964=0.000964=0.000964=1=0.000964=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps,parent=60 +__rec=ctx,ref=159=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.152089=0.152089=0.152089=0.152089=1=0.152089=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_CONVECTION3DPA,parent=159 +__rec=ctx,ref=160=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015507=0.015507=0.015507=0.015507=1=0.015507=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_CONVECTION3DPA.default,parent=160 +__rec=ctx,ref=161=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015504=0.015504=0.015504=0.015504=1=0.015504=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 +__rec=ctx,ref=162=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009471=0.009471=0.009471=0.009471=1=0.009471=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=162 +__rec=ctx,ref=163=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009467=0.009467=0.009467=0.009467=1=0.009467=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_DIFFUSION3DPA,parent=159 +__rec=ctx,ref=164=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.034834=0.034834=0.034834=0.034834=1=0.034834=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_DIFFUSION3DPA.default,parent=164 +__rec=ctx,ref=165=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.034827=0.034827=0.034827=0.034827=1=0.034827=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_ENERGY,parent=159 +__rec=ctx,ref=166=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013153=0.013153=0.013153=0.013153=1=0.013153=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_ENERGY.default,parent=166 +__rec=ctx,ref=167=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013147=0.013147=0.013147=0.013147=1=0.013147=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_FIR,parent=159 +__rec=ctx,ref=168=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007874=0.007874=0.007874=0.007874=1=0.007874=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_FIR.default,parent=168 +__rec=ctx,ref=169=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007867=0.007867=0.007867=0.007867=1=0.007867=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE,parent=159 +__rec=ctx,ref=170=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000813=0.000813=0.000813=0.000813=1=0.000813=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE.default,parent=170 +__rec=ctx,ref=171=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000809=0.000809=0.000809=0.000809=1=0.000809=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 +__rec=ctx,ref=172=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=172 +__rec=ctx,ref=173=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000779=0.000779=0.000779=0.000779=1=0.000779=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_LTIMES,parent=159 +__rec=ctx,ref=174=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.019404=0.019404=0.019404=0.019404=1=0.019404=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_LTIMES.default,parent=174 +__rec=ctx,ref=175=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.019400=0.019400=0.019400=0.019400=1=0.019400=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 +__rec=ctx,ref=176=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.017909=0.017909=0.017909=0.017909=1=0.017909=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=176 +__rec=ctx,ref=177=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.017905=0.017905=0.017905=0.017905=1=0.017905=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_MASS3DPA,parent=159 +__rec=ctx,ref=178=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013735=0.013735=0.013735=0.013735=1=0.013735=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_MASS3DPA.default,parent=178 +__rec=ctx,ref=179=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013730=0.013730=0.013730=0.013730=1=0.013730=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=180,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 +__rec=ctx,ref=180=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004590=0.004590=0.004590=0.004590=1=0.004590=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=180 +__rec=ctx,ref=181=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004582=0.004582=0.004582=0.004582=1=0.004582=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Apps_PRESSURE,parent=159 +__rec=ctx,ref=182=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002744=0.002744=0.002744=0.002744=1=0.002744=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=183,attr=59,data=Apps_PRESSURE.default,parent=182 +__rec=ctx,ref=183=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002739=0.002739=0.002739=0.002739=1=0.002739=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=184,attr=59,data=Apps_VOL3D,parent=159 +__rec=ctx,ref=184=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.011226=0.011226=0.011226=0.011226=1=0.011226=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=185,attr=59,data=Apps_VOL3D.default,parent=184 +__rec=ctx,ref=185=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.011221=0.011221=0.011221=0.011221=1=0.011221=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=186=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.146819=0.146819=0.146819=0.146819=1=0.146819=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_SCAN,parent=186 +__rec=ctx,ref=187=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001098=0.001098=0.001098=0.001098=1=0.001098=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_SCAN.default,parent=187 +__rec=ctx,ref=188=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001087=0.001087=0.001087=0.001087=1=0.001087=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=189,attr=59,data=Algorithm_SORT,parent=186 +__rec=ctx,ref=189=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.065678=0.065678=0.065678=0.065678=1=0.065678=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=190,attr=59,data=Algorithm_SORT.default,parent=189 +__rec=ctx,ref=190=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.065674=0.065674=0.065674=0.065674=1=0.065674=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=191,attr=59,data=Algorithm_SORTPAIRS,parent=186 +__rec=ctx,ref=191=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.076371=0.076371=0.076371=0.076371=1=0.076371=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=192,attr=59,data=Algorithm_SORTPAIRS.default,parent=191 +__rec=ctx,ref=192=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.076360=0.076360=0.076360=0.076360=1=0.076360=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=193,attr=59,data=Algorithm_REDUCE_SUM,parent=186 +__rec=ctx,ref=193=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001107=0.001107=0.001107=0.001107=1=0.001107=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=194,attr=59,data=Algorithm_REDUCE_SUM.default,parent=193 +__rec=ctx,ref=194=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001101=0.001101=0.001101=0.001101=1=0.001101=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=195,attr=59,data=Algorithm_MEMSET,parent=186 +__rec=ctx,ref=195=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000765=0.000765=0.000765=0.000765=1=0.000765=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=196,attr=59,data=Algorithm_MEMSET.library,parent=195 +__rec=ctx,ref=196=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000384=0.000384=0.000384=0.000384=1=0.000384=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=197,attr=59,data=Algorithm_MEMSET.default,parent=195 +__rec=ctx,ref=197=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=198,attr=59,data=Algorithm_MEMCPY,parent=186 +__rec=ctx,ref=198=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001768=0.001768=0.001768=0.001768=1=0.001768=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=199,attr=59,data=Algorithm_MEMCPY.library,parent=198 +__rec=ctx,ref=199=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001081=0.001081=0.001081=0.001081=1=0.001081=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=200,attr=59,data=Algorithm_MEMCPY.default,parent=198 +__rec=ctx,ref=200=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000680=0.000680=0.000680=0.000680=1=0.000680=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=312,attr=10,data=512,parent=3 +__rec=node,id=318,attr=8,data=spot.channels,parent=312 +__rec=node,id=317,attr=8,data=spot.options,parent=312 +__rec=node,id=315,attr=10,data=512,parent=1 +__rec=node,id=316,attr=8,data=spot.format.version,parent=315 +__rec=node,id=314,attr=8,data=spot.timeseries.metrics,parent=312 +__rec=node,id=313,attr=8,data=spot.metrics,parent=312 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=319,attr=313,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=320,attr=314,data=,parent=319 +__rec=node,id=321,attr=316,data=2,parent=320 +__rec=node,id=322,attr=317,data=,parent=321 +__rec=node,id=323,attr=318,data=regionprofile,parent=322 +__rec=node,id=237,attr=10,data=84,parent=3 +__rec=node,id=238,attr=8,data=adiak.subcategory,parent=237 +__rec=node,id=239,attr=10,data=84,parent=1 +__rec=node,id=240,attr=8,data=adiak.category,parent=239 +__rec=node,id=241,attr=8,data=adiak.type,parent=237 +__rec=node,id=242,attr=241,data=string,parent=3 +__rec=node,id=243,attr=240,data=2,parent=242 +__rec=node,id=244,attr=238,data=none,parent=243 +__rec=node,id=245,attr=10,data=1612,parent=244 +__rec=node,id=246,attr=8,data=variant,parent=245 +__rec=node,id=247,attr=8,data=omp_max_threads,parent=245 +__rec=node,id=248,attr=8,data=omp_version,parent=245 +__rec=node,id=249,attr=8,data=SizeMeaning,parent=245 +__rec=node,id=250,attr=241,data=double,parent=5 +__rec=node,id=251,attr=240,data=2,parent=250 +__rec=node,id=252,attr=238,data=none,parent=251 +__rec=node,id=253,attr=10,data=1612,parent=252 +__rec=node,id=254,attr=8,data=ProblemSizeRunParam,parent=253 +__rec=node,id=255,attr=8,data=machine_build,parent=245 +__rec=node,id=256,attr=8,data=systype_build,parent=245 +__rec=node,id=257,attr=8,data=Compiler_path_version,parent=245 +__rec=node,id=258,attr=8,data=compiler,parent=245 +__rec=node,id=259,attr=8,data=compiler_version,parent=245 +__rec=node,id=260,attr=8,data=rajaperf_compiler_options,parent=245 +__rec=node,id=261,attr=8,data=rajaperf_compiler,parent=245 +__rec=node,id=262,attr=8,data=cmake_exe_linker_flags,parent=245 +__rec=node,id=263,attr=8,data=cmake_cxx_flags,parent=245 +__rec=node,id=264,attr=8,data=cmake_build_type,parent=245 +__rec=node,id=265,attr=8,data=raja_version,parent=245 +__rec=node,id=266,attr=8,data=perfsuite_version,parent=245 +__rec=node,id=267,attr=238,data=host,parent=243 +__rec=node,id=268,attr=10,data=1612,parent=267 +__rec=node,id=269,attr=8,data=cluster,parent=268 +__rec=node,id=270,attr=241,data=set of string,parent=3 +__rec=node,id=271,attr=240,data=2,parent=270 +__rec=node,id=272,attr=238,data=runinfo,parent=271 +__rec=node,id=273,attr=10,data=1612,parent=272 +__rec=node,id=274,attr=8,data=cmdline,parent=273 +__rec=node,id=275,attr=241,data=set of path,parent=3 +__rec=node,id=276,attr=240,data=2,parent=275 +__rec=node,id=277,attr=238,data=binary,parent=276 +__rec=node,id=278,attr=10,data=1612,parent=277 +__rec=node,id=279,attr=8,data=libraries,parent=278 +__rec=node,id=280,attr=241,data=date,parent=2 +__rec=node,id=281,attr=240,data=2,parent=280 +__rec=node,id=282,attr=238,data=runinfo,parent=281 +__rec=node,id=283,attr=10,data=1612,parent=282 +__rec=node,id=284,attr=8,data=launchdate,parent=283 +__rec=node,id=285,attr=238,data=runinfo,parent=243 +__rec=node,id=286,attr=10,data=1612,parent=285 +__rec=node,id=287,attr=8,data=user,parent=286 +__rec=node,id=288,attr=8,data=cali.channel,parent=16 +__rec=node,id=289,attr=288,data=spot +__rec=node,id=290,attr=287,data=umdev,parent=289 +__rec=node,id=291,attr=284,data=1673516370,parent=290 +__rec=node,id=292,attr=279,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=291 +__rec=node,id=293,attr=274,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=292 +__rec=node,id=294,attr=269,data=ruby,parent=293 +__rec=node,id=295,attr=266,data=0.11.0,parent=294 +__rec=node,id=296,attr=265,data=2022.10.4,parent=295 +__rec=node,id=297,attr=264,data=RelWithDebInfo,parent=296 +__rec=node,id=298,attr=263,data= -Wall -Wextra ,parent=297 +__rec=node,id=299,attr=262,data=,parent=298 +__rec=node,id=300,attr=261,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=299 +__rec=node,id=301,attr=260,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=300 +__rec=node,id=302,attr=259,data=8.3.1,parent=301 +__rec=node,id=303,attr=258,data=g++-8.3.1,parent=302 +__rec=node,id=304,attr=257,data=gcc-8.3.1,parent=303 +__rec=node,id=305,attr=256,data=toss_3_x86_64_ib,parent=304 +__rec=node,id=306,attr=255,data=ruby961,parent=305 +__rec=node,id=307,attr=254,data=1.000000,parent=306 +__rec=node,id=308,attr=249,data=Factor,parent=307 +__rec=node,id=309,attr=248,data=4.5,parent=308 +__rec=node,id=310,attr=247,data=112,parent=309 +__rec=node,id=311,attr=246,data=Base_Seq,parent=310 +__rec=globals,ref=323=311 diff --git a/test/caliper-refs/Lambda_OpenMP.cali b/test/caliper-refs/Lambda_OpenMP.cali new file mode 100644 index 000000000..bd45de048 --- /dev/null +++ b/test/caliper-refs/Lambda_OpenMP.cali @@ -0,0 +1,384 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=189,attr=14,data=sec,parent=5 +__rec=node,id=190,attr=13,data=Min time/rank,parent=189 +__rec=node,id=191,attr=10,data=65,parent=190 +__rec=node,id=192,attr=8,data=min#inclusive#sum#time.duration,parent=191 +__rec=node,id=193,attr=13,data=Max time/rank,parent=189 +__rec=node,id=194,attr=10,data=65,parent=193 +__rec=node,id=195,attr=8,data=max#inclusive#sum#time.duration,parent=194 +__rec=node,id=196,attr=13,data=Avg time/rank,parent=189 +__rec=node,id=197,attr=10,data=65,parent=196 +__rec=node,id=198,attr=8,data=avg#inclusive#sum#time.duration,parent=197 +__rec=node,id=201,attr=10,data=193,parent=5 +__rec=node,id=202,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=201 +__rec=node,id=199,attr=10,data=193,parent=2 +__rec=node,id=200,attr=8,data=avg.count#inclusive#sum#time.duration,parent=199 +__rec=node,id=203,attr=13,data=Total time,parent=189 +__rec=node,id=204,attr=10,data=65,parent=203 +__rec=node,id=205,attr=8,data=sum#inclusive#sum#time.duration,parent=204 +__rec=node,id=206,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=207,attr=10,data=65,parent=206 +__rec=node,id=208,attr=8,data=any#any#max#Bytes/Rep,parent=207 +__rec=node,id=209,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=210,attr=10,data=65,parent=209 +__rec=node,id=211,attr=8,data=any#any#max#Flops/Rep,parent=210 +__rec=node,id=212,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=213,attr=10,data=65,parent=212 +__rec=node,id=214,attr=8,data=any#any#max#Iterations/Rep,parent=213 +__rec=node,id=215,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=216,attr=10,data=65,parent=215 +__rec=node,id=217,attr=8,data=any#any#max#Kernels/Rep,parent=216 +__rec=node,id=218,attr=13,data=ProblemSize,parent=5 +__rec=node,id=219,attr=10,data=65,parent=218 +__rec=node,id=220,attr=8,data=any#any#max#ProblemSize,parent=219 +__rec=node,id=221,attr=13,data=Reps,parent=5 +__rec=node,id=222,attr=10,data=65,parent=221 +__rec=node,id=223,attr=8,data=any#any#max#Reps,parent=222 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=224,attr=15,data=regionprofile +__rec=ctx,ref=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=61.876137=61.876137=61.876137=61.876137=1=61.876137=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=Lambda_OpenMP +__rec=ctx,ref=60=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.924977=0.924977=0.924977=0.924977=1=0.924977=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.152077=0.152077=0.152077=0.152077=1=0.152077=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000152=0.000152=0.000152=0.000152=1=0.000152=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000148=0.000148=0.000148=0.000148=1=0.000148=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000342=0.000342=0.000342=0.000342=1=0.000342=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000292=0.000292=0.000292=0.000292=1=0.000292=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000286=0.000286=0.000286=0.000286=1=0.000286=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 +__rec=ctx,ref=72=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000509=0.000509=0.000509=0.000509=1=0.000509=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 +__rec=ctx,ref=73=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000504=0.000504=0.000504=0.000504=1=0.000504=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=74=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 +__rec=ctx,ref=75=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000576=0.000576=0.000576=0.000576=1=0.000576=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=76=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000299=0.000299=0.000299=0.000299=1=0.000299=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 +__rec=ctx,ref=77=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000293=0.000293=0.000293=0.000293=1=0.000293=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=78=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000186=0.000186=0.000186=0.000186=1=0.000186=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 +__rec=ctx,ref=79=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000181=0.000181=0.000181=0.000181=1=0.000181=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=80=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000184=0.000184=0.000184=0.000184=1=0.000184=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 +__rec=ctx,ref=81=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000180=0.000180=0.000180=0.000180=1=0.000180=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=82=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.026078=0.026078=0.026078=0.026078=1=0.026078=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 +__rec=ctx,ref=83=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.026070=0.026070=0.026070=0.026070=1=0.026070=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=84=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000298=0.000298=0.000298=0.000298=1=0.000298=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 +__rec=ctx,ref=85=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000291=0.000291=0.000291=0.000291=1=0.000291=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=86=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000193=0.000193=0.000193=0.000193=1=0.000193=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 +__rec=ctx,ref=87=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000183=0.000183=0.000183=0.000183=1=0.000183=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=88=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.121816=0.121816=0.121816=0.121816=1=0.121816=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 +__rec=ctx,ref=89=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.121809=0.121809=0.121809=0.121809=1=0.121809=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=90=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000154=0.000154=0.000154=0.000154=1=0.000154=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 +__rec=ctx,ref=91=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000149=0.000149=0.000149=0.000149=1=0.000149=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=92=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000359=0.000359=0.000359=0.000359=1=0.000359=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 +__rec=ctx,ref=93=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000355=0.000355=0.000355=0.000355=1=0.000355=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=94=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 +__rec=ctx,ref=95=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000389=0.000389=0.000389=0.000389=1=0.000389=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=96=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000173=0.000173=0.000173=0.000173=1=0.000173=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 +__rec=ctx,ref=97=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000169=0.000169=0.000169=0.000169=1=0.000169=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=98=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011186=0.011186=0.011186=0.011186=1=0.011186=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 +__rec=ctx,ref=99=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006425=0.006425=0.006425=0.006425=1=0.006425=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 +__rec=ctx,ref=100=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006417=0.006417=0.006417=0.006417=1=0.006417=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 +__rec=ctx,ref=101=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 +__rec=ctx,ref=102=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000255=0.000255=0.000255=0.000255=1=0.000255=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 +__rec=ctx,ref=103=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000340=0.000340=0.000340=0.000340=1=0.000340=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 +__rec=ctx,ref=104=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000333=0.000333=0.000333=0.000333=1=0.000333=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 +__rec=ctx,ref=105=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 +__rec=ctx,ref=106=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000258=0.000258=0.000258=0.000258=1=0.000258=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 +__rec=ctx,ref=107=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000403=0.000403=0.000403=0.000403=1=0.000403=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 +__rec=ctx,ref=108=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000399=0.000399=0.000399=0.000399=1=0.000399=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 +__rec=ctx,ref=109=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000701=0.000701=0.000701=0.000701=1=0.000701=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 +__rec=ctx,ref=110=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000690=0.000690=0.000690=0.000690=1=0.000690=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 +__rec=ctx,ref=111=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 +__rec=ctx,ref=112=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000257=0.000257=0.000257=0.000257=1=0.000257=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 +__rec=ctx,ref=113=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000698=0.000698=0.000698=0.000698=1=0.000698=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 +__rec=ctx,ref=114=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000690=0.000690=0.000690=0.000690=1=0.000690=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 +__rec=ctx,ref=115=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001122=0.001122=0.001122=0.001122=1=0.001122=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 +__rec=ctx,ref=116=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001115=0.001115=0.001115=0.001115=1=0.001115=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 +__rec=ctx,ref=117=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000383=0.000383=0.000383=0.000383=1=0.000383=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 +__rec=ctx,ref=118=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000376=0.000376=0.000376=0.000376=1=0.000376=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 +__rec=ctx,ref=119=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000278=0.000278=0.000278=0.000278=1=0.000278=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 +__rec=ctx,ref=120=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000271=0.000271=0.000271=0.000271=1=0.000271=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=121=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.714984=0.714984=0.714984=0.714984=1=0.714984=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 +__rec=ctx,ref=122=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.172167=0.172167=0.172167=0.172167=1=0.172167=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 +__rec=ctx,ref=123=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.172158=0.172158=0.172158=0.172158=1=0.172158=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 +__rec=ctx,ref=124=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.268010=0.268010=0.268010=0.268010=1=0.268010=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 +__rec=ctx,ref=125=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.267996=0.267996=0.267996=0.267996=1=0.267996=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 +__rec=ctx,ref=126=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.084866=0.084866=0.084866=0.084866=1=0.084866=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 +__rec=ctx,ref=127=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.084860=0.084860=0.084860=0.084860=1=0.084860=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 +__rec=ctx,ref=128=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000490=0.000490=0.000490=0.000490=1=0.000490=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 +__rec=ctx,ref=129=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000485=0.000485=0.000485=0.000485=1=0.000485=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 +__rec=ctx,ref=130=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.008285=0.008285=0.008285=0.008285=1=0.008285=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 +__rec=ctx,ref=131=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.008280=0.008280=0.008280=0.008280=1=0.008280=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 +__rec=ctx,ref=132=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.053857=0.053857=0.053857=0.053857=1=0.053857=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 +__rec=ctx,ref=133=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.053849=0.053849=0.053849=0.053849=1=0.053849=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 +__rec=ctx,ref=134=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.099208=0.099208=0.099208=0.099208=1=0.099208=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 +__rec=ctx,ref=135=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.099202=0.099202=0.099202=0.099202=1=0.099202=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 +__rec=ctx,ref=136=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009339=0.009339=0.009339=0.009339=1=0.009339=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 +__rec=ctx,ref=137=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009326=0.009326=0.009326=0.009326=1=0.009326=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 +__rec=ctx,ref=138=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000427=0.000427=0.000427=0.000427=1=0.000427=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 +__rec=ctx,ref=139=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000423=0.000423=0.000423=0.000423=1=0.000423=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 +__rec=ctx,ref=140=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.010565=0.010565=0.010565=0.010565=1=0.010565=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 +__rec=ctx,ref=141=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.010558=0.010558=0.010558=0.010558=1=0.010558=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 +__rec=ctx,ref=142=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001839=0.001839=0.001839=0.001839=1=0.001839=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 +__rec=ctx,ref=143=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001832=0.001832=0.001832=0.001832=1=0.001832=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 +__rec=ctx,ref=144=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005512=0.005512=0.005512=0.005512=1=0.005512=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 +__rec=ctx,ref=145=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005502=0.005502=0.005502=0.005502=1=0.005502=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 +__rec=ctx,ref=146=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 +__rec=ctx,ref=147=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream,parent=60 +__rec=ctx,ref=148=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001681=0.001681=0.001681=0.001681=1=0.001681=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 +__rec=ctx,ref=149=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 +__rec=ctx,ref=150=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000340=0.000340=0.000340=0.000340=1=0.000340=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 +__rec=ctx,ref=151=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 +__rec=ctx,ref=152=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 +__rec=ctx,ref=153=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 +__rec=ctx,ref=154=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 +__rec=ctx,ref=155=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000344=0.000344=0.000344=0.000344=1=0.000344=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 +__rec=ctx,ref=156=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 +__rec=ctx,ref=157=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000287=0.000287=0.000287=0.000287=1=0.000287=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 +__rec=ctx,ref=158=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000281=0.000281=0.000281=0.000281=1=0.000281=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps,parent=60 +__rec=ctx,ref=159=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.025303=0.025303=0.025303=0.025303=1=0.025303=216000000.000000=79417584.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 +__rec=ctx,ref=160=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000805=0.000805=0.000805=0.000805=1=0.000805=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 +__rec=ctx,ref=161=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000800=0.000800=0.000800=0.000800=1=0.000800=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_ENERGY,parent=159 +__rec=ctx,ref=162=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000514=0.000514=0.000514=0.000514=1=0.000514=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_ENERGY.default,parent=162 +__rec=ctx,ref=163=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000506=0.000506=0.000506=0.000506=1=0.000506=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_FIR,parent=159 +__rec=ctx,ref=164=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000339=0.000339=0.000339=0.000339=1=0.000339=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_FIR.default,parent=164 +__rec=ctx,ref=165=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_HALOEXCHANGE,parent=159 +__rec=ctx,ref=166=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005194=0.005194=0.005194=0.005194=1=0.005194=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_HALOEXCHANGE.default,parent=166 +__rec=ctx,ref=167=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005185=0.005185=0.005185=0.005185=1=0.005185=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 +__rec=ctx,ref=168=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.014440=0.014440=0.014440=0.014440=1=0.014440=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=168 +__rec=ctx,ref=169=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.014433=0.014433=0.014433=0.014433=1=0.014433=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_LTIMES,parent=159 +__rec=ctx,ref=170=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000585=0.000585=0.000585=0.000585=1=0.000585=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_LTIMES.default,parent=170 +__rec=ctx,ref=171=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 +__rec=ctx,ref=172=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000588=0.000588=0.000588=0.000588=1=0.000588=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=172 +__rec=ctx,ref=173=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 +__rec=ctx,ref=174=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001144=0.001144=0.001144=0.001144=1=0.001144=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=174 +__rec=ctx,ref=175=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001139=0.001139=0.001139=0.001139=1=0.001139=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_PRESSURE,parent=159 +__rec=ctx,ref=176=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000743=0.000743=0.000743=0.000743=1=0.000743=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_PRESSURE.default,parent=176 +__rec=ctx,ref=177=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000737=0.000737=0.000737=0.000737=1=0.000737=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_VOL3D,parent=159 +__rec=ctx,ref=178=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000903=0.000903=0.000903=0.000903=1=0.000903=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_VOL3D.default,parent=178 +__rec=ctx,ref=179=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000890=0.000890=0.000890=0.000890=1=0.000890=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=180,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=180=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.019297=0.019297=0.019297=0.019297=1=0.019297=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Algorithm_SCAN,parent=180 +__rec=ctx,ref=181=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000365=0.000365=0.000365=0.000365=1=0.000365=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Algorithm_SCAN.default,parent=181 +__rec=ctx,ref=182=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000360=0.000360=0.000360=0.000360=1=0.000360=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=183,attr=59,data=Algorithm_REDUCE_SUM,parent=180 +__rec=ctx,ref=183=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000221=0.000221=0.000221=0.000221=1=0.000221=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=184,attr=59,data=Algorithm_REDUCE_SUM.default,parent=183 +__rec=ctx,ref=184=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000216=0.000216=0.000216=0.000216=1=0.000216=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=185,attr=59,data=Algorithm_MEMSET,parent=180 +__rec=ctx,ref=185=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009364=0.009364=0.009364=0.009364=1=0.009364=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm_MEMSET.default,parent=185 +__rec=ctx,ref=186=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009359=0.009359=0.009359=0.009359=1=0.009359=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_MEMCPY,parent=180 +__rec=ctx,ref=187=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009329=0.009329=0.009329=0.009329=1=0.009329=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_MEMCPY.default,parent=187 +__rec=ctx,ref=188=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009324=0.009324=0.009324=0.009324=1=0.009324=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=300,attr=10,data=512,parent=3 +__rec=node,id=306,attr=8,data=spot.channels,parent=300 +__rec=node,id=305,attr=8,data=spot.options,parent=300 +__rec=node,id=303,attr=10,data=512,parent=1 +__rec=node,id=304,attr=8,data=spot.format.version,parent=303 +__rec=node,id=302,attr=8,data=spot.timeseries.metrics,parent=300 +__rec=node,id=301,attr=8,data=spot.metrics,parent=300 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=307,attr=301,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=308,attr=302,data=,parent=307 +__rec=node,id=309,attr=304,data=2,parent=308 +__rec=node,id=310,attr=305,data=,parent=309 +__rec=node,id=311,attr=306,data=regionprofile,parent=310 +__rec=node,id=225,attr=10,data=84,parent=3 +__rec=node,id=226,attr=8,data=adiak.subcategory,parent=225 +__rec=node,id=227,attr=10,data=84,parent=1 +__rec=node,id=228,attr=8,data=adiak.category,parent=227 +__rec=node,id=229,attr=8,data=adiak.type,parent=225 +__rec=node,id=230,attr=229,data=string,parent=3 +__rec=node,id=231,attr=228,data=2,parent=230 +__rec=node,id=232,attr=226,data=none,parent=231 +__rec=node,id=233,attr=10,data=1612,parent=232 +__rec=node,id=234,attr=8,data=variant,parent=233 +__rec=node,id=235,attr=8,data=omp_max_threads,parent=233 +__rec=node,id=236,attr=8,data=omp_version,parent=233 +__rec=node,id=237,attr=8,data=SizeMeaning,parent=233 +__rec=node,id=238,attr=229,data=double,parent=5 +__rec=node,id=239,attr=228,data=2,parent=238 +__rec=node,id=240,attr=226,data=none,parent=239 +__rec=node,id=241,attr=10,data=1612,parent=240 +__rec=node,id=242,attr=8,data=ProblemSizeRunParam,parent=241 +__rec=node,id=243,attr=8,data=machine_build,parent=233 +__rec=node,id=244,attr=8,data=systype_build,parent=233 +__rec=node,id=245,attr=8,data=Compiler_path_version,parent=233 +__rec=node,id=246,attr=8,data=compiler,parent=233 +__rec=node,id=247,attr=8,data=compiler_version,parent=233 +__rec=node,id=248,attr=8,data=rajaperf_compiler_options,parent=233 +__rec=node,id=249,attr=8,data=rajaperf_compiler,parent=233 +__rec=node,id=250,attr=8,data=cmake_exe_linker_flags,parent=233 +__rec=node,id=251,attr=8,data=cmake_cxx_flags,parent=233 +__rec=node,id=252,attr=8,data=cmake_build_type,parent=233 +__rec=node,id=253,attr=8,data=raja_version,parent=233 +__rec=node,id=254,attr=8,data=perfsuite_version,parent=233 +__rec=node,id=255,attr=226,data=host,parent=231 +__rec=node,id=256,attr=10,data=1612,parent=255 +__rec=node,id=257,attr=8,data=cluster,parent=256 +__rec=node,id=258,attr=229,data=set of string,parent=3 +__rec=node,id=259,attr=228,data=2,parent=258 +__rec=node,id=260,attr=226,data=runinfo,parent=259 +__rec=node,id=261,attr=10,data=1612,parent=260 +__rec=node,id=262,attr=8,data=cmdline,parent=261 +__rec=node,id=263,attr=229,data=set of path,parent=3 +__rec=node,id=264,attr=228,data=2,parent=263 +__rec=node,id=265,attr=226,data=binary,parent=264 +__rec=node,id=266,attr=10,data=1612,parent=265 +__rec=node,id=267,attr=8,data=libraries,parent=266 +__rec=node,id=268,attr=229,data=date,parent=2 +__rec=node,id=269,attr=228,data=2,parent=268 +__rec=node,id=270,attr=226,data=runinfo,parent=269 +__rec=node,id=271,attr=10,data=1612,parent=270 +__rec=node,id=272,attr=8,data=launchdate,parent=271 +__rec=node,id=273,attr=226,data=runinfo,parent=231 +__rec=node,id=274,attr=10,data=1612,parent=273 +__rec=node,id=275,attr=8,data=user,parent=274 +__rec=node,id=276,attr=8,data=cali.channel,parent=16 +__rec=node,id=277,attr=276,data=spot +__rec=node,id=278,attr=275,data=umdev,parent=277 +__rec=node,id=279,attr=272,data=1673516370,parent=278 +__rec=node,id=280,attr=267,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=279 +__rec=node,id=281,attr=262,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=280 +__rec=node,id=282,attr=257,data=ruby,parent=281 +__rec=node,id=283,attr=254,data=0.11.0,parent=282 +__rec=node,id=284,attr=253,data=2022.10.4,parent=283 +__rec=node,id=285,attr=252,data=RelWithDebInfo,parent=284 +__rec=node,id=286,attr=251,data= -Wall -Wextra ,parent=285 +__rec=node,id=287,attr=250,data=,parent=286 +__rec=node,id=288,attr=249,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=287 +__rec=node,id=289,attr=248,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=288 +__rec=node,id=290,attr=247,data=8.3.1,parent=289 +__rec=node,id=291,attr=246,data=g++-8.3.1,parent=290 +__rec=node,id=292,attr=245,data=gcc-8.3.1,parent=291 +__rec=node,id=293,attr=244,data=toss_3_x86_64_ib,parent=292 +__rec=node,id=294,attr=243,data=ruby961,parent=293 +__rec=node,id=295,attr=242,data=1.000000,parent=294 +__rec=node,id=296,attr=237,data=Factor,parent=295 +__rec=node,id=297,attr=236,data=4.5,parent=296 +__rec=node,id=298,attr=235,data=112,parent=297 +__rec=node,id=299,attr=234,data=Lambda_OpenMP,parent=298 +__rec=globals,ref=311=299 diff --git a/test/caliper-refs/Lambda_Seq.cali b/test/caliper-refs/Lambda_Seq.cali new file mode 100644 index 000000000..d53a88014 --- /dev/null +++ b/test/caliper-refs/Lambda_Seq.cali @@ -0,0 +1,384 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=189,attr=14,data=sec,parent=5 +__rec=node,id=190,attr=13,data=Min time/rank,parent=189 +__rec=node,id=191,attr=10,data=65,parent=190 +__rec=node,id=192,attr=8,data=min#inclusive#sum#time.duration,parent=191 +__rec=node,id=193,attr=13,data=Max time/rank,parent=189 +__rec=node,id=194,attr=10,data=65,parent=193 +__rec=node,id=195,attr=8,data=max#inclusive#sum#time.duration,parent=194 +__rec=node,id=196,attr=13,data=Avg time/rank,parent=189 +__rec=node,id=197,attr=10,data=65,parent=196 +__rec=node,id=198,attr=8,data=avg#inclusive#sum#time.duration,parent=197 +__rec=node,id=201,attr=10,data=193,parent=5 +__rec=node,id=202,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=201 +__rec=node,id=199,attr=10,data=193,parent=2 +__rec=node,id=200,attr=8,data=avg.count#inclusive#sum#time.duration,parent=199 +__rec=node,id=203,attr=13,data=Total time,parent=189 +__rec=node,id=204,attr=10,data=65,parent=203 +__rec=node,id=205,attr=8,data=sum#inclusive#sum#time.duration,parent=204 +__rec=node,id=206,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=207,attr=10,data=65,parent=206 +__rec=node,id=208,attr=8,data=any#any#max#Bytes/Rep,parent=207 +__rec=node,id=209,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=210,attr=10,data=65,parent=209 +__rec=node,id=211,attr=8,data=any#any#max#Flops/Rep,parent=210 +__rec=node,id=212,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=213,attr=10,data=65,parent=212 +__rec=node,id=214,attr=8,data=any#any#max#Iterations/Rep,parent=213 +__rec=node,id=215,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=216,attr=10,data=65,parent=215 +__rec=node,id=217,attr=8,data=any#any#max#Kernels/Rep,parent=216 +__rec=node,id=218,attr=13,data=ProblemSize,parent=5 +__rec=node,id=219,attr=10,data=65,parent=218 +__rec=node,id=220,attr=8,data=any#any#max#ProblemSize,parent=219 +__rec=node,id=221,attr=13,data=Reps,parent=5 +__rec=node,id=222,attr=10,data=65,parent=221 +__rec=node,id=223,attr=8,data=any#any#max#Reps,parent=222 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=224,attr=15,data=regionprofile +__rec=ctx,ref=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=49.781536=49.781536=49.781536=49.781536=1=49.781536=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=Lambda_Seq +__rec=ctx,ref=60=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=12.944897=12.944897=12.944897=12.944897=1=12.944897=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.680827=0.680827=0.680827=0.680827=1=0.680827=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000979=0.000979=0.000979=0.000979=1=0.000979=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000976=0.000976=0.000976=0.000976=1=0.000976=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000739=0.000739=0.000739=0.000739=1=0.000739=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000736=0.000736=0.000736=0.000736=1=0.000736=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007106=0.007106=0.007106=0.007106=1=0.007106=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007102=0.007102=0.007102=0.007102=1=0.007102=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 +__rec=ctx,ref=72=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003858=0.003858=0.003858=0.003858=1=0.003858=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 +__rec=ctx,ref=73=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003854=0.003854=0.003854=0.003854=1=0.003854=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=74=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004706=0.004706=0.004706=0.004706=1=0.004706=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 +__rec=ctx,ref=75=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004702=0.004702=0.004702=0.004702=1=0.004702=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=76=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002041=0.002041=0.002041=0.002041=1=0.002041=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 +__rec=ctx,ref=77=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002036=0.002036=0.002036=0.002036=1=0.002036=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=78=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000516=0.000516=0.000516=0.000516=1=0.000516=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 +__rec=ctx,ref=79=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000512=0.000512=0.000512=0.000512=1=0.000512=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=80=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000520=0.000520=0.000520=0.000520=1=0.000520=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 +__rec=ctx,ref=81=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000517=0.000517=0.000517=0.000517=1=0.000517=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=82=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.646852=0.646852=0.646852=0.646852=1=0.646852=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 +__rec=ctx,ref=83=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.646844=0.646844=0.646844=0.646844=1=0.646844=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=84=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002052=0.002052=0.002052=0.002052=1=0.002052=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 +__rec=ctx,ref=85=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002047=0.002047=0.002047=0.002047=1=0.002047=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=86=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000634=0.000634=0.000634=0.000634=1=0.000634=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 +__rec=ctx,ref=87=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000628=0.000628=0.000628=0.000628=1=0.000628=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=88=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001174=0.001174=0.001174=0.001174=1=0.001174=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 +__rec=ctx,ref=89=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001171=0.001171=0.001171=0.001171=1=0.001171=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=90=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002273=0.002273=0.002273=0.002273=1=0.002273=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 +__rec=ctx,ref=91=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002268=0.002268=0.002268=0.002268=1=0.002268=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=92=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000543=0.000543=0.000543=0.000543=1=0.000543=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 +__rec=ctx,ref=93=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000540=0.000540=0.000540=0.000540=1=0.000540=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=94=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001520=0.001520=0.001520=0.001520=1=0.001520=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 +__rec=ctx,ref=95=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001516=0.001516=0.001516=0.001516=1=0.001516=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=96=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005263=0.005263=0.005263=0.005263=1=0.005263=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 +__rec=ctx,ref=97=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005260=0.005260=0.005260=0.005260=1=0.005260=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=98=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.047058=0.047058=0.047058=0.047058=1=0.047058=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 +__rec=ctx,ref=99=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006930=0.006930=0.006930=0.006930=1=0.006930=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 +__rec=ctx,ref=100=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006925=0.006925=0.006925=0.006925=1=0.006925=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 +__rec=ctx,ref=101=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002474=0.002474=0.002474=0.002474=1=0.002474=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 +__rec=ctx,ref=102=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002469=0.002469=0.002469=0.002469=1=0.002469=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 +__rec=ctx,ref=103=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000660=0.000660=0.000660=0.000660=1=0.000660=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 +__rec=ctx,ref=104=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000656=0.000656=0.000656=0.000656=1=0.000656=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 +__rec=ctx,ref=105=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001018=0.001018=0.001018=0.001018=1=0.001018=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 +__rec=ctx,ref=106=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001011=0.001011=0.001011=0.001011=1=0.001011=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 +__rec=ctx,ref=107=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000636=0.000636=0.000636=0.000636=1=0.000636=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 +__rec=ctx,ref=108=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000632=0.000632=0.000632=0.000632=1=0.000632=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 +__rec=ctx,ref=109=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002962=0.002962=0.002962=0.002962=1=0.002962=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 +__rec=ctx,ref=110=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002956=0.002956=0.002956=0.002956=1=0.002956=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 +__rec=ctx,ref=111=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001069=0.001069=0.001069=0.001069=1=0.001069=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 +__rec=ctx,ref=112=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001064=0.001064=0.001064=0.001064=1=0.001064=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 +__rec=ctx,ref=113=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009841=0.009841=0.009841=0.009841=1=0.009841=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 +__rec=ctx,ref=114=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009833=0.009833=0.009833=0.009833=1=0.009833=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 +__rec=ctx,ref=115=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005109=0.005109=0.005109=0.005109=1=0.005109=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 +__rec=ctx,ref=116=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005102=0.005102=0.005102=0.005102=1=0.005102=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 +__rec=ctx,ref=117=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.015014=0.015014=0.015014=0.015014=1=0.015014=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 +__rec=ctx,ref=118=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.015008=0.015008=0.015008=0.015008=1=0.015008=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 +__rec=ctx,ref=119=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001314=0.001314=0.001314=0.001314=1=0.001314=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 +__rec=ctx,ref=120=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001310=0.001310=0.001310=0.001310=1=0.001310=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=121=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=12.122137=12.122137=12.122137=12.122137=1=12.122137=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 +__rec=ctx,ref=122=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=3.456017=3.456017=3.456017=3.456017=1=3.456017=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 +__rec=ctx,ref=123=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=3.456010=3.456010=3.456010=3.456010=1=3.456010=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 +__rec=ctx,ref=124=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=5.351619=5.351619=5.351619=5.351619=1=5.351619=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 +__rec=ctx,ref=125=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=5.351601=5.351601=5.351601=5.351601=1=5.351601=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 +__rec=ctx,ref=126=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.086265=0.086265=0.086265=0.086265=1=0.086265=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 +__rec=ctx,ref=127=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.086254=0.086254=0.086254=0.086254=1=0.086254=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 +__rec=ctx,ref=128=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002559=0.002559=0.002559=0.002559=1=0.002559=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 +__rec=ctx,ref=129=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002555=0.002555=0.002555=0.002555=1=0.002555=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 +__rec=ctx,ref=130=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.095378=0.095378=0.095378=0.095378=1=0.095378=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 +__rec=ctx,ref=131=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.095374=0.095374=0.095374=0.095374=1=0.095374=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 +__rec=ctx,ref=132=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.699198=0.699198=0.699198=0.699198=1=0.699198=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 +__rec=ctx,ref=133=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.699194=0.699194=0.699194=0.699194=1=0.699194=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 +__rec=ctx,ref=134=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=2.256919=2.256919=2.256919=2.256919=1=2.256919=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 +__rec=ctx,ref=135=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=2.256913=2.256913=2.256913=2.256913=1=2.256913=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 +__rec=ctx,ref=136=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003382=0.003382=0.003382=0.003382=1=0.003382=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 +__rec=ctx,ref=137=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003376=0.003376=0.003376=0.003376=1=0.003376=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 +__rec=ctx,ref=138=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001032=0.001032=0.001032=0.001032=1=0.001032=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 +__rec=ctx,ref=139=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001027=0.001027=0.001027=0.001027=1=0.001027=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 +__rec=ctx,ref=140=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.067686=0.067686=0.067686=0.067686=1=0.067686=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 +__rec=ctx,ref=141=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.067677=0.067677=0.067677=0.067677=1=0.067677=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 +__rec=ctx,ref=142=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.021538=0.021538=0.021538=0.021538=1=0.021538=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 +__rec=ctx,ref=143=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.021532=0.021532=0.021532=0.021532=1=0.021532=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 +__rec=ctx,ref=144=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.077991=0.077991=0.077991=0.077991=1=0.077991=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 +__rec=ctx,ref=145=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.077986=0.077986=0.077986=0.077986=1=0.077986=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 +__rec=ctx,ref=146=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002511=0.002511=0.002511=0.002511=1=0.002511=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 +__rec=ctx,ref=147=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002506=0.002506=0.002506=0.002506=1=0.002506=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream,parent=60 +__rec=ctx,ref=148=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004101=0.004101=0.004101=0.004101=1=0.004101=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 +__rec=ctx,ref=149=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000921=0.000921=0.000921=0.000921=1=0.000921=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 +__rec=ctx,ref=150=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 +__rec=ctx,ref=151=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000620=0.000620=0.000620=0.000620=1=0.000620=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 +__rec=ctx,ref=152=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000616=0.000616=0.000616=0.000616=1=0.000616=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 +__rec=ctx,ref=153=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001016=0.001016=0.001016=0.001016=1=0.001016=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 +__rec=ctx,ref=154=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001013=0.001013=0.001013=0.001013=1=0.001013=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 +__rec=ctx,ref=155=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000604=0.000604=0.000604=0.000604=1=0.000604=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 +__rec=ctx,ref=156=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000600=0.000600=0.000600=0.000600=1=0.000600=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 +__rec=ctx,ref=157=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000924=0.000924=0.000924=0.000924=1=0.000924=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 +__rec=ctx,ref=158=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000920=0.000920=0.000920=0.000920=1=0.000920=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps,parent=60 +__rec=ctx,ref=159=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.087302=0.087302=0.087302=0.087302=1=0.087302=216000000.000000=79417584.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 +__rec=ctx,ref=160=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007851=0.007851=0.007851=0.007851=1=0.007851=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 +__rec=ctx,ref=161=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007848=0.007848=0.007848=0.007848=1=0.007848=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_ENERGY,parent=159 +__rec=ctx,ref=162=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.013210=0.013210=0.013210=0.013210=1=0.013210=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_ENERGY.default,parent=162 +__rec=ctx,ref=163=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.013201=0.013201=0.013201=0.013201=1=0.013201=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_FIR,parent=159 +__rec=ctx,ref=164=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.012294=0.012294=0.012294=0.012294=1=0.012294=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_FIR.default,parent=164 +__rec=ctx,ref=165=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.012290=0.012290=0.012290=0.012290=1=0.012290=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_HALOEXCHANGE,parent=159 +__rec=ctx,ref=166=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000758=0.000758=0.000758=0.000758=1=0.000758=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_HALOEXCHANGE.default,parent=166 +__rec=ctx,ref=167=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000752=0.000752=0.000752=0.000752=1=0.000752=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 +__rec=ctx,ref=168=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000751=0.000751=0.000751=0.000751=1=0.000751=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=168 +__rec=ctx,ref=169=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000746=0.000746=0.000746=0.000746=1=0.000746=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_LTIMES,parent=159 +__rec=ctx,ref=170=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017924=0.017924=0.017924=0.017924=1=0.017924=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_LTIMES.default,parent=170 +__rec=ctx,ref=171=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017920=0.017920=0.017920=0.017920=1=0.017920=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 +__rec=ctx,ref=172=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017952=0.017952=0.017952=0.017952=1=0.017952=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=172 +__rec=ctx,ref=173=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017948=0.017948=0.017948=0.017948=1=0.017948=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 +__rec=ctx,ref=174=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002991=0.002991=0.002991=0.002991=1=0.002991=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=174 +__rec=ctx,ref=175=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002986=0.002986=0.002986=0.002986=1=0.002986=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_PRESSURE,parent=159 +__rec=ctx,ref=176=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002368=0.002368=0.002368=0.002368=1=0.002368=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_PRESSURE.default,parent=176 +__rec=ctx,ref=177=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002363=0.002363=0.002363=0.002363=1=0.002363=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_VOL3D,parent=159 +__rec=ctx,ref=178=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011172=0.011172=0.011172=0.011172=1=0.011172=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_VOL3D.default,parent=178 +__rec=ctx,ref=179=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011166=0.011166=0.011166=0.011166=1=0.011166=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=180,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=180=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003132=0.003132=0.003132=0.003132=1=0.003132=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Algorithm_SCAN,parent=180 +__rec=ctx,ref=181=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001028=0.001028=0.001028=0.001028=1=0.001028=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Algorithm_SCAN.default,parent=181 +__rec=ctx,ref=182=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001021=0.001021=0.001021=0.001021=1=0.001021=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=183,attr=59,data=Algorithm_REDUCE_SUM,parent=180 +__rec=ctx,ref=183=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001100=0.001100=0.001100=0.001100=1=0.001100=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=184,attr=59,data=Algorithm_REDUCE_SUM.default,parent=183 +__rec=ctx,ref=184=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001095=0.001095=0.001095=0.001095=1=0.001095=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=185,attr=59,data=Algorithm_MEMSET,parent=180 +__rec=ctx,ref=185=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000369=0.000369=0.000369=0.000369=1=0.000369=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm_MEMSET.default,parent=185 +__rec=ctx,ref=186=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000366=0.000366=0.000366=0.000366=1=0.000366=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_MEMCPY,parent=180 +__rec=ctx,ref=187=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000622=0.000622=0.000622=0.000622=1=0.000622=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_MEMCPY.default,parent=187 +__rec=ctx,ref=188=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000618=0.000618=0.000618=0.000618=1=0.000618=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=300,attr=10,data=512,parent=3 +__rec=node,id=306,attr=8,data=spot.channels,parent=300 +__rec=node,id=305,attr=8,data=spot.options,parent=300 +__rec=node,id=303,attr=10,data=512,parent=1 +__rec=node,id=304,attr=8,data=spot.format.version,parent=303 +__rec=node,id=302,attr=8,data=spot.timeseries.metrics,parent=300 +__rec=node,id=301,attr=8,data=spot.metrics,parent=300 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=307,attr=301,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=308,attr=302,data=,parent=307 +__rec=node,id=309,attr=304,data=2,parent=308 +__rec=node,id=310,attr=305,data=,parent=309 +__rec=node,id=311,attr=306,data=regionprofile,parent=310 +__rec=node,id=225,attr=10,data=84,parent=3 +__rec=node,id=226,attr=8,data=adiak.subcategory,parent=225 +__rec=node,id=227,attr=10,data=84,parent=1 +__rec=node,id=228,attr=8,data=adiak.category,parent=227 +__rec=node,id=229,attr=8,data=adiak.type,parent=225 +__rec=node,id=230,attr=229,data=string,parent=3 +__rec=node,id=231,attr=228,data=2,parent=230 +__rec=node,id=232,attr=226,data=none,parent=231 +__rec=node,id=233,attr=10,data=1612,parent=232 +__rec=node,id=234,attr=8,data=variant,parent=233 +__rec=node,id=235,attr=8,data=omp_max_threads,parent=233 +__rec=node,id=236,attr=8,data=omp_version,parent=233 +__rec=node,id=237,attr=8,data=SizeMeaning,parent=233 +__rec=node,id=238,attr=229,data=double,parent=5 +__rec=node,id=239,attr=228,data=2,parent=238 +__rec=node,id=240,attr=226,data=none,parent=239 +__rec=node,id=241,attr=10,data=1612,parent=240 +__rec=node,id=242,attr=8,data=ProblemSizeRunParam,parent=241 +__rec=node,id=243,attr=8,data=machine_build,parent=233 +__rec=node,id=244,attr=8,data=systype_build,parent=233 +__rec=node,id=245,attr=8,data=Compiler_path_version,parent=233 +__rec=node,id=246,attr=8,data=compiler,parent=233 +__rec=node,id=247,attr=8,data=compiler_version,parent=233 +__rec=node,id=248,attr=8,data=rajaperf_compiler_options,parent=233 +__rec=node,id=249,attr=8,data=rajaperf_compiler,parent=233 +__rec=node,id=250,attr=8,data=cmake_exe_linker_flags,parent=233 +__rec=node,id=251,attr=8,data=cmake_cxx_flags,parent=233 +__rec=node,id=252,attr=8,data=cmake_build_type,parent=233 +__rec=node,id=253,attr=8,data=raja_version,parent=233 +__rec=node,id=254,attr=8,data=perfsuite_version,parent=233 +__rec=node,id=255,attr=226,data=host,parent=231 +__rec=node,id=256,attr=10,data=1612,parent=255 +__rec=node,id=257,attr=8,data=cluster,parent=256 +__rec=node,id=258,attr=229,data=set of string,parent=3 +__rec=node,id=259,attr=228,data=2,parent=258 +__rec=node,id=260,attr=226,data=runinfo,parent=259 +__rec=node,id=261,attr=10,data=1612,parent=260 +__rec=node,id=262,attr=8,data=cmdline,parent=261 +__rec=node,id=263,attr=229,data=set of path,parent=3 +__rec=node,id=264,attr=228,data=2,parent=263 +__rec=node,id=265,attr=226,data=binary,parent=264 +__rec=node,id=266,attr=10,data=1612,parent=265 +__rec=node,id=267,attr=8,data=libraries,parent=266 +__rec=node,id=268,attr=229,data=date,parent=2 +__rec=node,id=269,attr=228,data=2,parent=268 +__rec=node,id=270,attr=226,data=runinfo,parent=269 +__rec=node,id=271,attr=10,data=1612,parent=270 +__rec=node,id=272,attr=8,data=launchdate,parent=271 +__rec=node,id=273,attr=226,data=runinfo,parent=231 +__rec=node,id=274,attr=10,data=1612,parent=273 +__rec=node,id=275,attr=8,data=user,parent=274 +__rec=node,id=276,attr=8,data=cali.channel,parent=16 +__rec=node,id=277,attr=276,data=spot +__rec=node,id=278,attr=275,data=umdev,parent=277 +__rec=node,id=279,attr=272,data=1673516370,parent=278 +__rec=node,id=280,attr=267,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=279 +__rec=node,id=281,attr=262,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=280 +__rec=node,id=282,attr=257,data=ruby,parent=281 +__rec=node,id=283,attr=254,data=0.11.0,parent=282 +__rec=node,id=284,attr=253,data=2022.10.4,parent=283 +__rec=node,id=285,attr=252,data=RelWithDebInfo,parent=284 +__rec=node,id=286,attr=251,data= -Wall -Wextra ,parent=285 +__rec=node,id=287,attr=250,data=,parent=286 +__rec=node,id=288,attr=249,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=287 +__rec=node,id=289,attr=248,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=288 +__rec=node,id=290,attr=247,data=8.3.1,parent=289 +__rec=node,id=291,attr=246,data=g++-8.3.1,parent=290 +__rec=node,id=292,attr=245,data=gcc-8.3.1,parent=291 +__rec=node,id=293,attr=244,data=toss_3_x86_64_ib,parent=292 +__rec=node,id=294,attr=243,data=ruby961,parent=293 +__rec=node,id=295,attr=242,data=1.000000,parent=294 +__rec=node,id=296,attr=237,data=Factor,parent=295 +__rec=node,id=297,attr=236,data=4.5,parent=296 +__rec=node,id=298,attr=235,data=112,parent=297 +__rec=node,id=299,attr=234,data=Lambda_Seq,parent=298 +__rec=globals,ref=311=299 diff --git a/test/caliper-refs/RAJA_OpenMP.cali b/test/caliper-refs/RAJA_OpenMP.cali new file mode 100644 index 000000000..da551292d --- /dev/null +++ b/test/caliper-refs/RAJA_OpenMP.cali @@ -0,0 +1,400 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=197,attr=14,data=sec,parent=5 +__rec=node,id=198,attr=13,data=Min time/rank,parent=197 +__rec=node,id=199,attr=10,data=65,parent=198 +__rec=node,id=200,attr=8,data=min#inclusive#sum#time.duration,parent=199 +__rec=node,id=201,attr=13,data=Max time/rank,parent=197 +__rec=node,id=202,attr=10,data=65,parent=201 +__rec=node,id=203,attr=8,data=max#inclusive#sum#time.duration,parent=202 +__rec=node,id=204,attr=13,data=Avg time/rank,parent=197 +__rec=node,id=205,attr=10,data=65,parent=204 +__rec=node,id=206,attr=8,data=avg#inclusive#sum#time.duration,parent=205 +__rec=node,id=209,attr=10,data=193,parent=5 +__rec=node,id=210,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=209 +__rec=node,id=207,attr=10,data=193,parent=2 +__rec=node,id=208,attr=8,data=avg.count#inclusive#sum#time.duration,parent=207 +__rec=node,id=211,attr=13,data=Total time,parent=197 +__rec=node,id=212,attr=10,data=65,parent=211 +__rec=node,id=213,attr=8,data=sum#inclusive#sum#time.duration,parent=212 +__rec=node,id=214,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=215,attr=10,data=65,parent=214 +__rec=node,id=216,attr=8,data=any#any#max#Bytes/Rep,parent=215 +__rec=node,id=217,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=218,attr=10,data=65,parent=217 +__rec=node,id=219,attr=8,data=any#any#max#Flops/Rep,parent=218 +__rec=node,id=220,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=221,attr=10,data=65,parent=220 +__rec=node,id=222,attr=8,data=any#any#max#Iterations/Rep,parent=221 +__rec=node,id=223,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=224,attr=10,data=65,parent=223 +__rec=node,id=225,attr=8,data=any#any#max#Kernels/Rep,parent=224 +__rec=node,id=226,attr=13,data=ProblemSize,parent=5 +__rec=node,id=227,attr=10,data=65,parent=226 +__rec=node,id=228,attr=8,data=any#any#max#ProblemSize,parent=227 +__rec=node,id=229,attr=13,data=Reps,parent=5 +__rec=node,id=230,attr=10,data=65,parent=229 +__rec=node,id=231,attr=8,data=any#any#max#Reps,parent=230 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=232,attr=15,data=regionprofile +__rec=ctx,ref=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=61.785285=61.785285=61.785285=61.785285=1=61.785285=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=RAJA_OpenMP +__rec=ctx,ref=60=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=1.042290=1.042290=1.042290=1.042290=1=1.042290=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.152660=0.152660=0.152660=0.152660=1=0.152660=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000161=0.000161=0.000161=0.000161=1=0.000161=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000156=0.000156=0.000156=0.000156=1=0.000156=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000320=0.000320=0.000320=0.000320=1=0.000320=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000314=0.000314=0.000314=0.000314=1=0.000314=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=72=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000907=0.000907=0.000907=0.000907=1=0.000907=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=72 +__rec=ctx,ref=73=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000902=0.000902=0.000902=0.000902=1=0.000902=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=74=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000307=0.000307=0.000307=0.000307=1=0.000307=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INIT3.default,parent=74 +__rec=ctx,ref=75=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000300=0.000300=0.000300=0.000300=1=0.000300=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=76=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000217=0.000217=0.000217=0.000217=1=0.000217=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT_VIEW1D.default,parent=76 +__rec=ctx,ref=77=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000212=0.000212=0.000212=0.000212=1=0.000212=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=78=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000200=0.000200=0.000200=0.000200=1=0.000200=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=78 +__rec=ctx,ref=79=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000194=0.000194=0.000194=0.000194=1=0.000194=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=80=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.025423=0.025423=0.025423=0.025423=1=0.025423=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=80 +__rec=ctx,ref=81=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.025416=0.025416=0.025416=0.025416=1=0.025416=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=82=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MULADDSUB.default,parent=82 +__rec=ctx,ref=83=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000329=0.000329=0.000329=0.000329=1=0.000329=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=84=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000200=0.000200=0.000200=0.000200=1=0.000200=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_NESTED_INIT.default,parent=84 +__rec=ctx,ref=85=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000195=0.000195=0.000195=0.000195=1=0.000195=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=86=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.116482=0.116482=0.116482=0.116482=1=0.116482=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_PI_ATOMIC.default,parent=86 +__rec=ctx,ref=87=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.116478=0.116478=0.116478=0.116478=1=0.116478=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=88=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_REDUCE.default,parent=88 +__rec=ctx,ref=89=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000335=0.000335=0.000335=0.000335=1=0.000335=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=90=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.005569=0.005569=0.005569=0.005569=1=0.005569=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_REDUCE3_INT.default,parent=90 +__rec=ctx,ref=91=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.005564=0.005564=0.005564=0.005564=1=0.005564=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=92=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001413=0.001413=0.001413=0.001413=1=0.001413=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE_STRUCT.default,parent=92 +__rec=ctx,ref=93=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001409=0.001409=0.001409=0.001409=1=0.001409=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=94=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000356=0.000356=0.000356=0.000356=1=0.000356=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_TRAP_INT.default,parent=94 +__rec=ctx,ref=95=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000351=0.000351=0.000351=0.000351=1=0.000351=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=96=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.016915=0.016915=0.016915=0.016915=1=0.016915=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Lcals_DIFF_PREDICT,parent=96 +__rec=ctx,ref=97=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.011661=0.011661=0.011661=0.011661=1=0.011661=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals_DIFF_PREDICT.default,parent=97 +__rec=ctx,ref=98=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.011650=0.011650=0.011650=0.011650=1=0.011650=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_EOS,parent=96 +__rec=ctx,ref=99=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000291=0.000291=0.000291=0.000291=1=0.000291=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_EOS.default,parent=99 +__rec=ctx,ref=100=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000286=0.000286=0.000286=0.000286=1=0.000286=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_FIRST_DIFF,parent=96 +__rec=ctx,ref=101=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_FIRST_DIFF.default,parent=101 +__rec=ctx,ref=102=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_MIN,parent=96 +__rec=ctx,ref=103=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000481=0.000481=0.000481=0.000481=1=0.000481=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_MIN.default,parent=103 +__rec=ctx,ref=104=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000476=0.000476=0.000476=0.000476=1=0.000476=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_SUM,parent=96 +__rec=ctx,ref=105=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000418=0.000418=0.000418=0.000418=1=0.000418=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_SUM.default,parent=105 +__rec=ctx,ref=106=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000414=0.000414=0.000414=0.000414=1=0.000414=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_GEN_LIN_RECUR,parent=96 +__rec=ctx,ref=107=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=107 +__rec=ctx,ref=108=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000778=0.000778=0.000778=0.000778=1=0.000778=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_HYDRO_1D,parent=96 +__rec=ctx,ref=109=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000303=0.000303=0.000303=0.000303=1=0.000303=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_HYDRO_1D.default,parent=109 +__rec=ctx,ref=110=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000296=0.000296=0.000296=0.000296=1=0.000296=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_2D,parent=96 +__rec=ctx,ref=111=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000692=0.000692=0.000692=0.000692=1=0.000692=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_2D.default,parent=111 +__rec=ctx,ref=112=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000680=0.000680=0.000680=0.000680=1=0.000680=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_INT_PREDICT,parent=96 +__rec=ctx,ref=113=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001182=0.001182=0.001182=0.001182=1=0.001182=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_INT_PREDICT.default,parent=113 +__rec=ctx,ref=114=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001175=0.001175=0.001175=0.001175=1=0.001175=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_PLANCKIAN,parent=96 +__rec=ctx,ref=115=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_PLANCKIAN.default,parent=115 +__rec=ctx,ref=116=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000386=0.000386=0.000386=0.000386=1=0.000386=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_TRIDIAG_ELIM,parent=96 +__rec=ctx,ref=117=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000309=0.000309=0.000309=0.000309=1=0.000309=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=117 +__rec=ctx,ref=118=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000303=0.000303=0.000303=0.000303=1=0.000303=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=119=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.773181=0.773181=0.773181=0.773181=1=0.773181=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=120,attr=59,data=Polybench_2MM,parent=119 +__rec=ctx,ref=120=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.175900=0.175900=0.175900=0.175900=1=0.175900=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench_2MM.default,parent=120 +__rec=ctx,ref=121=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.175890=0.175890=0.175890=0.175890=1=0.175890=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_3MM,parent=119 +__rec=ctx,ref=122=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.273619=0.273619=0.273619=0.273619=1=0.273619=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_3MM.default,parent=122 +__rec=ctx,ref=123=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.273598=0.273598=0.273598=0.273598=1=0.273598=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_ADI,parent=119 +__rec=ctx,ref=124=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.125600=0.125600=0.125600=0.125600=1=0.125600=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_ADI.default,parent=124 +__rec=ctx,ref=125=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.125594=0.125594=0.125594=0.125594=1=0.125594=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ATAX,parent=119 +__rec=ctx,ref=126=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000537=0.000537=0.000537=0.000537=1=0.000537=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ATAX.default,parent=126 +__rec=ctx,ref=127=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000533=0.000533=0.000533=0.000533=1=0.000533=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_FDTD_2D,parent=119 +__rec=ctx,ref=128=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010653=0.010653=0.010653=0.010653=1=0.010653=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_FDTD_2D.default,parent=128 +__rec=ctx,ref=129=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010646=0.010646=0.010646=0.010646=1=0.010646=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FLOYD_WARSHALL,parent=119 +__rec=ctx,ref=130=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.066670=0.066670=0.066670=0.066670=1=0.066670=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=130 +__rec=ctx,ref=131=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.066664=0.066664=0.066664=0.066664=1=0.066664=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_GEMM,parent=119 +__rec=ctx,ref=132=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.099128=0.099128=0.099128=0.099128=1=0.099128=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_GEMM.default,parent=132 +__rec=ctx,ref=133=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.099112=0.099112=0.099112=0.099112=1=0.099112=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMVER,parent=119 +__rec=ctx,ref=134=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000768=0.000768=0.000768=0.000768=1=0.000768=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMVER.default,parent=134 +__rec=ctx,ref=135=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000758=0.000758=0.000758=0.000758=1=0.000758=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GESUMMV,parent=119 +__rec=ctx,ref=136=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000436=0.000436=0.000436=0.000436=1=0.000436=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GESUMMV.default,parent=136 +__rec=ctx,ref=137=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000432=0.000432=0.000432=0.000432=1=0.000432=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_HEAT_3D,parent=119 +__rec=ctx,ref=138=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010680=0.010680=0.010680=0.010680=1=0.010680=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_HEAT_3D.default,parent=138 +__rec=ctx,ref=139=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010673=0.010673=0.010673=0.010673=1=0.010673=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_JACOBI_1D,parent=119 +__rec=ctx,ref=140=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.002128=0.002128=0.002128=0.002128=1=0.002128=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_JACOBI_1D.default,parent=140 +__rec=ctx,ref=141=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.002122=0.002122=0.002122=0.002122=1=0.002122=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_2D,parent=119 +__rec=ctx,ref=142=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.006652=0.006652=0.006652=0.006652=1=0.006652=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_2D.default,parent=142 +__rec=ctx,ref=143=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.006645=0.006645=0.006645=0.006645=1=0.006645=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_MVT,parent=119 +__rec=ctx,ref=144=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_MVT.default,parent=144 +__rec=ctx,ref=145=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=146,attr=59,data=Stream,parent=60 +__rec=ctx,ref=146=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001987=0.001987=0.001987=0.001987=1=0.001987=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=147,attr=59,data=Stream_ADD,parent=146 +__rec=ctx,ref=147=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000368=0.000368=0.000368=0.000368=1=0.000368=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream_ADD.default,parent=147 +__rec=ctx,ref=148=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000361=0.000361=0.000361=0.000361=1=0.000361=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_COPY,parent=146 +__rec=ctx,ref=149=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000357=0.000357=0.000357=0.000357=1=0.000357=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_COPY.default,parent=149 +__rec=ctx,ref=150=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000352=0.000352=0.000352=0.000352=1=0.000352=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_DOT,parent=146 +__rec=ctx,ref=151=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000563=0.000563=0.000563=0.000563=1=0.000563=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_DOT.default,parent=151 +__rec=ctx,ref=152=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000558=0.000558=0.000558=0.000558=1=0.000558=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_MUL,parent=146 +__rec=ctx,ref=153=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000360=0.000360=0.000360=0.000360=1=0.000360=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_MUL.default,parent=153 +__rec=ctx,ref=154=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_TRIAD,parent=146 +__rec=ctx,ref=155=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000319=0.000319=0.000319=0.000319=1=0.000319=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_TRIAD.default,parent=155 +__rec=ctx,ref=156=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000313=0.000313=0.000313=0.000313=1=0.000313=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Apps,parent=60 +__rec=ctx,ref=157=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021992=0.021992=0.021992=0.021992=1=0.021992=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=158,attr=59,data=Apps_CONVECTION3DPA,parent=157 +__rec=ctx,ref=158=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000647=0.000647=0.000647=0.000647=1=0.000647=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps_CONVECTION3DPA.default,parent=158 +__rec=ctx,ref=159=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000639=0.000639=0.000639=0.000639=1=0.000639=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=157 +__rec=ctx,ref=160=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000983=0.000983=0.000983=0.000983=1=0.000983=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 +__rec=ctx,ref=161=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000976=0.000976=0.000976=0.000976=1=0.000976=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_DIFFUSION3DPA,parent=157 +__rec=ctx,ref=162=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000853=0.000853=0.000853=0.000853=1=0.000853=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_DIFFUSION3DPA.default,parent=162 +__rec=ctx,ref=163=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000846=0.000846=0.000846=0.000846=1=0.000846=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_ENERGY,parent=157 +__rec=ctx,ref=164=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000471=0.000471=0.000471=0.000471=1=0.000471=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_ENERGY.default,parent=164 +__rec=ctx,ref=165=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000462=0.000462=0.000462=0.000462=1=0.000462=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_FIR,parent=157 +__rec=ctx,ref=166=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_FIR.default,parent=166 +__rec=ctx,ref=167=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000365=0.000365=0.000365=0.000365=1=0.000365=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE,parent=157 +__rec=ctx,ref=168=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007077=0.007077=0.007077=0.007077=1=0.007077=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE.default,parent=168 +__rec=ctx,ref=169=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007069=0.007069=0.007069=0.007069=1=0.007069=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=157 +__rec=ctx,ref=170=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007084=0.007084=0.007084=0.007084=1=0.007084=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=170 +__rec=ctx,ref=171=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007078=0.007078=0.007078=0.007078=1=0.007078=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_LTIMES,parent=157 +__rec=ctx,ref=172=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000586=0.000586=0.000586=0.000586=1=0.000586=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_LTIMES.default,parent=172 +__rec=ctx,ref=173=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_LTIMES_NOVIEW,parent=157 +__rec=ctx,ref=174=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000614=0.000614=0.000614=0.000614=1=0.000614=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=174 +__rec=ctx,ref=175=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000608=0.000608=0.000608=0.000608=1=0.000608=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_MASS3DPA,parent=157 +__rec=ctx,ref=176=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000490=0.000490=0.000490=0.000490=1=0.000490=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_MASS3DPA.default,parent=176 +__rec=ctx,ref=177=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000484=0.000484=0.000484=0.000484=1=0.000484=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=157 +__rec=ctx,ref=178=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001086=0.001086=0.001086=0.001086=1=0.001086=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=178 +__rec=ctx,ref=179=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001079=0.001079=0.001079=0.001079=1=0.001079=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=180,attr=59,data=Apps_PRESSURE,parent=157 +__rec=ctx,ref=180=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000752=0.000752=0.000752=0.000752=1=0.000752=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Apps_PRESSURE.default,parent=180 +__rec=ctx,ref=181=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000745=0.000745=0.000745=0.000745=1=0.000745=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Apps_VOL3D,parent=157 +__rec=ctx,ref=182=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000923=0.000923=0.000923=0.000923=1=0.000923=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=183,attr=59,data=Apps_VOL3D.default,parent=182 +__rec=ctx,ref=183=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000912=0.000912=0.000912=0.000912=1=0.000912=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=184,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=184=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.075052=0.075052=0.075052=0.075052=1=0.075052=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=185,attr=59,data=Algorithm_SCAN,parent=184 +__rec=ctx,ref=185=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001310=0.001310=0.001310=0.001310=1=0.001310=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm_SCAN.default,parent=185 +__rec=ctx,ref=186=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001305=0.001305=0.001305=0.001305=1=0.001305=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_SORT,parent=184 +__rec=ctx,ref=187=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021546=0.021546=0.021546=0.021546=1=0.021546=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_SORT.default,parent=187 +__rec=ctx,ref=188=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021540=0.021540=0.021540=0.021540=1=0.021540=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=189,attr=59,data=Algorithm_SORTPAIRS,parent=184 +__rec=ctx,ref=189=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.022820=0.022820=0.022820=0.022820=1=0.022820=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=190,attr=59,data=Algorithm_SORTPAIRS.default,parent=189 +__rec=ctx,ref=190=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.022812=0.022812=0.022812=0.022812=1=0.022812=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=191,attr=59,data=Algorithm_REDUCE_SUM,parent=184 +__rec=ctx,ref=191=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000437=0.000437=0.000437=0.000437=1=0.000437=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=192,attr=59,data=Algorithm_REDUCE_SUM.default,parent=191 +__rec=ctx,ref=192=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000430=0.000430=0.000430=0.000430=1=0.000430=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=193,attr=59,data=Algorithm_MEMSET,parent=184 +__rec=ctx,ref=193=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014469=0.014469=0.014469=0.014469=1=0.014469=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=194,attr=59,data=Algorithm_MEMSET.default,parent=193 +__rec=ctx,ref=194=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014465=0.014465=0.014465=0.014465=1=0.014465=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=195,attr=59,data=Algorithm_MEMCPY,parent=184 +__rec=ctx,ref=195=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014445=0.014445=0.014445=0.014445=1=0.014445=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=196,attr=59,data=Algorithm_MEMCPY.default,parent=195 +__rec=ctx,ref=196=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014439=0.014439=0.014439=0.014439=1=0.014439=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=308,attr=10,data=512,parent=3 +__rec=node,id=314,attr=8,data=spot.channels,parent=308 +__rec=node,id=313,attr=8,data=spot.options,parent=308 +__rec=node,id=311,attr=10,data=512,parent=1 +__rec=node,id=312,attr=8,data=spot.format.version,parent=311 +__rec=node,id=310,attr=8,data=spot.timeseries.metrics,parent=308 +__rec=node,id=309,attr=8,data=spot.metrics,parent=308 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=315,attr=309,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=316,attr=310,data=,parent=315 +__rec=node,id=317,attr=312,data=2,parent=316 +__rec=node,id=318,attr=313,data=,parent=317 +__rec=node,id=319,attr=314,data=regionprofile,parent=318 +__rec=node,id=233,attr=10,data=84,parent=3 +__rec=node,id=234,attr=8,data=adiak.subcategory,parent=233 +__rec=node,id=235,attr=10,data=84,parent=1 +__rec=node,id=236,attr=8,data=adiak.category,parent=235 +__rec=node,id=237,attr=8,data=adiak.type,parent=233 +__rec=node,id=238,attr=237,data=string,parent=3 +__rec=node,id=239,attr=236,data=2,parent=238 +__rec=node,id=240,attr=234,data=none,parent=239 +__rec=node,id=241,attr=10,data=1612,parent=240 +__rec=node,id=242,attr=8,data=variant,parent=241 +__rec=node,id=243,attr=8,data=omp_max_threads,parent=241 +__rec=node,id=244,attr=8,data=omp_version,parent=241 +__rec=node,id=245,attr=8,data=SizeMeaning,parent=241 +__rec=node,id=246,attr=237,data=double,parent=5 +__rec=node,id=247,attr=236,data=2,parent=246 +__rec=node,id=248,attr=234,data=none,parent=247 +__rec=node,id=249,attr=10,data=1612,parent=248 +__rec=node,id=250,attr=8,data=ProblemSizeRunParam,parent=249 +__rec=node,id=251,attr=8,data=machine_build,parent=241 +__rec=node,id=252,attr=8,data=systype_build,parent=241 +__rec=node,id=253,attr=8,data=Compiler_path_version,parent=241 +__rec=node,id=254,attr=8,data=compiler,parent=241 +__rec=node,id=255,attr=8,data=compiler_version,parent=241 +__rec=node,id=256,attr=8,data=rajaperf_compiler_options,parent=241 +__rec=node,id=257,attr=8,data=rajaperf_compiler,parent=241 +__rec=node,id=258,attr=8,data=cmake_exe_linker_flags,parent=241 +__rec=node,id=259,attr=8,data=cmake_cxx_flags,parent=241 +__rec=node,id=260,attr=8,data=cmake_build_type,parent=241 +__rec=node,id=261,attr=8,data=raja_version,parent=241 +__rec=node,id=262,attr=8,data=perfsuite_version,parent=241 +__rec=node,id=263,attr=234,data=host,parent=239 +__rec=node,id=264,attr=10,data=1612,parent=263 +__rec=node,id=265,attr=8,data=cluster,parent=264 +__rec=node,id=266,attr=237,data=set of string,parent=3 +__rec=node,id=267,attr=236,data=2,parent=266 +__rec=node,id=268,attr=234,data=runinfo,parent=267 +__rec=node,id=269,attr=10,data=1612,parent=268 +__rec=node,id=270,attr=8,data=cmdline,parent=269 +__rec=node,id=271,attr=237,data=set of path,parent=3 +__rec=node,id=272,attr=236,data=2,parent=271 +__rec=node,id=273,attr=234,data=binary,parent=272 +__rec=node,id=274,attr=10,data=1612,parent=273 +__rec=node,id=275,attr=8,data=libraries,parent=274 +__rec=node,id=276,attr=237,data=date,parent=2 +__rec=node,id=277,attr=236,data=2,parent=276 +__rec=node,id=278,attr=234,data=runinfo,parent=277 +__rec=node,id=279,attr=10,data=1612,parent=278 +__rec=node,id=280,attr=8,data=launchdate,parent=279 +__rec=node,id=281,attr=234,data=runinfo,parent=239 +__rec=node,id=282,attr=10,data=1612,parent=281 +__rec=node,id=283,attr=8,data=user,parent=282 +__rec=node,id=284,attr=8,data=cali.channel,parent=16 +__rec=node,id=285,attr=284,data=spot +__rec=node,id=286,attr=283,data=umdev,parent=285 +__rec=node,id=287,attr=280,data=1673516370,parent=286 +__rec=node,id=288,attr=275,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=287 +__rec=node,id=289,attr=270,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=288 +__rec=node,id=290,attr=265,data=ruby,parent=289 +__rec=node,id=291,attr=262,data=0.11.0,parent=290 +__rec=node,id=292,attr=261,data=2022.10.4,parent=291 +__rec=node,id=293,attr=260,data=RelWithDebInfo,parent=292 +__rec=node,id=294,attr=259,data= -Wall -Wextra ,parent=293 +__rec=node,id=295,attr=258,data=,parent=294 +__rec=node,id=296,attr=257,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=295 +__rec=node,id=297,attr=256,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=296 +__rec=node,id=298,attr=255,data=8.3.1,parent=297 +__rec=node,id=299,attr=254,data=g++-8.3.1,parent=298 +__rec=node,id=300,attr=253,data=gcc-8.3.1,parent=299 +__rec=node,id=301,attr=252,data=toss_3_x86_64_ib,parent=300 +__rec=node,id=302,attr=251,data=ruby961,parent=301 +__rec=node,id=303,attr=250,data=1.000000,parent=302 +__rec=node,id=304,attr=245,data=Factor,parent=303 +__rec=node,id=305,attr=244,data=4.5,parent=304 +__rec=node,id=306,attr=243,data=112,parent=305 +__rec=node,id=307,attr=242,data=RAJA_OpenMP,parent=306 +__rec=globals,ref=319=307 diff --git a/test/caliper-refs/RAJA_Seq.cali b/test/caliper-refs/RAJA_Seq.cali new file mode 100644 index 000000000..2fa630016 --- /dev/null +++ b/test/caliper-refs/RAJA_Seq.cali @@ -0,0 +1,404 @@ +__rec=node,id=12,attr=10,data=64,parent=3 +__rec=node,id=13,attr=8,data=attribute.alias,parent=12 +__rec=node,id=14,attr=8,data=attribute.unit,parent=12 +__rec=node,id=199,attr=14,data=sec,parent=5 +__rec=node,id=200,attr=13,data=Min time/rank,parent=199 +__rec=node,id=201,attr=10,data=65,parent=200 +__rec=node,id=202,attr=8,data=min#inclusive#sum#time.duration,parent=201 +__rec=node,id=203,attr=13,data=Max time/rank,parent=199 +__rec=node,id=204,attr=10,data=65,parent=203 +__rec=node,id=205,attr=8,data=max#inclusive#sum#time.duration,parent=204 +__rec=node,id=206,attr=13,data=Avg time/rank,parent=199 +__rec=node,id=207,attr=10,data=65,parent=206 +__rec=node,id=208,attr=8,data=avg#inclusive#sum#time.duration,parent=207 +__rec=node,id=211,attr=10,data=193,parent=5 +__rec=node,id=212,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=211 +__rec=node,id=209,attr=10,data=193,parent=2 +__rec=node,id=210,attr=8,data=avg.count#inclusive#sum#time.duration,parent=209 +__rec=node,id=213,attr=13,data=Total time,parent=199 +__rec=node,id=214,attr=10,data=65,parent=213 +__rec=node,id=215,attr=8,data=sum#inclusive#sum#time.duration,parent=214 +__rec=node,id=216,attr=13,data=Bytes/Rep,parent=5 +__rec=node,id=217,attr=10,data=65,parent=216 +__rec=node,id=218,attr=8,data=any#any#max#Bytes/Rep,parent=217 +__rec=node,id=219,attr=13,data=Flops/Rep,parent=5 +__rec=node,id=220,attr=10,data=65,parent=219 +__rec=node,id=221,attr=8,data=any#any#max#Flops/Rep,parent=220 +__rec=node,id=222,attr=13,data=Iterations/Rep,parent=5 +__rec=node,id=223,attr=10,data=65,parent=222 +__rec=node,id=224,attr=8,data=any#any#max#Iterations/Rep,parent=223 +__rec=node,id=225,attr=13,data=Kernels/Rep,parent=5 +__rec=node,id=226,attr=10,data=65,parent=225 +__rec=node,id=227,attr=8,data=any#any#max#Kernels/Rep,parent=226 +__rec=node,id=228,attr=13,data=ProblemSize,parent=5 +__rec=node,id=229,attr=10,data=65,parent=228 +__rec=node,id=230,attr=8,data=any#any#max#ProblemSize,parent=229 +__rec=node,id=231,attr=13,data=Reps,parent=5 +__rec=node,id=232,attr=10,data=65,parent=231 +__rec=node,id=233,attr=8,data=any#any#max#Reps,parent=232 +__rec=node,id=15,attr=8,data=spot.channel,parent=12 +__rec=node,id=234,attr=15,data=regionprofile +__rec=ctx,ref=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=49.406754=49.406754=49.406754=49.406754=1=49.406754=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=58,attr=10,data=276,parent=3 +__rec=node,id=59,attr=8,data=region,parent=58 +__rec=node,id=60,attr=59,data=RAJA_Seq +__rec=ctx,ref=60=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=13.351111=13.351111=13.351111=13.351111=1=13.351111=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 +__rec=node,id=65,attr=59,data=Basic,parent=60 +__rec=ctx,ref=65=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.646215=0.646215=0.646215=0.646215=1=0.646215=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 +__rec=ctx,ref=66=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000781=0.000781=0.000781=0.000781=1=0.000781=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 +__rec=ctx,ref=67=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000777=0.000777=0.000777=0.000777=1=0.000777=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 +__rec=ctx,ref=68=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000818=0.000818=0.000818=0.000818=1=0.000818=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 +__rec=ctx,ref=69=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000814=0.000814=0.000814=0.000814=1=0.000814=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 +__rec=ctx,ref=70=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006425=0.006425=0.006425=0.006425=1=0.006425=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 +__rec=ctx,ref=71=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006420=0.006420=0.006420=0.006420=1=0.006420=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=72,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 +__rec=ctx,ref=72=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.004593=0.004593=0.004593=0.004593=1=0.004593=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=73,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=72 +__rec=ctx,ref=73=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.004590=0.004590=0.004590=0.004590=1=0.004590=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=74,attr=59,data=Basic_INIT3,parent=65 +__rec=ctx,ref=74=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001882=0.001882=0.001882=0.001882=1=0.001882=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=75,attr=59,data=Basic_INIT3.default,parent=74 +__rec=ctx,ref=75=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001877=0.001877=0.001877=0.001877=1=0.001877=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=76,attr=59,data=Basic_INIT_VIEW1D,parent=65 +__rec=ctx,ref=76=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000516=0.000516=0.000516=0.000516=1=0.000516=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=77,attr=59,data=Basic_INIT_VIEW1D.default,parent=76 +__rec=ctx,ref=77=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000513=0.000513=0.000513=0.000513=1=0.000513=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 +__rec=ctx,ref=78=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000545=0.000545=0.000545=0.000545=1=0.000545=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=78 +__rec=ctx,ref=79=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000542=0.000542=0.000542=0.000542=1=0.000542=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=80,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 +__rec=ctx,ref=80=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.614849=0.614849=0.614849=0.614849=1=0.614849=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=81,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=80 +__rec=ctx,ref=81=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.614844=0.614844=0.614844=0.614844=1=0.614844=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=82,attr=59,data=Basic_MULADDSUB,parent=65 +__rec=ctx,ref=82=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001900=0.001900=0.001900=0.001900=1=0.001900=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=83,attr=59,data=Basic_MULADDSUB.default,parent=82 +__rec=ctx,ref=83=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001893=0.001893=0.001893=0.001893=1=0.001893=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=84,attr=59,data=Basic_NESTED_INIT,parent=65 +__rec=ctx,ref=84=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000838=0.000838=0.000838=0.000838=1=0.000838=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=85,attr=59,data=Basic_NESTED_INIT.default,parent=84 +__rec=ctx,ref=85=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000832=0.000832=0.000832=0.000832=1=0.000832=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=86,attr=59,data=Basic_PI_ATOMIC,parent=65 +__rec=ctx,ref=86=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002259=0.002259=0.002259=0.002259=1=0.002259=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=87,attr=59,data=Basic_PI_ATOMIC.default,parent=86 +__rec=ctx,ref=87=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002256=0.002256=0.002256=0.002256=1=0.002256=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=88,attr=59,data=Basic_PI_REDUCE,parent=65 +__rec=ctx,ref=88=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002697=0.002697=0.002697=0.002697=1=0.002697=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=89,attr=59,data=Basic_PI_REDUCE.default,parent=88 +__rec=ctx,ref=89=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002694=0.002694=0.002694=0.002694=1=0.002694=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=90,attr=59,data=Basic_REDUCE3_INT,parent=65 +__rec=ctx,ref=90=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000823=0.000823=0.000823=0.000823=1=0.000823=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=91,attr=59,data=Basic_REDUCE3_INT.default,parent=90 +__rec=ctx,ref=91=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000819=0.000819=0.000819=0.000819=1=0.000819=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=92,attr=59,data=Basic_REDUCE_STRUCT,parent=65 +__rec=ctx,ref=92=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001977=0.001977=0.001977=0.001977=1=0.001977=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=93,attr=59,data=Basic_REDUCE_STRUCT.default,parent=92 +__rec=ctx,ref=93=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001974=0.001974=0.001974=0.001974=1=0.001974=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=94,attr=59,data=Basic_TRAP_INT,parent=65 +__rec=ctx,ref=94=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005270=0.005270=0.005270=0.005270=1=0.005270=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=95,attr=59,data=Basic_TRAP_INT.default,parent=94 +__rec=ctx,ref=95=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005266=0.005266=0.005266=0.005266=1=0.005266=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=96,attr=59,data=Lcals,parent=60 +__rec=ctx,ref=96=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.045281=0.045281=0.045281=0.045281=1=0.045281=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=97,attr=59,data=Lcals_DIFF_PREDICT,parent=96 +__rec=ctx,ref=97=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006713=0.006713=0.006713=0.006713=1=0.006713=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=98,attr=59,data=Lcals_DIFF_PREDICT.default,parent=97 +__rec=ctx,ref=98=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006708=0.006708=0.006708=0.006708=1=0.006708=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=99,attr=59,data=Lcals_EOS,parent=96 +__rec=ctx,ref=99=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001515=0.001515=0.001515=0.001515=1=0.001515=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=100,attr=59,data=Lcals_EOS.default,parent=99 +__rec=ctx,ref=100=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001511=0.001511=0.001511=0.001511=1=0.001511=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=101,attr=59,data=Lcals_FIRST_DIFF,parent=96 +__rec=ctx,ref=101=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000603=0.000603=0.000603=0.000603=1=0.000603=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=102,attr=59,data=Lcals_FIRST_DIFF.default,parent=101 +__rec=ctx,ref=102=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000599=0.000599=0.000599=0.000599=1=0.000599=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=103,attr=59,data=Lcals_FIRST_MIN,parent=96 +__rec=ctx,ref=103=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001100=0.001100=0.001100=0.001100=1=0.001100=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=104,attr=59,data=Lcals_FIRST_MIN.default,parent=103 +__rec=ctx,ref=104=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001096=0.001096=0.001096=0.001096=1=0.001096=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=105,attr=59,data=Lcals_FIRST_SUM,parent=96 +__rec=ctx,ref=105=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000615=0.000615=0.000615=0.000615=1=0.000615=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=106,attr=59,data=Lcals_FIRST_SUM.default,parent=105 +__rec=ctx,ref=106=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000609=0.000609=0.000609=0.000609=1=0.000609=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=107,attr=59,data=Lcals_GEN_LIN_RECUR,parent=96 +__rec=ctx,ref=107=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002784=0.002784=0.002784=0.002784=1=0.002784=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=108,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=107 +__rec=ctx,ref=108=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002780=0.002780=0.002780=0.002780=1=0.002780=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=109,attr=59,data=Lcals_HYDRO_1D,parent=96 +__rec=ctx,ref=109=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000963=0.000963=0.000963=0.000963=1=0.000963=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=110,attr=59,data=Lcals_HYDRO_1D.default,parent=109 +__rec=ctx,ref=110=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000958=0.000958=0.000958=0.000958=1=0.000958=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=111,attr=59,data=Lcals_HYDRO_2D,parent=96 +__rec=ctx,ref=111=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.009777=0.009777=0.009777=0.009777=1=0.009777=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=112,attr=59,data=Lcals_HYDRO_2D.default,parent=111 +__rec=ctx,ref=112=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.009771=0.009771=0.009771=0.009771=1=0.009771=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 +__rec=node,id=113,attr=59,data=Lcals_INT_PREDICT,parent=96 +__rec=ctx,ref=113=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005167=0.005167=0.005167=0.005167=1=0.005167=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=114,attr=59,data=Lcals_INT_PREDICT.default,parent=113 +__rec=ctx,ref=114=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005158=0.005158=0.005158=0.005158=1=0.005158=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=115,attr=59,data=Lcals_PLANCKIAN,parent=96 +__rec=ctx,ref=115=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014707=0.014707=0.014707=0.014707=1=0.014707=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=116,attr=59,data=Lcals_PLANCKIAN.default,parent=115 +__rec=ctx,ref=116=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014700=0.014700=0.014700=0.014700=1=0.014700=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=117,attr=59,data=Lcals_TRIDIAG_ELIM,parent=96 +__rec=ctx,ref=117=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001305=0.001305=0.001305=0.001305=1=0.001305=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=118,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=117 +__rec=ctx,ref=118=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001301=0.001301=0.001301=0.001301=1=0.001301=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=119,attr=59,data=Polybench,parent=60 +__rec=ctx,ref=119=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=12.343142=12.343142=12.343142=12.343142=1=12.343142=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 +__rec=node,id=120,attr=59,data=Polybench_2MM,parent=119 +__rec=ctx,ref=120=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=3.478706=3.478706=3.478706=3.478706=1=3.478706=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=121,attr=59,data=Polybench_2MM.default,parent=120 +__rec=ctx,ref=121=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=3.478692=3.478692=3.478692=3.478692=1=3.478692=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=122,attr=59,data=Polybench_3MM,parent=119 +__rec=ctx,ref=122=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=5.426873=5.426873=5.426873=5.426873=1=5.426873=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=123,attr=59,data=Polybench_3MM.default,parent=122 +__rec=ctx,ref=123=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=5.426862=5.426862=5.426862=5.426862=1=5.426862=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 +__rec=node,id=124,attr=59,data=Polybench_ADI,parent=119 +__rec=ctx,ref=124=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.086423=0.086423=0.086423=0.086423=1=0.086423=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=125,attr=59,data=Polybench_ADI.default,parent=124 +__rec=ctx,ref=125=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.086418=0.086418=0.086418=0.086418=1=0.086418=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 +__rec=node,id=126,attr=59,data=Polybench_ATAX,parent=119 +__rec=ctx,ref=126=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002555=0.002555=0.002555=0.002555=1=0.002555=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=127,attr=59,data=Polybench_ATAX.default,parent=126 +__rec=ctx,ref=127=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002550=0.002550=0.002550=0.002550=1=0.002550=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=128,attr=59,data=Polybench_FDTD_2D,parent=119 +__rec=ctx,ref=128=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.094538=0.094538=0.094538=0.094538=1=0.094538=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=129,attr=59,data=Polybench_FDTD_2D.default,parent=128 +__rec=ctx,ref=129=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.094531=0.094531=0.094531=0.094531=1=0.094531=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 +__rec=node,id=130,attr=59,data=Polybench_FLOYD_WARSHALL,parent=119 +__rec=ctx,ref=130=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.800272=0.800272=0.800272=0.800272=1=0.800272=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=131,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=130 +__rec=ctx,ref=131=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.800267=0.800267=0.800267=0.800267=1=0.800267=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=132,attr=59,data=Polybench_GEMM,parent=119 +__rec=ctx,ref=132=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=2.262155=2.262155=2.262155=2.262155=1=2.262155=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=133,attr=59,data=Polybench_GEMM.default,parent=132 +__rec=ctx,ref=133=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=2.262150=2.262150=2.262150=2.262150=1=2.262150=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=134,attr=59,data=Polybench_GEMVER,parent=119 +__rec=ctx,ref=134=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003361=0.003361=0.003361=0.003361=1=0.003361=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=135,attr=59,data=Polybench_GEMVER.default,parent=134 +__rec=ctx,ref=135=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003356=0.003356=0.003356=0.003356=1=0.003356=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 +__rec=node,id=136,attr=59,data=Polybench_GESUMMV,parent=119 +__rec=ctx,ref=136=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001016=0.001016=0.001016=0.001016=1=0.001016=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=137,attr=59,data=Polybench_GESUMMV.default,parent=136 +__rec=ctx,ref=137=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001011=0.001011=0.001011=0.001011=1=0.001011=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 +__rec=node,id=138,attr=59,data=Polybench_HEAT_3D,parent=119 +__rec=ctx,ref=138=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.067907=0.067907=0.067907=0.067907=1=0.067907=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=139,attr=59,data=Polybench_HEAT_3D.default,parent=138 +__rec=ctx,ref=139=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.067899=0.067899=0.067899=0.067899=1=0.067899=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 +__rec=node,id=140,attr=59,data=Polybench_JACOBI_1D,parent=119 +__rec=ctx,ref=140=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.022956=0.022956=0.022956=0.022956=1=0.022956=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=141,attr=59,data=Polybench_JACOBI_1D.default,parent=140 +__rec=ctx,ref=141=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.022951=0.022951=0.022951=0.022951=1=0.022951=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 +__rec=node,id=142,attr=59,data=Polybench_JACOBI_2D,parent=119 +__rec=ctx,ref=142=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.093821=0.093821=0.093821=0.093821=1=0.093821=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=143,attr=59,data=Polybench_JACOBI_2D.default,parent=142 +__rec=ctx,ref=143=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.093816=0.093816=0.093816=0.093816=1=0.093816=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 +__rec=node,id=144,attr=59,data=Polybench_MVT,parent=119 +__rec=ctx,ref=144=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002524=0.002524=0.002524=0.002524=1=0.002524=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=145,attr=59,data=Polybench_MVT.default,parent=144 +__rec=ctx,ref=145=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002519=0.002519=0.002519=0.002519=1=0.002519=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 +__rec=node,id=146,attr=59,data=Stream,parent=60 +__rec=ctx,ref=146=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005311=0.005311=0.005311=0.005311=1=0.005311=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=147,attr=59,data=Stream_ADD,parent=146 +__rec=ctx,ref=147=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000909=0.000909=0.000909=0.000909=1=0.000909=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=148,attr=59,data=Stream_ADD.default,parent=147 +__rec=ctx,ref=148=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000906=0.000906=0.000906=0.000906=1=0.000906=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=149,attr=59,data=Stream_COPY,parent=146 +__rec=ctx,ref=149=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000594=0.000594=0.000594=0.000594=1=0.000594=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=150,attr=59,data=Stream_COPY.default,parent=149 +__rec=ctx,ref=150=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000591=0.000591=0.000591=0.000591=1=0.000591=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=151,attr=59,data=Stream_DOT,parent=146 +__rec=ctx,ref=151=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002278=0.002278=0.002278=0.002278=1=0.002278=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=152,attr=59,data=Stream_DOT.default,parent=151 +__rec=ctx,ref=152=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002273=0.002273=0.002273=0.002273=1=0.002273=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=153,attr=59,data=Stream_MUL,parent=146 +__rec=ctx,ref=153=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000597=0.000597=0.000597=0.000597=1=0.000597=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=154,attr=59,data=Stream_MUL.default,parent=153 +__rec=ctx,ref=154=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000588=0.000588=0.000588=0.000588=1=0.000588=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=155,attr=59,data=Stream_TRIAD,parent=146 +__rec=ctx,ref=155=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=156,attr=59,data=Stream_TRIAD.default,parent=155 +__rec=ctx,ref=156=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000913=0.000913=0.000913=0.000913=1=0.000913=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=157,attr=59,data=Apps,parent=60 +__rec=ctx,ref=157=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.148937=0.148937=0.148937=0.148937=1=0.148937=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 +__rec=node,id=158,attr=59,data=Apps_CONVECTION3DPA,parent=157 +__rec=ctx,ref=158=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014000=0.014000=0.014000=0.014000=1=0.014000=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=159,attr=59,data=Apps_CONVECTION3DPA.default,parent=158 +__rec=ctx,ref=159=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013997=0.013997=0.013997=0.013997=1=0.013997=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=157 +__rec=ctx,ref=160=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.008402=0.008402=0.008402=0.008402=1=0.008402=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 +__rec=ctx,ref=161=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.008397=0.008397=0.008397=0.008397=1=0.008397=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=162,attr=59,data=Apps_DIFFUSION3DPA,parent=157 +__rec=ctx,ref=162=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.032413=0.032413=0.032413=0.032413=1=0.032413=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=163,attr=59,data=Apps_DIFFUSION3DPA.default,parent=162 +__rec=ctx,ref=163=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.032404=0.032404=0.032404=0.032404=1=0.032404=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=164,attr=59,data=Apps_ENERGY,parent=157 +__rec=ctx,ref=164=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012758=0.012758=0.012758=0.012758=1=0.012758=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=165,attr=59,data=Apps_ENERGY.default,parent=164 +__rec=ctx,ref=165=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012752=0.012752=0.012752=0.012752=1=0.012752=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 +__rec=node,id=166,attr=59,data=Apps_FIR,parent=157 +__rec=ctx,ref=166=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012291=0.012291=0.012291=0.012291=1=0.012291=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=167,attr=59,data=Apps_FIR.default,parent=166 +__rec=ctx,ref=167=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012286=0.012286=0.012286=0.012286=1=0.012286=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE,parent=157 +__rec=ctx,ref=168=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000789=0.000789=0.000789=0.000789=1=0.000789=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE.default,parent=168 +__rec=ctx,ref=169=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000784=0.000784=0.000784=0.000784=1=0.000784=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 +__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=157 +__rec=ctx,ref=170=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000749=0.000749=0.000749=0.000749=1=0.000749=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=170 +__rec=ctx,ref=171=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000745=0.000745=0.000745=0.000745=1=0.000745=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=172,attr=59,data=Apps_LTIMES,parent=157 +__rec=ctx,ref=172=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.018043=0.018043=0.018043=0.018043=1=0.018043=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=173,attr=59,data=Apps_LTIMES.default,parent=172 +__rec=ctx,ref=173=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.018039=0.018039=0.018039=0.018039=1=0.018039=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=174,attr=59,data=Apps_LTIMES_NOVIEW,parent=157 +__rec=ctx,ref=174=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.017969=0.017969=0.017969=0.017969=1=0.017969=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=175,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=174 +__rec=ctx,ref=175=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.017966=0.017966=0.017966=0.017966=1=0.017966=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 +__rec=node,id=176,attr=59,data=Apps_MASS3DPA,parent=157 +__rec=ctx,ref=176=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013989=0.013989=0.013989=0.013989=1=0.013989=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=177,attr=59,data=Apps_MASS3DPA.default,parent=176 +__rec=ctx,ref=177=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013986=0.013986=0.013986=0.013986=1=0.013986=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=178,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=157 +__rec=ctx,ref=178=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003985=0.003985=0.003985=0.003985=1=0.003985=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=179,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=178 +__rec=ctx,ref=179=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003981=0.003981=0.003981=0.003981=1=0.003981=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=180,attr=59,data=Apps_PRESSURE,parent=157 +__rec=ctx,ref=180=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002355=0.002355=0.002355=0.002355=1=0.002355=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=181,attr=59,data=Apps_PRESSURE.default,parent=180 +__rec=ctx,ref=181=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002351=0.002351=0.002351=0.002351=1=0.002351=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 +__rec=node,id=182,attr=59,data=Apps_VOL3D,parent=157 +__rec=ctx,ref=182=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.011150=0.011150=0.011150=0.011150=1=0.011150=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=183,attr=59,data=Apps_VOL3D.default,parent=182 +__rec=ctx,ref=183=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.011144=0.011144=0.011144=0.011144=1=0.011144=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 +__rec=node,id=184,attr=59,data=Algorithm,parent=60 +__rec=ctx,ref=184=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.161851=0.161851=0.161851=0.161851=1=0.161851=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=185,attr=59,data=Algorithm_SCAN,parent=184 +__rec=ctx,ref=185=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001024=0.001024=0.001024=0.001024=1=0.001024=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=186,attr=59,data=Algorithm_SCAN.default,parent=185 +__rec=ctx,ref=186=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001014=0.001014=0.001014=0.001014=1=0.001014=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=187,attr=59,data=Algorithm_SORT,parent=184 +__rec=ctx,ref=187=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078832=0.078832=0.078832=0.078832=1=0.078832=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=188,attr=59,data=Algorithm_SORT.default,parent=187 +__rec=ctx,ref=188=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078829=0.078829=0.078829=0.078829=1=0.078829=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=189,attr=59,data=Algorithm_SORTPAIRS,parent=184 +__rec=ctx,ref=189=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078354=0.078354=0.078354=0.078354=1=0.078354=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=190,attr=59,data=Algorithm_SORTPAIRS.default,parent=189 +__rec=ctx,ref=190=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078348=0.078348=0.078348=0.078348=1=0.078348=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=191,attr=59,data=Algorithm_REDUCE_SUM,parent=184 +__rec=ctx,ref=191=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001099=0.001099=0.001099=0.001099=1=0.001099=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=192,attr=59,data=Algorithm_REDUCE_SUM.default,parent=191 +__rec=ctx,ref=192=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001095=0.001095=0.001095=0.001095=1=0.001095=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=193,attr=59,data=Algorithm_MEMSET,parent=184 +__rec=ctx,ref=193=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000869=0.000869=0.000869=0.000869=1=0.000869=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=194,attr=59,data=Algorithm_MEMSET.library,parent=193 +__rec=ctx,ref=194=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000310=0.000310=0.000310=0.000310=1=0.000310=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=195,attr=59,data=Algorithm_MEMSET.default,parent=193 +__rec=ctx,ref=195=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000551=0.000551=0.000551=0.000551=1=0.000551=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=196,attr=59,data=Algorithm_MEMCPY,parent=184 +__rec=ctx,ref=196=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001648=0.001648=0.001648=0.001648=1=0.001648=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=197,attr=59,data=Algorithm_MEMCPY.library,parent=196 +__rec=ctx,ref=197=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001009=0.001009=0.001009=0.001009=1=0.001009=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=198,attr=59,data=Algorithm_MEMCPY.default,parent=196 +__rec=ctx,ref=198=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000630=0.000630=0.000630=0.000630=1=0.000630=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 +__rec=node,id=310,attr=10,data=512,parent=3 +__rec=node,id=316,attr=8,data=spot.channels,parent=310 +__rec=node,id=315,attr=8,data=spot.options,parent=310 +__rec=node,id=313,attr=10,data=512,parent=1 +__rec=node,id=314,attr=8,data=spot.format.version,parent=313 +__rec=node,id=312,attr=8,data=spot.timeseries.metrics,parent=310 +__rec=node,id=311,attr=8,data=spot.metrics,parent=310 +__rec=node,id=16,attr=10,data=1612,parent=3 +__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 +__rec=node,id=18,attr=17,data=2.10.0-dev +__rec=node,id=317,attr=311,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 +__rec=node,id=318,attr=312,data=,parent=317 +__rec=node,id=319,attr=314,data=2,parent=318 +__rec=node,id=320,attr=315,data=,parent=319 +__rec=node,id=321,attr=316,data=regionprofile,parent=320 +__rec=node,id=235,attr=10,data=84,parent=3 +__rec=node,id=236,attr=8,data=adiak.subcategory,parent=235 +__rec=node,id=237,attr=10,data=84,parent=1 +__rec=node,id=238,attr=8,data=adiak.category,parent=237 +__rec=node,id=239,attr=8,data=adiak.type,parent=235 +__rec=node,id=240,attr=239,data=string,parent=3 +__rec=node,id=241,attr=238,data=2,parent=240 +__rec=node,id=242,attr=236,data=none,parent=241 +__rec=node,id=243,attr=10,data=1612,parent=242 +__rec=node,id=244,attr=8,data=variant,parent=243 +__rec=node,id=245,attr=8,data=omp_max_threads,parent=243 +__rec=node,id=246,attr=8,data=omp_version,parent=243 +__rec=node,id=247,attr=8,data=SizeMeaning,parent=243 +__rec=node,id=248,attr=239,data=double,parent=5 +__rec=node,id=249,attr=238,data=2,parent=248 +__rec=node,id=250,attr=236,data=none,parent=249 +__rec=node,id=251,attr=10,data=1612,parent=250 +__rec=node,id=252,attr=8,data=ProblemSizeRunParam,parent=251 +__rec=node,id=253,attr=8,data=machine_build,parent=243 +__rec=node,id=254,attr=8,data=systype_build,parent=243 +__rec=node,id=255,attr=8,data=Compiler_path_version,parent=243 +__rec=node,id=256,attr=8,data=compiler,parent=243 +__rec=node,id=257,attr=8,data=compiler_version,parent=243 +__rec=node,id=258,attr=8,data=rajaperf_compiler_options,parent=243 +__rec=node,id=259,attr=8,data=rajaperf_compiler,parent=243 +__rec=node,id=260,attr=8,data=cmake_exe_linker_flags,parent=243 +__rec=node,id=261,attr=8,data=cmake_cxx_flags,parent=243 +__rec=node,id=262,attr=8,data=cmake_build_type,parent=243 +__rec=node,id=263,attr=8,data=raja_version,parent=243 +__rec=node,id=264,attr=8,data=perfsuite_version,parent=243 +__rec=node,id=265,attr=236,data=host,parent=241 +__rec=node,id=266,attr=10,data=1612,parent=265 +__rec=node,id=267,attr=8,data=cluster,parent=266 +__rec=node,id=268,attr=239,data=set of string,parent=3 +__rec=node,id=269,attr=238,data=2,parent=268 +__rec=node,id=270,attr=236,data=runinfo,parent=269 +__rec=node,id=271,attr=10,data=1612,parent=270 +__rec=node,id=272,attr=8,data=cmdline,parent=271 +__rec=node,id=273,attr=239,data=set of path,parent=3 +__rec=node,id=274,attr=238,data=2,parent=273 +__rec=node,id=275,attr=236,data=binary,parent=274 +__rec=node,id=276,attr=10,data=1612,parent=275 +__rec=node,id=277,attr=8,data=libraries,parent=276 +__rec=node,id=278,attr=239,data=date,parent=2 +__rec=node,id=279,attr=238,data=2,parent=278 +__rec=node,id=280,attr=236,data=runinfo,parent=279 +__rec=node,id=281,attr=10,data=1612,parent=280 +__rec=node,id=282,attr=8,data=launchdate,parent=281 +__rec=node,id=283,attr=236,data=runinfo,parent=241 +__rec=node,id=284,attr=10,data=1612,parent=283 +__rec=node,id=285,attr=8,data=user,parent=284 +__rec=node,id=286,attr=8,data=cali.channel,parent=16 +__rec=node,id=287,attr=286,data=spot +__rec=node,id=288,attr=285,data=umdev,parent=287 +__rec=node,id=289,attr=282,data=1673516370,parent=288 +__rec=node,id=290,attr=277,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=289 +__rec=node,id=291,attr=272,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=290 +__rec=node,id=292,attr=267,data=ruby,parent=291 +__rec=node,id=293,attr=264,data=0.11.0,parent=292 +__rec=node,id=294,attr=263,data=2022.10.4,parent=293 +__rec=node,id=295,attr=262,data=RelWithDebInfo,parent=294 +__rec=node,id=296,attr=261,data= -Wall -Wextra ,parent=295 +__rec=node,id=297,attr=260,data=,parent=296 +__rec=node,id=298,attr=259,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=297 +__rec=node,id=299,attr=258,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=298 +__rec=node,id=300,attr=257,data=8.3.1,parent=299 +__rec=node,id=301,attr=256,data=g++-8.3.1,parent=300 +__rec=node,id=302,attr=255,data=gcc-8.3.1,parent=301 +__rec=node,id=303,attr=254,data=toss_3_x86_64_ib,parent=302 +__rec=node,id=304,attr=253,data=ruby961,parent=303 +__rec=node,id=305,attr=252,data=1.000000,parent=304 +__rec=node,id=306,attr=247,data=Factor,parent=305 +__rec=node,id=307,attr=246,data=4.5,parent=306 +__rec=node,id=308,attr=245,data=112,parent=307 +__rec=node,id=309,attr=244,data=RAJA_Seq,parent=308 +__rec=globals,ref=321=309 From 7731dc931878e70443c8ff502e0d40116c2ba062 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 13:49:30 +0100 Subject: [PATCH 128/174] Minor --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index f30290964..83f68e20c 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -250,7 +250,7 @@ then mv junit.xml ${project_dir}/junit.xml if ( find test -name '*.cali' | grep -q '.' ); then - cali_dir=${project_dir}/caliper_reports + cali_dir=${project_dir}/caliper-reports mkdir -p ${cali_dir} cp test/*.cali ${cali_dir} fi From 256fc52757355bee1c94df27925839e79e7f3dfe Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 15:15:47 +0100 Subject: [PATCH 129/174] Add a comparison report between cali files using hatchet --- scripts/gitlab/build_and_test.sh | 11 ++-- scripts/gitlab/hatchet-analysis.py | 53 +++++++++++++++++++ .../Base_OpenMP.cali | 0 .../Base_Seq.cali | 0 .../Lambda_OpenMP.cali | 0 .../Lambda_Seq.cali | 0 .../RAJA_OpenMP.cali | 0 .../RAJA_Seq.cali | 0 8 files changed, 61 insertions(+), 3 deletions(-) create mode 100755 scripts/gitlab/hatchet-analysis.py rename test/{caliper-refs => caliper-baselines}/Base_OpenMP.cali (100%) rename test/{caliper-refs => caliper-baselines}/Base_Seq.cali (100%) rename test/{caliper-refs => caliper-baselines}/Lambda_OpenMP.cali (100%) rename test/{caliper-refs => caliper-baselines}/Lambda_Seq.cali (100%) rename test/{caliper-refs => caliper-baselines}/RAJA_OpenMP.cali (100%) rename test/{caliper-refs => caliper-baselines}/RAJA_Seq.cali (100%) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 83f68e20c..f76915863 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -250,9 +250,14 @@ then mv junit.xml ${project_dir}/junit.xml if ( find test -name '*.cali' | grep -q '.' ); then - cali_dir=${project_dir}/caliper-reports - mkdir -p ${cali_dir} - cp test/*.cali ${cali_dir} + reports_dir=${project_dir}/caliper-reports + mkdir -p ${reports_dir} + cp test/*.cali ${reports_dir} + + baselines_dir=${project_dir}/caliper-baselines + for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do + ./gitlab/hatchet_analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} + done fi if grep -q "Errors while running CTest" ./tests_output.txt diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py new file mode 100755 index 000000000..a207e3898 --- /dev/null +++ b/scripts/gitlab/hatchet-analysis.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import sys +import platform +import datetime as dt + +from optparse import OptionParser + +parser=optparse.OptionParser() + +parser.add_option("-r", "--report", metavar="FILE", help="Pass the caliper report file.") +parser.add_option("-b", "--baseline", metavar="FILE", help="Pass the caliper baseline file.") + +(options, args) = parser.parse_args() + +input_deploy_dir_str = "/usr/gapps/spot/dev" +machine = platform.uname().machine + +sys.path.append(input_deploy_dir_str + "/hatchet-venv/" + machine + "/lib/python3.7/site-packages") +sys.path.append(input_deploy_dir_str + "/hatchet/" + machine) +sys.path.append(input_deploy_dir_str + "/spotdb") + +import hatchet as ht + +f1 = options.report +f2 = options.baseline + +gf1 = ht.GraphFrame.from_caliperreader(f1) +gf2 = ht.GraphFrame.from_caliperreader(f2) + +gf3 = gf2 - gf1 + +# Display dataframe columns +print(gf3.dataframe.columns) + +# Sort resulting DataFrame by ``time`` column in descending order. +sorted_df = gf3.dataframe.sort_values(by=["sum#sum#time.duration"], ascending=False) + +# Display resulting DataFrame. +print(sorted_df.head()) + +# Display calltree +print(gf3.tree(metric_column="sum#sum#time.duration")) + +# Count number of nodes in calltree +print("Num nodes:", len(gf3.graph)) + +# Get a single metric value for a given node +root_node = gf3.graph.roots[0] +metric = "sum#sum#time.duration" +print("") +print("Node name =", root_node.frame["name"]) +print(metric, "=", gf3.dataframe.loc[root_node, metric]) diff --git a/test/caliper-refs/Base_OpenMP.cali b/test/caliper-baselines/Base_OpenMP.cali similarity index 100% rename from test/caliper-refs/Base_OpenMP.cali rename to test/caliper-baselines/Base_OpenMP.cali diff --git a/test/caliper-refs/Base_Seq.cali b/test/caliper-baselines/Base_Seq.cali similarity index 100% rename from test/caliper-refs/Base_Seq.cali rename to test/caliper-baselines/Base_Seq.cali diff --git a/test/caliper-refs/Lambda_OpenMP.cali b/test/caliper-baselines/Lambda_OpenMP.cali similarity index 100% rename from test/caliper-refs/Lambda_OpenMP.cali rename to test/caliper-baselines/Lambda_OpenMP.cali diff --git a/test/caliper-refs/Lambda_Seq.cali b/test/caliper-baselines/Lambda_Seq.cali similarity index 100% rename from test/caliper-refs/Lambda_Seq.cali rename to test/caliper-baselines/Lambda_Seq.cali diff --git a/test/caliper-refs/RAJA_OpenMP.cali b/test/caliper-baselines/RAJA_OpenMP.cali similarity index 100% rename from test/caliper-refs/RAJA_OpenMP.cali rename to test/caliper-baselines/RAJA_OpenMP.cali diff --git a/test/caliper-refs/RAJA_Seq.cali b/test/caliper-baselines/RAJA_Seq.cali similarity index 100% rename from test/caliper-refs/RAJA_Seq.cali rename to test/caliper-baselines/RAJA_Seq.cali From 70b6cff13f81b552371e83d79b8f98c334de39a3 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 16:28:28 +0100 Subject: [PATCH 130/174] Fix script name and path --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index f76915863..6b4983feb 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -256,7 +256,7 @@ then baselines_dir=${project_dir}/caliper-baselines for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do - ./gitlab/hatchet_analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} + ./scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} done fi From e3fc7d79c1dd7ee30676449d57f0938d1639d662 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 16:53:30 +0100 Subject: [PATCH 131/174] TEMP: de-activate unneeded part of the CI --- .gitlab/subscribed-pipelines.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.gitlab/subscribed-pipelines.yml b/.gitlab/subscribed-pipelines.yml index ede2aebfe..cee7012de 100644 --- a/.gitlab/subscribed-pipelines.yml +++ b/.gitlab/subscribed-pipelines.yml @@ -14,12 +14,12 @@ ruby-build-and-test: CI_MACHINE: "ruby" extends: [.build-and-test] -corona-build-and-test: - variables: - CI_MACHINE: "corona" - extends: [.build-and-test] - -lassen-build-and-test: - variables: - CI_MACHINE: "lassen" - extends: [.build-and-test] +#corona-build-and-test: +# variables: +# CI_MACHINE: "corona" +# extends: [.build-and-test] +# +#lassen-build-and-test: +# variables: +# CI_MACHINE: "lassen" +# extends: [.build-and-test] From ed6033ad380c7639a5e3a85df17a77650530d3b5 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 16:53:42 +0100 Subject: [PATCH 132/174] Fix script call path --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 6b4983feb..b507dbaf5 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -256,7 +256,7 @@ then baselines_dir=${project_dir}/caliper-baselines for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do - ./scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} done fi From dbe10a4174e20d1ad4bc1b2a661c57f2bd7f9f2b Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 17:17:57 +0100 Subject: [PATCH 133/174] Fix python script --- scripts/gitlab/hatchet-analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index a207e3898..a7186ddf3 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -6,7 +6,7 @@ from optparse import OptionParser -parser=optparse.OptionParser() +parser = OptionParser() parser.add_option("-r", "--report", metavar="FILE", help="Pass the caliper report file.") parser.add_option("-b", "--baseline", metavar="FILE", help="Pass the caliper baseline file.") From aaa33612b57a9dac7f63c1907489123331a36e96 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 12 Jan 2023 18:01:51 +0100 Subject: [PATCH 134/174] Add missing extension --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index b507dbaf5..f258c8bbd 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -256,7 +256,7 @@ then baselines_dir=${project_dir}/caliper-baselines for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file} --baseline=${baselines_dir}/${cali_file} + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file}.cali --baseline=${baselines_dir}/${cali_file}.cali done fi From cb3742e7be8811c359a1ef9b51df54daa7961b0d Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 13 Jan 2023 10:27:19 +0100 Subject: [PATCH 135/174] Fix baseline dir --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index f258c8bbd..90b1b5e5a 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -254,7 +254,7 @@ then mkdir -p ${reports_dir} cp test/*.cali ${reports_dir} - baselines_dir=${project_dir}/caliper-baselines + baselines_dir=${project_dir}/test/caliper-baselines for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file}.cali --baseline=${baselines_dir}/${cali_file}.cali done From 42f9619cac4f6252100207a09eaa907381cc4d11 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 13 Jan 2023 11:00:02 +0100 Subject: [PATCH 136/174] Fix use existing field --- scripts/gitlab/hatchet-analysis.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index a7186ddf3..038e8daad 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -34,20 +34,20 @@ print(gf3.dataframe.columns) # Sort resulting DataFrame by ``time`` column in descending order. -sorted_df = gf3.dataframe.sort_values(by=["sum#sum#time.duration"], ascending=False) +sorted_df = gf3.dataframe.sort_values(by=["sum#inclusive#sum#time.duration"], ascending=False) # Display resulting DataFrame. print(sorted_df.head()) # Display calltree -print(gf3.tree(metric_column="sum#sum#time.duration")) +print(gf3.tree(metric_column="sum#inclusive#sum#time.duration")) # Count number of nodes in calltree print("Num nodes:", len(gf3.graph)) # Get a single metric value for a given node root_node = gf3.graph.roots[0] -metric = "sum#sum#time.duration" +metric = "sum#inclusive#sum#time.duration" print("") print("Node name =", root_node.frame["name"]) print(metric, "=", gf3.dataframe.loc[root_node, metric]) From e5ed98ba3ba16791708cdd9a4ebea7cc8f271273 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Tue, 17 Jan 2023 10:42:30 +0100 Subject: [PATCH 137/174] Revert "TEMP: de-activate unneeded part of the CI" This reverts commit e3fc7d79c1dd7ee30676449d57f0938d1639d662. --- .gitlab/subscribed-pipelines.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.gitlab/subscribed-pipelines.yml b/.gitlab/subscribed-pipelines.yml index cee7012de..ede2aebfe 100644 --- a/.gitlab/subscribed-pipelines.yml +++ b/.gitlab/subscribed-pipelines.yml @@ -14,12 +14,12 @@ ruby-build-and-test: CI_MACHINE: "ruby" extends: [.build-and-test] -#corona-build-and-test: -# variables: -# CI_MACHINE: "corona" -# extends: [.build-and-test] -# -#lassen-build-and-test: -# variables: -# CI_MACHINE: "lassen" -# extends: [.build-and-test] +corona-build-and-test: + variables: + CI_MACHINE: "corona" + extends: [.build-and-test] + +lassen-build-and-test: + variables: + CI_MACHINE: "lassen" + extends: [.build-and-test] From 5fa11bcfce9629aa95b112fe7742b600ce100826 Mon Sep 17 00:00:00 2001 From: holger Date: Fri, 20 Jan 2023 11:52:09 -0800 Subject: [PATCH 138/174] add support for cross-variant comparisons --- scripts/gitlab/hatchet-analysis.py | 97 ++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 11 deletions(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index 038e8daad..bc672129d 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -13,41 +13,116 @@ (options, args) = parser.parse_args() -input_deploy_dir_str = "/usr/gapps/spot/dev" -machine = platform.uname().machine +#input_deploy_dir_str = "/usr/gapps/spot/dev" +#machine = platform.uname().machine -sys.path.append(input_deploy_dir_str + "/hatchet-venv/" + machine + "/lib/python3.7/site-packages") -sys.path.append(input_deploy_dir_str + "/hatchet/" + machine) -sys.path.append(input_deploy_dir_str + "/spotdb") +#sys.path.append(input_deploy_dir_str + "/hatchet-venv/" + machine + "/lib/python3.7/site-packages") +#sys.path.append(input_deploy_dir_str + "/hatchet/" + machine) +#sys.path.append(input_deploy_dir_str + "/spotdb") import hatchet as ht +class GenericFrame(ht.GraphFrame): + def __init__(self, gf): + generic_dataframe = gf.dataframe.copy() + generic_graph = gf.graph.copy() + generic_exc_metrics = gf.exc_metrics + generic_inc_metrics = gf.inc_metrics + generic_default_metric = gf.default_metric # in newer Hatchet + print('Default Metric = ' + gf.default_metric) + generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' + ii = generic_dataframe.index[0] + # fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) + fr = ht.graphframe.Frame({'name': 'Variant', 'type': 'region'}) + nn = ht.graphframe.Node(fr) + setattr(nn, '_hatchet_nid', ii._hatchet_nid) + setattr(nn, '_depth', ii._depth) + setattr(nn, 'children', ii.children) + generic_dataframe.rename(index={ii: nn}, inplace=True) + setattr(generic_graph, 'roots', [nn]) + super().__init__(generic_graph, generic_dataframe, generic_exc_metrics, generic_inc_metrics) + + +def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> (ht.GraphFrame): + if (gf1.graph == gf2.graph): + return gf1 + else: + cc = gf1.deepcopy() + cc2 = gf2.deepcopy() + cc.unify(cc2) + # search for nodes contained in both graphs {0==both, 1==left only, 2==right only} + filter_func = lambda x: x["_missing_node"] == 0 + common_subtree = cc.filter(filter_func, squash=True) + # print(common_subtree.dataframe.columns.tolist()) + # tt is generator object from post order tree traversal, i.e starts down at first set of leaves + tt = common_subtree.graph.roots[0].traverse(order="post") + s2 = 0.0 # sum accumulated at depth 2 + s1 = 0.0 # sum accumulated at depth 1 + s0 = 0.0 + m3 = sys.float_info.max + # replace subtree values with sum of kernels that have run + for nn in tt: + #print(nn._depth) + if nn._depth == 3: + if common_subtree.dataframe.loc[nn, metric] < m3: + m3 = common_subtree.dataframe.loc[nn, metric] + #print(m3) + elif nn._depth == 2: + s2 = m3 + s1 += s2 + common_subtree.dataframe.loc[nn, metric] = s2 + m3 = sys.float_info.max + #print(s2) + s2 = 0 + elif nn._depth == 1: + s0 += s1 + common_subtree.dataframe.loc[nn, metric] = s1 + #print(s1) + s1 = 0 + elif nn._depth == 0: + common_subtree.dataframe.loc[nn, metric] = s0 + #print(s0) + + + return common_subtree + f1 = options.report f2 = options.baseline -gf1 = ht.GraphFrame.from_caliperreader(f1) -gf2 = ht.GraphFrame.from_caliperreader(f2) +#metric = "sum#inclusive#sum#time.duration" +metric = "Min time/rank" + +gf1 = GenericFrame(ht.GraphFrame.from_caliperreader(f1)) +gf2 = GenericFrame(ht.GraphFrame.from_caliperreader(f2)) -gf3 = gf2 - gf1 +print("Num nodes gf1:", len(gf1.graph)) +print("Num nodes gf2:", len(gf2.graph)) +if len(gf1.graph) != len(gf2.graph): + gf1c = ExtractCommonSubtree(gf1,gf2,metric) + gf2c = ExtractCommonSubtree(gf2,gf1,metric) + gf3 = gf1c - gf2c +else: + gf3 = gf1 - gf2 # Display dataframe columns print(gf3.dataframe.columns) # Sort resulting DataFrame by ``time`` column in descending order. -sorted_df = gf3.dataframe.sort_values(by=["sum#inclusive#sum#time.duration"], ascending=False) +sorted_df = gf3.dataframe.sort_values(by=[metric], ascending=False) # Display resulting DataFrame. print(sorted_df.head()) # Display calltree -print(gf3.tree(metric_column="sum#inclusive#sum#time.duration")) +print(gf1c.tree(metric_column=metric,precision=5)) +print(gf2c.tree(metric_column=metric,precision=5)) +print(gf3.tree(metric_column=metric,precision=5)) # Count number of nodes in calltree print("Num nodes:", len(gf3.graph)) # Get a single metric value for a given node root_node = gf3.graph.roots[0] -metric = "sum#inclusive#sum#time.duration" print("") print("Node name =", root_node.frame["name"]) print(metric, "=", gf3.dataframe.loc[root_node, metric]) From c46858e4d8f8396b21ebcbe1dd104245b69b5f37 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Mon, 23 Jan 2023 10:40:49 -0800 Subject: [PATCH 139/174] replace optparse with argparse --- scripts/gitlab/hatchet-analysis.py | 80 ++++++++++++++---------------- 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index bc672129d..401160a0c 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -4,21 +4,22 @@ import platform import datetime as dt -from optparse import OptionParser +import argparse -parser = OptionParser() +parser = argparse.ArgumentParser(add_help=False) +parser.add_argument('-r','--report',required=True,nargs=1,help="Pass the Caliper report file.") +parser.add_argument('-b','--baseline',required=True,nargs=1,help="Pass the Caliper baseline file.") +parser.add_argument('-t','--tolerance',required=False,nargs=1,type=float,default=[0.05],help="Specify tolerance for pass/fail") -parser.add_option("-r", "--report", metavar="FILE", help="Pass the caliper report file.") -parser.add_option("-b", "--baseline", metavar="FILE", help="Pass the caliper baseline file.") +args = parser.parse_args() +print(args) -(options, args) = parser.parse_args() +input_deploy_dir_str = "/usr/gapps/spot/dev" +machine = platform.uname().machine -#input_deploy_dir_str = "/usr/gapps/spot/dev" -#machine = platform.uname().machine - -#sys.path.append(input_deploy_dir_str + "/hatchet-venv/" + machine + "/lib/python3.7/site-packages") -#sys.path.append(input_deploy_dir_str + "/hatchet/" + machine) -#sys.path.append(input_deploy_dir_str + "/spotdb") +sys.path.append(input_deploy_dir_str + "/hatchet-venv/" + machine + "/lib/python3.7/site-packages") +sys.path.append(input_deploy_dir_str + "/hatchet/" + machine) +sys.path.append(input_deploy_dir_str + "/spotdb") import hatchet as ht @@ -29,7 +30,6 @@ def __init__(self, gf): generic_exc_metrics = gf.exc_metrics generic_inc_metrics = gf.inc_metrics generic_default_metric = gf.default_metric # in newer Hatchet - print('Default Metric = ' + gf.default_metric) generic_dataframe.iloc[0, generic_dataframe.columns.get_loc('name')] = 'Variant' ii = generic_dataframe.index[0] # fr = ht.frame.Frame({'name': 'Variant', 'type' : 'region'}) @@ -42,7 +42,6 @@ def __init__(self, gf): setattr(generic_graph, 'roots', [nn]) super().__init__(generic_graph, generic_dataframe, generic_exc_metrics, generic_inc_metrics) - def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> (ht.GraphFrame): if (gf1.graph == gf2.graph): return gf1 @@ -62,67 +61,62 @@ def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> m3 = sys.float_info.max # replace subtree values with sum of kernels that have run for nn in tt: - #print(nn._depth) if nn._depth == 3: if common_subtree.dataframe.loc[nn, metric] < m3: m3 = common_subtree.dataframe.loc[nn, metric] - #print(m3) elif nn._depth == 2: s2 = m3 s1 += s2 common_subtree.dataframe.loc[nn, metric] = s2 m3 = sys.float_info.max - #print(s2) s2 = 0 elif nn._depth == 1: s0 += s1 common_subtree.dataframe.loc[nn, metric] = s1 - #print(s1) s1 = 0 elif nn._depth == 0: common_subtree.dataframe.loc[nn, metric] = s0 - #print(s0) - return common_subtree -f1 = options.report -f2 = options.baseline - -#metric = "sum#inclusive#sum#time.duration" -metric = "Min time/rank" +f1 = args.report[0] +f2 = args.baseline[0] +tolerance=args.tolerance[0] gf1 = GenericFrame(ht.GraphFrame.from_caliperreader(f1)) gf2 = GenericFrame(ht.GraphFrame.from_caliperreader(f2)) -print("Num nodes gf1:", len(gf1.graph)) -print("Num nodes gf2:", len(gf2.graph)) +if 'min#inclusive#sum#time.duration' in gf1.inc_metrics: + metric = 'min#inclusive#sum#time.duration' +elif 'Min time/rank' in gf1.inc_metrics: + metric = 'Min time/rank' + if len(gf1.graph) != len(gf2.graph): - gf1c = ExtractCommonSubtree(gf1,gf2,metric) - gf2c = ExtractCommonSubtree(gf2,gf1,metric) - gf3 = gf1c - gf2c -else: - gf3 = gf1 - gf2 + gf1 = ExtractCommonSubtree(gf1,gf2,metric) + gf2 = ExtractCommonSubtree(gf2,gf1,metric) -# Display dataframe columns -print(gf3.dataframe.columns) +gf3 = gf1 - gf2 # Sort resulting DataFrame by ``time`` column in descending order. -sorted_df = gf3.dataframe.sort_values(by=[metric], ascending=False) +#sorted_df = gf3.dataframe.sort_values(by=[metric], ascending=False) # Display resulting DataFrame. -print(sorted_df.head()) +#print(sorted_df.head()) # Display calltree -print(gf1c.tree(metric_column=metric,precision=5)) -print(gf2c.tree(metric_column=metric,precision=5)) -print(gf3.tree(metric_column=metric,precision=5)) +#print(gf3.tree(metric_column=metric,precision=5)) + +#setup threshold as a fraction of baseline using tolerance multiplier +baseline_node = gf2.graph.roots[0] +threshold = tolerance * float(gf2.dataframe.loc[baseline_node, metric]) -# Count number of nodes in calltree -print("Num nodes:", len(gf3.graph)) # Get a single metric value for a given node root_node = gf3.graph.roots[0] -print("") -print("Node name =", root_node.frame["name"]) -print(metric, "=", gf3.dataframe.loc[root_node, metric]) +result = gf3.dataframe.loc[root_node, metric] +print("Result =", result," with threshold =",threshold) +if result > threshold: + print('fail') +else: + print('pass') + From 8fd43bd0da98fb909d06a7a1980f6218c601e15b Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 15:58:05 +0100 Subject: [PATCH 140/174] Add usptream spack management to build_and_test script --- scripts/gitlab/build_and_test.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 90b1b5e5a..f9d92f8fd 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -29,9 +29,19 @@ raja_version=${UPDATE_RAJA:-""} sys_type=${SYS_TYPE:-""} use_dev_shm=${USE_DEV_SHM:-True} +spack_upstream_path=${SPACK_UPSTREAM_PATH:-"/usr/workspace/umdev/RAJAPerf/upstream/spack_dir"} +update_spack_upstream=${UPDATE_SPACK_UPSTREAM:-False} + prefix="" -if [[ -d /dev/shm && $use_dev_shm ]] +if [[ ${update_spack_upstream} ]] +then + ${use_dev_shm}=False + echo "We don't build in shared memory when updating the spack upstream" + + prefix=${spack_upstream_path}/.. + mkdir -p ${prefix} +elif [[ -d /dev/shm && ${use_dev_shm} ]] then prefix="/dev/shm/${hostname}" if [[ -z ${job_unique_id} ]]; then @@ -68,6 +78,11 @@ then prefix_opt="--prefix=${prefix}" + if [[ -n ${spack_upstream_path} ]] + then + upstream_opt="--upstream=${spack_upstream_path}" + fi + # We force Spack to put all generated files (cache and configuration of # all sorts) in a unique location so that there can be no collision # with existing or concurrent Spack. @@ -76,7 +91,7 @@ then export SPACK_USER_CACHE_PATH="${spack_user_cache}" mkdir -p ${spack_user_cache} - ./tpl/RAJA/scripts/uberenv/uberenv.py --project-json=".uberenv_config.json" --spec="${spec}" ${prefix_opt} + ./tpl/RAJA/scripts/uberenv/uberenv.py --project-json=".uberenv_config.json" --spec="${spec}" ${prefix_opt} ${upstream_opt} mv ${project_dir}/tpl/RAJA/*.cmake ${project_dir}/. From 609549e9f2cc1d6e0452c2635fa85987c9f851d4 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 16:02:49 +0100 Subject: [PATCH 141/174] Fix typo --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index f9d92f8fd..c91c56414 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -36,7 +36,7 @@ prefix="" if [[ ${update_spack_upstream} ]] then - ${use_dev_shm}=False + use_dev_shm=False echo "We don't build in shared memory when updating the spack upstream" prefix=${spack_upstream_path}/.. From 6490c18350e44485afba22ecc64051b5bffed978 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 17:09:57 +0100 Subject: [PATCH 142/174] Protect against unititialized upstream --- scripts/gitlab/build_and_test.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index c91c56414..7ebdab12b 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -29,7 +29,7 @@ raja_version=${UPDATE_RAJA:-""} sys_type=${SYS_TYPE:-""} use_dev_shm=${USE_DEV_SHM:-True} -spack_upstream_path=${SPACK_UPSTREAM_PATH:-"/usr/workspace/umdev/RAJAPerf/upstream/spack_dir"} +spack_upstream_path=${SPACK_UPSTREAM_PATH:-"/usr/workspace/umdev/RAJAPerf/upstream"} update_spack_upstream=${UPDATE_SPACK_UPSTREAM:-False} prefix="" @@ -39,7 +39,7 @@ then use_dev_shm=False echo "We don't build in shared memory when updating the spack upstream" - prefix=${spack_upstream_path}/.. + prefix=${spack_upstream_path} mkdir -p ${prefix} elif [[ -d /dev/shm && ${use_dev_shm} ]] then @@ -78,9 +78,8 @@ then prefix_opt="--prefix=${prefix}" - if [[ -n ${spack_upstream_path} ]] - then - upstream_opt="--upstream=${spack_upstream_path}" + if [[ -n ${spack_upstream_path} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] + upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" fi # We force Spack to put all generated files (cache and configuration of From bd90e7593c39d1d0f12e1514dac51ae542a058f5 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 17:13:10 +0100 Subject: [PATCH 143/174] Fix typo --- scripts/gitlab/build_and_test.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 7ebdab12b..7bd4984dd 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -79,6 +79,7 @@ then prefix_opt="--prefix=${prefix}" if [[ -n ${spack_upstream_path} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] + then upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" fi From f010820a5ef3df2486f49588024e7db4dfb4ebda Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 17:15:48 +0100 Subject: [PATCH 144/174] Prevent setting upstream when updating it --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 7bd4984dd..647682492 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -78,7 +78,7 @@ then prefix_opt="--prefix=${prefix}" - if [[ -n ${spack_upstream_path} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] + if [[ ! ${update_spack_upstream} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] then upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" fi From 6671991f8f00daa469d6fd0f4162e248eae08f9b Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 20 Feb 2023 17:22:31 +0100 Subject: [PATCH 145/174] Fix typo --- scripts/gitlab/build_and_test.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 647682492..db1ae8eff 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -78,6 +78,7 @@ then prefix_opt="--prefix=${prefix}" + upstream_opt="" if [[ ! ${update_spack_upstream} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] then upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" From 82c042350c3e294d4a32a12785ae5417e9c70975 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Tue, 21 Feb 2023 10:32:31 +0100 Subject: [PATCH 146/174] Fix boolean use --- scripts/gitlab/build_and_test.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index db1ae8eff..1f5eb7ba4 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -27,21 +27,21 @@ spec=${SPEC:-""} job_unique_id=${CI_JOB_ID:-""} raja_version=${UPDATE_RAJA:-""} sys_type=${SYS_TYPE:-""} -use_dev_shm=${USE_DEV_SHM:-True} +use_dev_shm=${USE_DEV_SHM:-true} spack_upstream_path=${SPACK_UPSTREAM_PATH:-"/usr/workspace/umdev/RAJAPerf/upstream"} -update_spack_upstream=${UPDATE_SPACK_UPSTREAM:-False} +update_spack_upstream=${UPDATE_SPACK_UPSTREAM:-false} prefix="" -if [[ ${update_spack_upstream} ]] +if [[ ${update_spack_upstream} == true ]] then - use_dev_shm=False + use_dev_shm=false echo "We don't build in shared memory when updating the spack upstream" prefix=${spack_upstream_path} mkdir -p ${prefix} -elif [[ -d /dev/shm && ${use_dev_shm} ]] +elif [[ -d /dev/shm && ${use_dev_shm} == true ]] then prefix="/dev/shm/${hostname}" if [[ -z ${job_unique_id} ]]; then @@ -79,7 +79,7 @@ then prefix_opt="--prefix=${prefix}" upstream_opt="" - if [[ ! ${update_spack_upstream} && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] + if [[ ${update_spack_upstream} == false && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] then upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" fi @@ -133,7 +133,7 @@ hostconfig=$(basename ${hostconfig_path}) # Build Directory if [[ -z ${build_root} ]] then - if [[ -d /dev/shm && $use_dev_shm ]] + if [[ -d /dev/shm && ${use_dev_shm} == true ]] then build_root="${prefix}" else From b2ec16307e321b3b6ecfde307ab3fabcd3aa9206 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Wed, 8 Mar 2023 16:14:28 +0100 Subject: [PATCH 147/174] Add some comments --- scripts/gitlab/hatchet-analysis.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index 401160a0c..841cc81c6 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -23,6 +23,12 @@ import hatchet as ht +# This class turns an existing GraphFrame into a "generic" one by renaming +# the root node into a generic node. We can then compare 2 "generic" graph +# frame. In practice we use it to allow Hatchet to compare performance trees +# generated from RAJA and Base kernels. +# If they don’t have exactly the same structure, then we can use +# ExtractCommonSubtree below. class GenericFrame(ht.GraphFrame): def __init__(self, gf): generic_dataframe = gf.dataframe.copy() @@ -42,6 +48,17 @@ def __init__(self, gf): setattr(generic_graph, 'roots', [nn]) super().__init__(generic_graph, generic_dataframe, generic_exc_metrics, generic_inc_metrics) +# In this class, we turn dissimilar GraphFrames into comparable ones. +# The idea behind is that the trees contain timings for the same algorithms +# but different implementations (tuning) that result in non comparable leaves. +# We extract the minimal value of the lowest level data leaves to set +# a common comparison dataset. +# To understand the implementation below, note that the caliper annotation +# follows a 3-level structure: +# Variant +# - Group +# -- Kernel +# --- Kernel.Tuning def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> (ht.GraphFrame): if (gf1.graph == gf2.graph): return gf1 @@ -76,7 +93,7 @@ def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> s1 = 0 elif nn._depth == 0: common_subtree.dataframe.loc[nn, metric] = s0 - + return common_subtree f1 = args.report[0] From aaba7f5d28ab93bd6e5255202000de21afcddd5c Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Wed, 8 Mar 2023 21:29:37 +0100 Subject: [PATCH 148/174] Deactivate a deprecated spec --- .gitlab/lassen-build-and-test-extra.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index 6fa58e8b4..1ebe9daac 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -69,6 +69,13 @@ xl_16_1_1_12_gcc_7_3_1_cuda_10_1_168: SPEC: "${PROJECT_LASSEN_VARIANTS} +cuda %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-7.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-7.3.1\" cuda_arch=70 ^cuda@10.1.168 ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 60" extends: .build_and_test_on_lassen + script: + - | + echo -e "\e[31mDeactivated spec !\e[0m" + echo -e "\e[31m${SPEC}\e[0m" + echo -e "\e[31mRAJA won’t build with Cuda < 11.1.0 due to a known issue.\e[0m" + - exit 1 + allow_failure: true # Overriding shared spec: Extra flags + Longer allocation + Allow failure xl_16_1_1_12_cuda_11_1_0: From bb521647bf75c9bf574ad987a3cdc17bc500aa8f Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Wed, 8 Mar 2023 21:46:13 +0100 Subject: [PATCH 149/174] Remove reference files and move to in-commit perf comparison --- scripts/gitlab/build_and_test.sh | 20 +- test/caliper-baselines/Base_OpenMP.cali | 396 --------------------- test/caliper-baselines/Base_Seq.cali | 408 ---------------------- test/caliper-baselines/Lambda_OpenMP.cali | 384 -------------------- test/caliper-baselines/Lambda_Seq.cali | 384 -------------------- test/caliper-baselines/RAJA_OpenMP.cali | 400 --------------------- test/caliper-baselines/RAJA_Seq.cali | 404 --------------------- 7 files changed, 14 insertions(+), 2382 deletions(-) delete mode 100644 test/caliper-baselines/Base_OpenMP.cali delete mode 100644 test/caliper-baselines/Base_Seq.cali delete mode 100644 test/caliper-baselines/Lambda_OpenMP.cali delete mode 100644 test/caliper-baselines/Lambda_Seq.cali delete mode 100644 test/caliper-baselines/RAJA_OpenMP.cali delete mode 100644 test/caliper-baselines/RAJA_Seq.cali diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 1f5eb7ba4..2261aac5c 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -231,12 +231,12 @@ then then echo "~~~~~~~~~ Run Command: ~~~~~~~~~~~~~~~~~~~~~" echo "lrun -n1 ... ctest --output-on-failure -T test" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" lrun -n1 --smpiargs="-disable_gpu_hooks" ctest --output-on-failure -T test else echo "~~~~~~~~~ Run Command: ~~~~~~~~~~~~~~~~~~~~~" echo "lrun -n1 ... ctest --output-on-failure -T test" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" lrun -n1 --smpiargs="-disable_gpu_hooks" ctest --output-on-failure -T test fi else @@ -244,12 +244,12 @@ then then echo "~~~~~~~~~ Run Command: ~~~~~~~~~~~~~~~~~~~~~" echo "ctest --output-on-failure -T test 2>&1 | tee tests_output.txt" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ctest --output-on-failure -T test 2>&1 | tee tests_output.txt else echo "~~~~~~~~~ Run Command: ~~~~~~~~~~~~~~~~~~~~~" echo "ctest --output-on-failure -T test 2>&1 | tee tests_output.txt" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ctest --output-on-failure -T test 2>&1 | tee tests_output.txt fi fi @@ -271,8 +271,16 @@ then cp test/*.cali ${reports_dir} baselines_dir=${project_dir}/test/caliper-baselines - for cali_file in "Base_Seq" "Base_OpenMP" "Lambda_Seq" "Lambda_OpenMP" "RAJA_Seq" "RAJA_OpenMP"; do - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/${cali_file}.cali --baseline=${baselines_dir}/${cali_file}.cali + for suffix in "Seq" "OpenMP"; do + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "Hatchet comparison of Caliper data for ${suffix}" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo " -> Base vs RAJA" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali + echo " -> Base vs Lambda" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/Lambda_${suffix}.cali + echo " -> Lambda vs RAJA" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Lambda_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali done fi diff --git a/test/caliper-baselines/Base_OpenMP.cali b/test/caliper-baselines/Base_OpenMP.cali deleted file mode 100644 index a8400a47f..000000000 --- a/test/caliper-baselines/Base_OpenMP.cali +++ /dev/null @@ -1,396 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=195,attr=14,data=sec,parent=5 -__rec=node,id=196,attr=13,data=Min time/rank,parent=195 -__rec=node,id=197,attr=10,data=65,parent=196 -__rec=node,id=198,attr=8,data=min#inclusive#sum#time.duration,parent=197 -__rec=node,id=199,attr=13,data=Max time/rank,parent=195 -__rec=node,id=200,attr=10,data=65,parent=199 -__rec=node,id=201,attr=8,data=max#inclusive#sum#time.duration,parent=200 -__rec=node,id=202,attr=13,data=Avg time/rank,parent=195 -__rec=node,id=203,attr=10,data=65,parent=202 -__rec=node,id=204,attr=8,data=avg#inclusive#sum#time.duration,parent=203 -__rec=node,id=207,attr=10,data=193,parent=5 -__rec=node,id=208,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=207 -__rec=node,id=205,attr=10,data=193,parent=2 -__rec=node,id=206,attr=8,data=avg.count#inclusive#sum#time.duration,parent=205 -__rec=node,id=209,attr=13,data=Total time,parent=195 -__rec=node,id=210,attr=10,data=65,parent=209 -__rec=node,id=211,attr=8,data=sum#inclusive#sum#time.duration,parent=210 -__rec=node,id=212,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=213,attr=10,data=65,parent=212 -__rec=node,id=214,attr=8,data=any#any#max#Bytes/Rep,parent=213 -__rec=node,id=215,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=216,attr=10,data=65,parent=215 -__rec=node,id=217,attr=8,data=any#any#max#Flops/Rep,parent=216 -__rec=node,id=218,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=219,attr=10,data=65,parent=218 -__rec=node,id=220,attr=8,data=any#any#max#Iterations/Rep,parent=219 -__rec=node,id=221,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=222,attr=10,data=65,parent=221 -__rec=node,id=223,attr=8,data=any#any#max#Kernels/Rep,parent=222 -__rec=node,id=224,attr=13,data=ProblemSize,parent=5 -__rec=node,id=225,attr=10,data=65,parent=224 -__rec=node,id=226,attr=8,data=any#any#max#ProblemSize,parent=225 -__rec=node,id=227,attr=13,data=Reps,parent=5 -__rec=node,id=228,attr=10,data=65,parent=227 -__rec=node,id=229,attr=8,data=any#any#max#Reps,parent=228 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=230,attr=15,data=regionprofile -__rec=ctx,ref=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=61.857732=61.857732=61.857732=61.857732=1=61.857732=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=Base_OpenMP -__rec=ctx,ref=60=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.920587=0.920587=0.920587=0.920587=1=0.920587=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.161730=0.161730=0.161730=0.161730=1=0.161730=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000159=0.000159=0.000159=0.000159=1=0.000159=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000155=0.000155=0.000155=0.000155=1=0.000155=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000345=0.000345=0.000345=0.000345=1=0.000345=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000298=0.000298=0.000298=0.000298=1=0.000298=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000292=0.000292=0.000292=0.000292=1=0.000292=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 -__rec=ctx,ref=72=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000614=0.000614=0.000614=0.000614=1=0.000614=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 -__rec=ctx,ref=73=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000609=0.000609=0.000609=0.000609=1=0.000609=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=74=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000691=0.000691=0.000691=0.000691=1=0.000691=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 -__rec=ctx,ref=75=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000686=0.000686=0.000686=0.000686=1=0.000686=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=76=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000276=0.000276=0.000276=0.000276=1=0.000276=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 -__rec=ctx,ref=77=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000270=0.000270=0.000270=0.000270=1=0.000270=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=78=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000189=0.000189=0.000189=0.000189=1=0.000189=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 -__rec=ctx,ref=79=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000184=0.000184=0.000184=0.000184=1=0.000184=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=80=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000196=0.000196=0.000196=0.000196=1=0.000196=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 -__rec=ctx,ref=81=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000191=0.000191=0.000191=0.000191=1=0.000191=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=82=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.025155=0.025155=0.025155=0.025155=1=0.025155=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 -__rec=ctx,ref=83=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.025147=0.025147=0.025147=0.025147=1=0.025147=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=84=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000287=0.000287=0.000287=0.000287=1=0.000287=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 -__rec=ctx,ref=85=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000280=0.000280=0.000280=0.000280=1=0.000280=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=86=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000193=0.000193=0.000193=0.000193=1=0.000193=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 -__rec=ctx,ref=87=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000187=0.000187=0.000187=0.000187=1=0.000187=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=88=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.131724=0.131724=0.131724=0.131724=1=0.131724=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 -__rec=ctx,ref=89=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.131717=0.131717=0.131717=0.131717=1=0.131717=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=90=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 -__rec=ctx,ref=91=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=92=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000386=0.000386=0.000386=0.000386=1=0.000386=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 -__rec=ctx,ref=93=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000383=0.000383=0.000383=0.000383=1=0.000383=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=94=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000401=0.000401=0.000401=0.000401=1=0.000401=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 -__rec=ctx,ref=95=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000397=0.000397=0.000397=0.000397=1=0.000397=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=96=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000397=0.000397=0.000397=0.000397=1=0.000397=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 -__rec=ctx,ref=97=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000392=0.000392=0.000392=0.000392=1=0.000392=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=98=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010836=0.010836=0.010836=0.010836=1=0.010836=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 -__rec=ctx,ref=99=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.006266=0.006266=0.006266=0.006266=1=0.006266=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 -__rec=ctx,ref=100=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.006255=0.006255=0.006255=0.006255=1=0.006255=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 -__rec=ctx,ref=101=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000234=0.000234=0.000234=0.000234=1=0.000234=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 -__rec=ctx,ref=102=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000227=0.000227=0.000227=0.000227=1=0.000227=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 -__rec=ctx,ref=103=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000348=0.000348=0.000348=0.000348=1=0.000348=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 -__rec=ctx,ref=104=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 -__rec=ctx,ref=105=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 -__rec=ctx,ref=106=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 -__rec=ctx,ref=107=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000421=0.000421=0.000421=0.000421=1=0.000421=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 -__rec=ctx,ref=108=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000417=0.000417=0.000417=0.000417=1=0.000417=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 -__rec=ctx,ref=109=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000583=0.000583=0.000583=0.000583=1=0.000583=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 -__rec=ctx,ref=110=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000575=0.000575=0.000575=0.000575=1=0.000575=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 -__rec=ctx,ref=111=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000256=0.000256=0.000256=0.000256=1=0.000256=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 -__rec=ctx,ref=112=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000250=0.000250=0.000250=0.000250=1=0.000250=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 -__rec=ctx,ref=113=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000675=0.000675=0.000675=0.000675=1=0.000675=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 -__rec=ctx,ref=114=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000666=0.000666=0.000666=0.000666=1=0.000666=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 -__rec=ctx,ref=115=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001105=0.001105=0.001105=0.001105=1=0.001105=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 -__rec=ctx,ref=116=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001097=0.001097=0.001097=0.001097=1=0.001097=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 -__rec=ctx,ref=117=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000362=0.000362=0.000362=0.000362=1=0.000362=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 -__rec=ctx,ref=118=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 -__rec=ctx,ref=119=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 -__rec=ctx,ref=120=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000260=0.000260=0.000260=0.000260=1=0.000260=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=121=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.692691=0.692691=0.692691=0.692691=1=0.692691=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 -__rec=ctx,ref=122=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.172226=0.172226=0.172226=0.172226=1=0.172226=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 -__rec=ctx,ref=123=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.172215=0.172215=0.172215=0.172215=1=0.172215=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 -__rec=ctx,ref=124=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.260338=0.260338=0.260338=0.260338=1=0.260338=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 -__rec=ctx,ref=125=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.260325=0.260325=0.260325=0.260325=1=0.260325=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 -__rec=ctx,ref=126=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.084499=0.084499=0.084499=0.084499=1=0.084499=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 -__rec=ctx,ref=127=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.084492=0.084492=0.084492=0.084492=1=0.084492=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 -__rec=ctx,ref=128=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000487=0.000487=0.000487=0.000487=1=0.000487=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 -__rec=ctx,ref=129=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000481=0.000481=0.000481=0.000481=1=0.000481=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 -__rec=ctx,ref=130=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.008184=0.008184=0.008184=0.008184=1=0.008184=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 -__rec=ctx,ref=131=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.008178=0.008178=0.008178=0.008178=1=0.008178=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 -__rec=ctx,ref=132=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.049104=0.049104=0.049104=0.049104=1=0.049104=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 -__rec=ctx,ref=133=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.049098=0.049098=0.049098=0.049098=1=0.049098=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 -__rec=ctx,ref=134=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.098291=0.098291=0.098291=0.098291=1=0.098291=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 -__rec=ctx,ref=135=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.098285=0.098285=0.098285=0.098285=1=0.098285=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 -__rec=ctx,ref=136=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000887=0.000887=0.000887=0.000887=1=0.000887=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 -__rec=ctx,ref=137=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000881=0.000881=0.000881=0.000881=1=0.000881=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 -__rec=ctx,ref=138=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000431=0.000431=0.000431=0.000431=1=0.000431=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 -__rec=ctx,ref=139=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000422=0.000422=0.000422=0.000422=1=0.000422=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 -__rec=ctx,ref=140=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010573=0.010573=0.010573=0.010573=1=0.010573=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 -__rec=ctx,ref=141=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.010568=0.010568=0.010568=0.010568=1=0.010568=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 -__rec=ctx,ref=142=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001703=0.001703=0.001703=0.001703=1=0.001703=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 -__rec=ctx,ref=143=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001694=0.001694=0.001694=0.001694=1=0.001694=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 -__rec=ctx,ref=144=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005532=0.005532=0.005532=0.005532=1=0.005532=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 -__rec=ctx,ref=145=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005526=0.005526=0.005526=0.005526=1=0.005526=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 -__rec=ctx,ref=146=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000373=0.000373=0.000373=0.000373=1=0.000373=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 -__rec=ctx,ref=147=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000368=0.000368=0.000368=0.000368=1=0.000368=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream,parent=60 -__rec=ctx,ref=148=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001627=0.001627=0.001627=0.001627=1=0.001627=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 -__rec=ctx,ref=149=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000274=0.000274=0.000274=0.000274=1=0.000274=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 -__rec=ctx,ref=150=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000268=0.000268=0.000268=0.000268=1=0.000268=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 -__rec=ctx,ref=151=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 -__rec=ctx,ref=152=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 -__rec=ctx,ref=153=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000348=0.000348=0.000348=0.000348=1=0.000348=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 -__rec=ctx,ref=154=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 -__rec=ctx,ref=155=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 -__rec=ctx,ref=156=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 -__rec=ctx,ref=157=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000295=0.000295=0.000295=0.000295=1=0.000295=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 -__rec=ctx,ref=158=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000289=0.000289=0.000289=0.000289=1=0.000289=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps,parent=60 -__rec=ctx,ref=159=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.033974=0.033974=0.033974=0.033974=1=0.033974=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_CONVECTION3DPA,parent=159 -__rec=ctx,ref=160=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000623=0.000623=0.000623=0.000623=1=0.000623=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_CONVECTION3DPA.default,parent=160 -__rec=ctx,ref=161=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000617=0.000617=0.000617=0.000617=1=0.000617=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 -__rec=ctx,ref=162=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=162 -__rec=ctx,ref=163=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000910=0.000910=0.000910=0.000910=1=0.000910=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_DIFFUSION3DPA,parent=159 -__rec=ctx,ref=164=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000903=0.000903=0.000903=0.000903=1=0.000903=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_DIFFUSION3DPA.default,parent=164 -__rec=ctx,ref=165=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000895=0.000895=0.000895=0.000895=1=0.000895=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_ENERGY,parent=159 -__rec=ctx,ref=166=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000473=0.000473=0.000473=0.000473=1=0.000473=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_ENERGY.default,parent=166 -__rec=ctx,ref=167=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000464=0.000464=0.000464=0.000464=1=0.000464=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_FIR,parent=159 -__rec=ctx,ref=168=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000380=0.000380=0.000380=0.000380=1=0.000380=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_FIR.default,parent=168 -__rec=ctx,ref=169=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000374=0.000374=0.000374=0.000374=1=0.000374=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE,parent=159 -__rec=ctx,ref=170=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005267=0.005267=0.005267=0.005267=1=0.005267=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE.default,parent=170 -__rec=ctx,ref=171=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005261=0.005261=0.005261=0.005261=1=0.005261=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 -__rec=ctx,ref=172=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.016486=0.016486=0.016486=0.016486=1=0.016486=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=172 -__rec=ctx,ref=173=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.016481=0.016481=0.016481=0.016481=1=0.016481=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_LTIMES,parent=159 -__rec=ctx,ref=174=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000417=0.000417=0.000417=0.000417=1=0.000417=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_LTIMES.default,parent=174 -__rec=ctx,ref=175=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000411=0.000411=0.000411=0.000411=1=0.000411=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 -__rec=ctx,ref=176=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000400=0.000400=0.000400=0.000400=1=0.000400=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=176 -__rec=ctx,ref=177=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_MASS3DPA,parent=159 -__rec=ctx,ref=178=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000392=0.000392=0.000392=0.000392=1=0.000392=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_MASS3DPA.default,parent=178 -__rec=ctx,ref=179=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000369=0.000369=0.000369=0.000369=1=0.000369=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=180,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 -__rec=ctx,ref=180=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001055=0.001055=0.001055=0.001055=1=0.001055=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=180 -__rec=ctx,ref=181=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.001050=0.001050=0.001050=0.001050=1=0.001050=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Apps_PRESSURE,parent=159 -__rec=ctx,ref=182=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000776=0.000776=0.000776=0.000776=1=0.000776=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=183,attr=59,data=Apps_PRESSURE.default,parent=182 -__rec=ctx,ref=183=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000770=0.000770=0.000770=0.000770=1=0.000770=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=184,attr=59,data=Apps_VOL3D,parent=159 -__rec=ctx,ref=184=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005820=0.005820=0.005820=0.005820=1=0.005820=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=185,attr=59,data=Apps_VOL3D.default,parent=184 -__rec=ctx,ref=185=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.005805=0.005805=0.005805=0.005805=1=0.005805=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=186=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.019237=0.019237=0.019237=0.019237=1=0.019237=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_SCAN,parent=186 -__rec=ctx,ref=187=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000377=0.000377=0.000377=0.000377=1=0.000377=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_SCAN.default,parent=187 -__rec=ctx,ref=188=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000373=0.000373=0.000373=0.000373=1=0.000373=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=189,attr=59,data=Algorithm_REDUCE_SUM,parent=186 -__rec=ctx,ref=189=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000208=0.000208=0.000208=0.000208=1=0.000208=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=190,attr=59,data=Algorithm_REDUCE_SUM.default,parent=189 -__rec=ctx,ref=190=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.000203=0.000203=0.000203=0.000203=1=0.000203=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=191,attr=59,data=Algorithm_MEMSET,parent=186 -__rec=ctx,ref=191=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009344=0.009344=0.009344=0.009344=1=0.009344=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=192,attr=59,data=Algorithm_MEMSET.default,parent=191 -__rec=ctx,ref=192=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009339=0.009339=0.009339=0.009339=1=0.009339=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=193,attr=59,data=Algorithm_MEMCPY,parent=186 -__rec=ctx,ref=193=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009290=0.009290=0.009290=0.009290=1=0.009290=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=194,attr=59,data=Algorithm_MEMCPY.default,parent=193 -__rec=ctx,ref=194=230,attr=198=201=204=208=206=211=214=217=220=223=226=229,data=0.009285=0.009285=0.009285=0.009285=1=0.009285=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=306,attr=10,data=512,parent=3 -__rec=node,id=312,attr=8,data=spot.channels,parent=306 -__rec=node,id=311,attr=8,data=spot.options,parent=306 -__rec=node,id=309,attr=10,data=512,parent=1 -__rec=node,id=310,attr=8,data=spot.format.version,parent=309 -__rec=node,id=308,attr=8,data=spot.timeseries.metrics,parent=306 -__rec=node,id=307,attr=8,data=spot.metrics,parent=306 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=313,attr=307,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=314,attr=308,data=,parent=313 -__rec=node,id=315,attr=310,data=2,parent=314 -__rec=node,id=316,attr=311,data=,parent=315 -__rec=node,id=317,attr=312,data=regionprofile,parent=316 -__rec=node,id=231,attr=10,data=84,parent=3 -__rec=node,id=232,attr=8,data=adiak.subcategory,parent=231 -__rec=node,id=233,attr=10,data=84,parent=1 -__rec=node,id=234,attr=8,data=adiak.category,parent=233 -__rec=node,id=235,attr=8,data=adiak.type,parent=231 -__rec=node,id=236,attr=235,data=string,parent=3 -__rec=node,id=237,attr=234,data=2,parent=236 -__rec=node,id=238,attr=232,data=none,parent=237 -__rec=node,id=239,attr=10,data=1612,parent=238 -__rec=node,id=240,attr=8,data=variant,parent=239 -__rec=node,id=241,attr=8,data=omp_max_threads,parent=239 -__rec=node,id=242,attr=8,data=omp_version,parent=239 -__rec=node,id=243,attr=8,data=SizeMeaning,parent=239 -__rec=node,id=244,attr=235,data=double,parent=5 -__rec=node,id=245,attr=234,data=2,parent=244 -__rec=node,id=246,attr=232,data=none,parent=245 -__rec=node,id=247,attr=10,data=1612,parent=246 -__rec=node,id=248,attr=8,data=ProblemSizeRunParam,parent=247 -__rec=node,id=249,attr=8,data=machine_build,parent=239 -__rec=node,id=250,attr=8,data=systype_build,parent=239 -__rec=node,id=251,attr=8,data=Compiler_path_version,parent=239 -__rec=node,id=252,attr=8,data=compiler,parent=239 -__rec=node,id=253,attr=8,data=compiler_version,parent=239 -__rec=node,id=254,attr=8,data=rajaperf_compiler_options,parent=239 -__rec=node,id=255,attr=8,data=rajaperf_compiler,parent=239 -__rec=node,id=256,attr=8,data=cmake_exe_linker_flags,parent=239 -__rec=node,id=257,attr=8,data=cmake_cxx_flags,parent=239 -__rec=node,id=258,attr=8,data=cmake_build_type,parent=239 -__rec=node,id=259,attr=8,data=raja_version,parent=239 -__rec=node,id=260,attr=8,data=perfsuite_version,parent=239 -__rec=node,id=261,attr=232,data=host,parent=237 -__rec=node,id=262,attr=10,data=1612,parent=261 -__rec=node,id=263,attr=8,data=cluster,parent=262 -__rec=node,id=264,attr=235,data=set of string,parent=3 -__rec=node,id=265,attr=234,data=2,parent=264 -__rec=node,id=266,attr=232,data=runinfo,parent=265 -__rec=node,id=267,attr=10,data=1612,parent=266 -__rec=node,id=268,attr=8,data=cmdline,parent=267 -__rec=node,id=269,attr=235,data=set of path,parent=3 -__rec=node,id=270,attr=234,data=2,parent=269 -__rec=node,id=271,attr=232,data=binary,parent=270 -__rec=node,id=272,attr=10,data=1612,parent=271 -__rec=node,id=273,attr=8,data=libraries,parent=272 -__rec=node,id=274,attr=235,data=date,parent=2 -__rec=node,id=275,attr=234,data=2,parent=274 -__rec=node,id=276,attr=232,data=runinfo,parent=275 -__rec=node,id=277,attr=10,data=1612,parent=276 -__rec=node,id=278,attr=8,data=launchdate,parent=277 -__rec=node,id=279,attr=232,data=runinfo,parent=237 -__rec=node,id=280,attr=10,data=1612,parent=279 -__rec=node,id=281,attr=8,data=user,parent=280 -__rec=node,id=282,attr=8,data=cali.channel,parent=16 -__rec=node,id=283,attr=282,data=spot -__rec=node,id=284,attr=281,data=umdev,parent=283 -__rec=node,id=285,attr=278,data=1673516370,parent=284 -__rec=node,id=286,attr=273,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=285 -__rec=node,id=287,attr=268,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=286 -__rec=node,id=288,attr=263,data=ruby,parent=287 -__rec=node,id=289,attr=260,data=0.11.0,parent=288 -__rec=node,id=290,attr=259,data=2022.10.4,parent=289 -__rec=node,id=291,attr=258,data=RelWithDebInfo,parent=290 -__rec=node,id=292,attr=257,data= -Wall -Wextra ,parent=291 -__rec=node,id=293,attr=256,data=,parent=292 -__rec=node,id=294,attr=255,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=293 -__rec=node,id=295,attr=254,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=294 -__rec=node,id=296,attr=253,data=8.3.1,parent=295 -__rec=node,id=297,attr=252,data=g++-8.3.1,parent=296 -__rec=node,id=298,attr=251,data=gcc-8.3.1,parent=297 -__rec=node,id=299,attr=250,data=toss_3_x86_64_ib,parent=298 -__rec=node,id=300,attr=249,data=ruby961,parent=299 -__rec=node,id=301,attr=248,data=1.000000,parent=300 -__rec=node,id=302,attr=243,data=Factor,parent=301 -__rec=node,id=303,attr=242,data=4.5,parent=302 -__rec=node,id=304,attr=241,data=112,parent=303 -__rec=node,id=305,attr=240,data=Base_OpenMP,parent=304 -__rec=globals,ref=317=305 diff --git a/test/caliper-baselines/Base_Seq.cali b/test/caliper-baselines/Base_Seq.cali deleted file mode 100644 index 8cf774638..000000000 --- a/test/caliper-baselines/Base_Seq.cali +++ /dev/null @@ -1,408 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=201,attr=14,data=sec,parent=5 -__rec=node,id=202,attr=13,data=Min time/rank,parent=201 -__rec=node,id=203,attr=10,data=65,parent=202 -__rec=node,id=204,attr=8,data=min#inclusive#sum#time.duration,parent=203 -__rec=node,id=205,attr=13,data=Max time/rank,parent=201 -__rec=node,id=206,attr=10,data=65,parent=205 -__rec=node,id=207,attr=8,data=max#inclusive#sum#time.duration,parent=206 -__rec=node,id=208,attr=13,data=Avg time/rank,parent=201 -__rec=node,id=209,attr=10,data=65,parent=208 -__rec=node,id=210,attr=8,data=avg#inclusive#sum#time.duration,parent=209 -__rec=node,id=213,attr=10,data=193,parent=5 -__rec=node,id=214,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=213 -__rec=node,id=211,attr=10,data=193,parent=2 -__rec=node,id=212,attr=8,data=avg.count#inclusive#sum#time.duration,parent=211 -__rec=node,id=215,attr=13,data=Total time,parent=201 -__rec=node,id=216,attr=10,data=65,parent=215 -__rec=node,id=217,attr=8,data=sum#inclusive#sum#time.duration,parent=216 -__rec=node,id=218,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=219,attr=10,data=65,parent=218 -__rec=node,id=220,attr=8,data=any#any#max#Bytes/Rep,parent=219 -__rec=node,id=221,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=222,attr=10,data=65,parent=221 -__rec=node,id=223,attr=8,data=any#any#max#Flops/Rep,parent=222 -__rec=node,id=224,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=225,attr=10,data=65,parent=224 -__rec=node,id=226,attr=8,data=any#any#max#Iterations/Rep,parent=225 -__rec=node,id=227,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=228,attr=10,data=65,parent=227 -__rec=node,id=229,attr=8,data=any#any#max#Kernels/Rep,parent=228 -__rec=node,id=230,attr=13,data=ProblemSize,parent=5 -__rec=node,id=231,attr=10,data=65,parent=230 -__rec=node,id=232,attr=8,data=any#any#max#ProblemSize,parent=231 -__rec=node,id=233,attr=13,data=Reps,parent=5 -__rec=node,id=234,attr=10,data=65,parent=233 -__rec=node,id=235,attr=8,data=any#any#max#Reps,parent=234 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=236,attr=15,data=regionprofile -__rec=ctx,ref=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=49.766543=49.766543=49.766543=49.766543=1=49.766543=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=Base_Seq -__rec=ctx,ref=60=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=12.966579=12.966579=12.966579=12.966579=1=12.966579=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.662882=0.662882=0.662882=0.662882=1=0.662882=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000811=0.000811=0.000811=0.000811=1=0.000811=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000802=0.000802=0.000802=0.000802=1=0.000802=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000913=0.000913=0.000913=0.000913=1=0.000913=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000908=0.000908=0.000908=0.000908=1=0.000908=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007082=0.007082=0.007082=0.007082=1=0.007082=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007077=0.007077=0.007077=0.007077=1=0.007077=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 -__rec=ctx,ref=72=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003863=0.003863=0.003863=0.003863=1=0.003863=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 -__rec=ctx,ref=73=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003858=0.003858=0.003858=0.003858=1=0.003858=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=74=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005224=0.005224=0.005224=0.005224=1=0.005224=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 -__rec=ctx,ref=75=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005221=0.005221=0.005221=0.005221=1=0.005221=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=76=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002231=0.002231=0.002231=0.002231=1=0.002231=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 -__rec=ctx,ref=77=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002227=0.002227=0.002227=0.002227=1=0.002227=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=78=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000568=0.000568=0.000568=0.000568=1=0.000568=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 -__rec=ctx,ref=79=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000563=0.000563=0.000563=0.000563=1=0.000563=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=80=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000554=0.000554=0.000554=0.000554=1=0.000554=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 -__rec=ctx,ref=81=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000550=0.000550=0.000550=0.000550=1=0.000550=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=82=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.625770=0.625770=0.625770=0.625770=1=0.625770=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 -__rec=ctx,ref=83=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.625756=0.625756=0.625756=0.625756=1=0.625756=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=84=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002304=0.002304=0.002304=0.002304=1=0.002304=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 -__rec=ctx,ref=85=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002299=0.002299=0.002299=0.002299=1=0.002299=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=86=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000683=0.000683=0.000683=0.000683=1=0.000683=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 -__rec=ctx,ref=87=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000679=0.000679=0.000679=0.000679=1=0.000679=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=88=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001179=0.001179=0.001179=0.001179=1=0.001179=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 -__rec=ctx,ref=89=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001176=0.001176=0.001176=0.001176=1=0.001176=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=90=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002556=0.002556=0.002556=0.002556=1=0.002556=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 -__rec=ctx,ref=91=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002550=0.002550=0.002550=0.002550=1=0.002550=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=92=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000621=0.000621=0.000621=0.000621=1=0.000621=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 -__rec=ctx,ref=93=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000617=0.000617=0.000617=0.000617=1=0.000617=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=94=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001534=0.001534=0.001534=0.001534=1=0.001534=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 -__rec=ctx,ref=95=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001531=0.001531=0.001531=0.001531=1=0.001531=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=96=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006940=0.006940=0.006940=0.006940=1=0.006940=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 -__rec=ctx,ref=97=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006937=0.006937=0.006937=0.006937=1=0.006937=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=98=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.048223=0.048223=0.048223=0.048223=1=0.048223=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 -__rec=ctx,ref=99=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006946=0.006946=0.006946=0.006946=1=0.006946=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 -__rec=ctx,ref=100=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.006941=0.006941=0.006941=0.006941=1=0.006941=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 -__rec=ctx,ref=101=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002547=0.002547=0.002547=0.002547=1=0.002547=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 -__rec=ctx,ref=102=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002542=0.002542=0.002542=0.002542=1=0.002542=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 -__rec=ctx,ref=103=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000826=0.000826=0.000826=0.000826=1=0.000826=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 -__rec=ctx,ref=104=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000821=0.000821=0.000821=0.000821=1=0.000821=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 -__rec=ctx,ref=105=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001055=0.001055=0.001055=0.001055=1=0.001055=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 -__rec=ctx,ref=106=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001050=0.001050=0.001050=0.001050=1=0.001050=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 -__rec=ctx,ref=107=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001154=0.001154=0.001154=0.001154=1=0.001154=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 -__rec=ctx,ref=108=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001148=0.001148=0.001148=0.001148=1=0.001148=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 -__rec=ctx,ref=109=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002939=0.002939=0.002939=0.002939=1=0.002939=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 -__rec=ctx,ref=110=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002934=0.002934=0.002934=0.002934=1=0.002934=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 -__rec=ctx,ref=111=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001127=0.001127=0.001127=0.001127=1=0.001127=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 -__rec=ctx,ref=112=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001120=0.001120=0.001120=0.001120=1=0.001120=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 -__rec=ctx,ref=113=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009863=0.009863=0.009863=0.009863=1=0.009863=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 -__rec=ctx,ref=114=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009856=0.009856=0.009856=0.009856=1=0.009856=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 -__rec=ctx,ref=115=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005138=0.005138=0.005138=0.005138=1=0.005138=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 -__rec=ctx,ref=116=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.005132=0.005132=0.005132=0.005132=1=0.005132=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 -__rec=ctx,ref=117=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015191=0.015191=0.015191=0.015191=1=0.015191=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 -__rec=ctx,ref=118=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015185=0.015185=0.015185=0.015185=1=0.015185=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 -__rec=ctx,ref=119=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001401=0.001401=0.001401=0.001401=1=0.001401=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 -__rec=ctx,ref=120=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001395=0.001395=0.001395=0.001395=1=0.001395=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=121=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=11.951622=11.951622=11.951622=11.951622=1=11.951622=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 -__rec=ctx,ref=122=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=3.496143=3.496143=3.496143=3.496143=1=3.496143=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 -__rec=ctx,ref=123=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=3.496127=3.496127=3.496127=3.496127=1=3.496127=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 -__rec=ctx,ref=124=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=5.138641=5.138641=5.138641=5.138641=1=5.138641=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 -__rec=ctx,ref=125=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=5.138628=5.138628=5.138628=5.138628=1=5.138628=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 -__rec=ctx,ref=126=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.090364=0.090364=0.090364=0.090364=1=0.090364=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 -__rec=ctx,ref=127=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.090354=0.090354=0.090354=0.090354=1=0.090354=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 -__rec=ctx,ref=128=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002595=0.002595=0.002595=0.002595=1=0.002595=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 -__rec=ctx,ref=129=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002590=0.002590=0.002590=0.002590=1=0.002590=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 -__rec=ctx,ref=130=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.092578=0.092578=0.092578=0.092578=1=0.092578=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 -__rec=ctx,ref=131=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.092575=0.092575=0.092575=0.092575=1=0.092575=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 -__rec=ctx,ref=132=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.701023=0.701023=0.701023=0.701023=1=0.701023=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 -__rec=ctx,ref=133=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.701017=0.701017=0.701017=0.701017=1=0.701017=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 -__rec=ctx,ref=134=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=2.258295=2.258295=2.258295=2.258295=1=2.258295=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 -__rec=ctx,ref=135=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=2.258288=2.258288=2.258288=2.258288=1=2.258288=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 -__rec=ctx,ref=136=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003622=0.003622=0.003622=0.003622=1=0.003622=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 -__rec=ctx,ref=137=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.003616=0.003616=0.003616=0.003616=1=0.003616=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 -__rec=ctx,ref=138=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001192=0.001192=0.001192=0.001192=1=0.001192=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 -__rec=ctx,ref=139=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001185=0.001185=0.001185=0.001185=1=0.001185=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 -__rec=ctx,ref=140=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.067311=0.067311=0.067311=0.067311=1=0.067311=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 -__rec=ctx,ref=141=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.067307=0.067307=0.067307=0.067307=1=0.067307=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 -__rec=ctx,ref=142=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.022086=0.022086=0.022086=0.022086=1=0.022086=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 -__rec=ctx,ref=143=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.022081=0.022081=0.022081=0.022081=1=0.022081=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 -__rec=ctx,ref=144=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.075110=0.075110=0.075110=0.075110=1=0.075110=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 -__rec=ctx,ref=145=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.075105=0.075105=0.075105=0.075105=1=0.075105=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 -__rec=ctx,ref=146=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002618=0.002618=0.002618=0.002618=1=0.002618=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 -__rec=ctx,ref=147=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002611=0.002611=0.002611=0.002611=1=0.002611=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream,parent=60 -__rec=ctx,ref=148=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004530=0.004530=0.004530=0.004530=1=0.004530=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 -__rec=ctx,ref=149=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001071=0.001071=0.001071=0.001071=1=0.001071=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 -__rec=ctx,ref=150=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001067=0.001067=0.001067=0.001067=1=0.001067=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 -__rec=ctx,ref=151=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000644=0.000644=0.000644=0.000644=1=0.000644=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 -__rec=ctx,ref=152=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000640=0.000640=0.000640=0.000640=1=0.000640=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 -__rec=ctx,ref=153=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001039=0.001039=0.001039=0.001039=1=0.001039=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 -__rec=ctx,ref=154=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001035=0.001035=0.001035=0.001035=1=0.001035=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 -__rec=ctx,ref=155=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000788=0.000788=0.000788=0.000788=1=0.000788=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 -__rec=ctx,ref=156=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 -__rec=ctx,ref=157=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000971=0.000971=0.000971=0.000971=1=0.000971=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 -__rec=ctx,ref=158=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000964=0.000964=0.000964=0.000964=1=0.000964=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps,parent=60 -__rec=ctx,ref=159=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.152089=0.152089=0.152089=0.152089=1=0.152089=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_CONVECTION3DPA,parent=159 -__rec=ctx,ref=160=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015507=0.015507=0.015507=0.015507=1=0.015507=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_CONVECTION3DPA.default,parent=160 -__rec=ctx,ref=161=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.015504=0.015504=0.015504=0.015504=1=0.015504=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 -__rec=ctx,ref=162=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009471=0.009471=0.009471=0.009471=1=0.009471=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=162 -__rec=ctx,ref=163=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.009467=0.009467=0.009467=0.009467=1=0.009467=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_DIFFUSION3DPA,parent=159 -__rec=ctx,ref=164=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.034834=0.034834=0.034834=0.034834=1=0.034834=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_DIFFUSION3DPA.default,parent=164 -__rec=ctx,ref=165=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.034827=0.034827=0.034827=0.034827=1=0.034827=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_ENERGY,parent=159 -__rec=ctx,ref=166=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013153=0.013153=0.013153=0.013153=1=0.013153=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_ENERGY.default,parent=166 -__rec=ctx,ref=167=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013147=0.013147=0.013147=0.013147=1=0.013147=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_FIR,parent=159 -__rec=ctx,ref=168=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007874=0.007874=0.007874=0.007874=1=0.007874=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_FIR.default,parent=168 -__rec=ctx,ref=169=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.007867=0.007867=0.007867=0.007867=1=0.007867=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE,parent=159 -__rec=ctx,ref=170=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000813=0.000813=0.000813=0.000813=1=0.000813=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE.default,parent=170 -__rec=ctx,ref=171=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000809=0.000809=0.000809=0.000809=1=0.000809=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 -__rec=ctx,ref=172=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=172 -__rec=ctx,ref=173=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000779=0.000779=0.000779=0.000779=1=0.000779=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_LTIMES,parent=159 -__rec=ctx,ref=174=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.019404=0.019404=0.019404=0.019404=1=0.019404=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_LTIMES.default,parent=174 -__rec=ctx,ref=175=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.019400=0.019400=0.019400=0.019400=1=0.019400=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 -__rec=ctx,ref=176=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.017909=0.017909=0.017909=0.017909=1=0.017909=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=176 -__rec=ctx,ref=177=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.017905=0.017905=0.017905=0.017905=1=0.017905=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_MASS3DPA,parent=159 -__rec=ctx,ref=178=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013735=0.013735=0.013735=0.013735=1=0.013735=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_MASS3DPA.default,parent=178 -__rec=ctx,ref=179=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.013730=0.013730=0.013730=0.013730=1=0.013730=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=180,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 -__rec=ctx,ref=180=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004590=0.004590=0.004590=0.004590=1=0.004590=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=180 -__rec=ctx,ref=181=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.004582=0.004582=0.004582=0.004582=1=0.004582=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Apps_PRESSURE,parent=159 -__rec=ctx,ref=182=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002744=0.002744=0.002744=0.002744=1=0.002744=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=183,attr=59,data=Apps_PRESSURE.default,parent=182 -__rec=ctx,ref=183=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.002739=0.002739=0.002739=0.002739=1=0.002739=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=184,attr=59,data=Apps_VOL3D,parent=159 -__rec=ctx,ref=184=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.011226=0.011226=0.011226=0.011226=1=0.011226=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=185,attr=59,data=Apps_VOL3D.default,parent=184 -__rec=ctx,ref=185=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.011221=0.011221=0.011221=0.011221=1=0.011221=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=186=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.146819=0.146819=0.146819=0.146819=1=0.146819=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_SCAN,parent=186 -__rec=ctx,ref=187=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001098=0.001098=0.001098=0.001098=1=0.001098=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_SCAN.default,parent=187 -__rec=ctx,ref=188=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001087=0.001087=0.001087=0.001087=1=0.001087=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=189,attr=59,data=Algorithm_SORT,parent=186 -__rec=ctx,ref=189=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.065678=0.065678=0.065678=0.065678=1=0.065678=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=190,attr=59,data=Algorithm_SORT.default,parent=189 -__rec=ctx,ref=190=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.065674=0.065674=0.065674=0.065674=1=0.065674=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=191,attr=59,data=Algorithm_SORTPAIRS,parent=186 -__rec=ctx,ref=191=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.076371=0.076371=0.076371=0.076371=1=0.076371=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=192,attr=59,data=Algorithm_SORTPAIRS.default,parent=191 -__rec=ctx,ref=192=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.076360=0.076360=0.076360=0.076360=1=0.076360=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=193,attr=59,data=Algorithm_REDUCE_SUM,parent=186 -__rec=ctx,ref=193=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001107=0.001107=0.001107=0.001107=1=0.001107=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=194,attr=59,data=Algorithm_REDUCE_SUM.default,parent=193 -__rec=ctx,ref=194=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001101=0.001101=0.001101=0.001101=1=0.001101=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=195,attr=59,data=Algorithm_MEMSET,parent=186 -__rec=ctx,ref=195=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000765=0.000765=0.000765=0.000765=1=0.000765=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=196,attr=59,data=Algorithm_MEMSET.library,parent=195 -__rec=ctx,ref=196=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000384=0.000384=0.000384=0.000384=1=0.000384=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=197,attr=59,data=Algorithm_MEMSET.default,parent=195 -__rec=ctx,ref=197=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=198,attr=59,data=Algorithm_MEMCPY,parent=186 -__rec=ctx,ref=198=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001768=0.001768=0.001768=0.001768=1=0.001768=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=199,attr=59,data=Algorithm_MEMCPY.library,parent=198 -__rec=ctx,ref=199=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.001081=0.001081=0.001081=0.001081=1=0.001081=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=200,attr=59,data=Algorithm_MEMCPY.default,parent=198 -__rec=ctx,ref=200=236,attr=204=207=210=214=212=217=220=223=226=229=232=235,data=0.000680=0.000680=0.000680=0.000680=1=0.000680=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=312,attr=10,data=512,parent=3 -__rec=node,id=318,attr=8,data=spot.channels,parent=312 -__rec=node,id=317,attr=8,data=spot.options,parent=312 -__rec=node,id=315,attr=10,data=512,parent=1 -__rec=node,id=316,attr=8,data=spot.format.version,parent=315 -__rec=node,id=314,attr=8,data=spot.timeseries.metrics,parent=312 -__rec=node,id=313,attr=8,data=spot.metrics,parent=312 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=319,attr=313,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=320,attr=314,data=,parent=319 -__rec=node,id=321,attr=316,data=2,parent=320 -__rec=node,id=322,attr=317,data=,parent=321 -__rec=node,id=323,attr=318,data=regionprofile,parent=322 -__rec=node,id=237,attr=10,data=84,parent=3 -__rec=node,id=238,attr=8,data=adiak.subcategory,parent=237 -__rec=node,id=239,attr=10,data=84,parent=1 -__rec=node,id=240,attr=8,data=adiak.category,parent=239 -__rec=node,id=241,attr=8,data=adiak.type,parent=237 -__rec=node,id=242,attr=241,data=string,parent=3 -__rec=node,id=243,attr=240,data=2,parent=242 -__rec=node,id=244,attr=238,data=none,parent=243 -__rec=node,id=245,attr=10,data=1612,parent=244 -__rec=node,id=246,attr=8,data=variant,parent=245 -__rec=node,id=247,attr=8,data=omp_max_threads,parent=245 -__rec=node,id=248,attr=8,data=omp_version,parent=245 -__rec=node,id=249,attr=8,data=SizeMeaning,parent=245 -__rec=node,id=250,attr=241,data=double,parent=5 -__rec=node,id=251,attr=240,data=2,parent=250 -__rec=node,id=252,attr=238,data=none,parent=251 -__rec=node,id=253,attr=10,data=1612,parent=252 -__rec=node,id=254,attr=8,data=ProblemSizeRunParam,parent=253 -__rec=node,id=255,attr=8,data=machine_build,parent=245 -__rec=node,id=256,attr=8,data=systype_build,parent=245 -__rec=node,id=257,attr=8,data=Compiler_path_version,parent=245 -__rec=node,id=258,attr=8,data=compiler,parent=245 -__rec=node,id=259,attr=8,data=compiler_version,parent=245 -__rec=node,id=260,attr=8,data=rajaperf_compiler_options,parent=245 -__rec=node,id=261,attr=8,data=rajaperf_compiler,parent=245 -__rec=node,id=262,attr=8,data=cmake_exe_linker_flags,parent=245 -__rec=node,id=263,attr=8,data=cmake_cxx_flags,parent=245 -__rec=node,id=264,attr=8,data=cmake_build_type,parent=245 -__rec=node,id=265,attr=8,data=raja_version,parent=245 -__rec=node,id=266,attr=8,data=perfsuite_version,parent=245 -__rec=node,id=267,attr=238,data=host,parent=243 -__rec=node,id=268,attr=10,data=1612,parent=267 -__rec=node,id=269,attr=8,data=cluster,parent=268 -__rec=node,id=270,attr=241,data=set of string,parent=3 -__rec=node,id=271,attr=240,data=2,parent=270 -__rec=node,id=272,attr=238,data=runinfo,parent=271 -__rec=node,id=273,attr=10,data=1612,parent=272 -__rec=node,id=274,attr=8,data=cmdline,parent=273 -__rec=node,id=275,attr=241,data=set of path,parent=3 -__rec=node,id=276,attr=240,data=2,parent=275 -__rec=node,id=277,attr=238,data=binary,parent=276 -__rec=node,id=278,attr=10,data=1612,parent=277 -__rec=node,id=279,attr=8,data=libraries,parent=278 -__rec=node,id=280,attr=241,data=date,parent=2 -__rec=node,id=281,attr=240,data=2,parent=280 -__rec=node,id=282,attr=238,data=runinfo,parent=281 -__rec=node,id=283,attr=10,data=1612,parent=282 -__rec=node,id=284,attr=8,data=launchdate,parent=283 -__rec=node,id=285,attr=238,data=runinfo,parent=243 -__rec=node,id=286,attr=10,data=1612,parent=285 -__rec=node,id=287,attr=8,data=user,parent=286 -__rec=node,id=288,attr=8,data=cali.channel,parent=16 -__rec=node,id=289,attr=288,data=spot -__rec=node,id=290,attr=287,data=umdev,parent=289 -__rec=node,id=291,attr=284,data=1673516370,parent=290 -__rec=node,id=292,attr=279,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=291 -__rec=node,id=293,attr=274,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=292 -__rec=node,id=294,attr=269,data=ruby,parent=293 -__rec=node,id=295,attr=266,data=0.11.0,parent=294 -__rec=node,id=296,attr=265,data=2022.10.4,parent=295 -__rec=node,id=297,attr=264,data=RelWithDebInfo,parent=296 -__rec=node,id=298,attr=263,data= -Wall -Wextra ,parent=297 -__rec=node,id=299,attr=262,data=,parent=298 -__rec=node,id=300,attr=261,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=299 -__rec=node,id=301,attr=260,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=300 -__rec=node,id=302,attr=259,data=8.3.1,parent=301 -__rec=node,id=303,attr=258,data=g++-8.3.1,parent=302 -__rec=node,id=304,attr=257,data=gcc-8.3.1,parent=303 -__rec=node,id=305,attr=256,data=toss_3_x86_64_ib,parent=304 -__rec=node,id=306,attr=255,data=ruby961,parent=305 -__rec=node,id=307,attr=254,data=1.000000,parent=306 -__rec=node,id=308,attr=249,data=Factor,parent=307 -__rec=node,id=309,attr=248,data=4.5,parent=308 -__rec=node,id=310,attr=247,data=112,parent=309 -__rec=node,id=311,attr=246,data=Base_Seq,parent=310 -__rec=globals,ref=323=311 diff --git a/test/caliper-baselines/Lambda_OpenMP.cali b/test/caliper-baselines/Lambda_OpenMP.cali deleted file mode 100644 index bd45de048..000000000 --- a/test/caliper-baselines/Lambda_OpenMP.cali +++ /dev/null @@ -1,384 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=189,attr=14,data=sec,parent=5 -__rec=node,id=190,attr=13,data=Min time/rank,parent=189 -__rec=node,id=191,attr=10,data=65,parent=190 -__rec=node,id=192,attr=8,data=min#inclusive#sum#time.duration,parent=191 -__rec=node,id=193,attr=13,data=Max time/rank,parent=189 -__rec=node,id=194,attr=10,data=65,parent=193 -__rec=node,id=195,attr=8,data=max#inclusive#sum#time.duration,parent=194 -__rec=node,id=196,attr=13,data=Avg time/rank,parent=189 -__rec=node,id=197,attr=10,data=65,parent=196 -__rec=node,id=198,attr=8,data=avg#inclusive#sum#time.duration,parent=197 -__rec=node,id=201,attr=10,data=193,parent=5 -__rec=node,id=202,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=201 -__rec=node,id=199,attr=10,data=193,parent=2 -__rec=node,id=200,attr=8,data=avg.count#inclusive#sum#time.duration,parent=199 -__rec=node,id=203,attr=13,data=Total time,parent=189 -__rec=node,id=204,attr=10,data=65,parent=203 -__rec=node,id=205,attr=8,data=sum#inclusive#sum#time.duration,parent=204 -__rec=node,id=206,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=207,attr=10,data=65,parent=206 -__rec=node,id=208,attr=8,data=any#any#max#Bytes/Rep,parent=207 -__rec=node,id=209,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=210,attr=10,data=65,parent=209 -__rec=node,id=211,attr=8,data=any#any#max#Flops/Rep,parent=210 -__rec=node,id=212,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=213,attr=10,data=65,parent=212 -__rec=node,id=214,attr=8,data=any#any#max#Iterations/Rep,parent=213 -__rec=node,id=215,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=216,attr=10,data=65,parent=215 -__rec=node,id=217,attr=8,data=any#any#max#Kernels/Rep,parent=216 -__rec=node,id=218,attr=13,data=ProblemSize,parent=5 -__rec=node,id=219,attr=10,data=65,parent=218 -__rec=node,id=220,attr=8,data=any#any#max#ProblemSize,parent=219 -__rec=node,id=221,attr=13,data=Reps,parent=5 -__rec=node,id=222,attr=10,data=65,parent=221 -__rec=node,id=223,attr=8,data=any#any#max#Reps,parent=222 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=224,attr=15,data=regionprofile -__rec=ctx,ref=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=61.876137=61.876137=61.876137=61.876137=1=61.876137=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=Lambda_OpenMP -__rec=ctx,ref=60=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.924977=0.924977=0.924977=0.924977=1=0.924977=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.152077=0.152077=0.152077=0.152077=1=0.152077=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000152=0.000152=0.000152=0.000152=1=0.000152=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000148=0.000148=0.000148=0.000148=1=0.000148=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000342=0.000342=0.000342=0.000342=1=0.000342=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000292=0.000292=0.000292=0.000292=1=0.000292=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000286=0.000286=0.000286=0.000286=1=0.000286=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 -__rec=ctx,ref=72=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000509=0.000509=0.000509=0.000509=1=0.000509=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 -__rec=ctx,ref=73=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000504=0.000504=0.000504=0.000504=1=0.000504=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=74=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 -__rec=ctx,ref=75=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000576=0.000576=0.000576=0.000576=1=0.000576=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=76=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000299=0.000299=0.000299=0.000299=1=0.000299=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 -__rec=ctx,ref=77=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000293=0.000293=0.000293=0.000293=1=0.000293=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=78=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000186=0.000186=0.000186=0.000186=1=0.000186=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 -__rec=ctx,ref=79=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000181=0.000181=0.000181=0.000181=1=0.000181=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=80=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000184=0.000184=0.000184=0.000184=1=0.000184=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 -__rec=ctx,ref=81=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000180=0.000180=0.000180=0.000180=1=0.000180=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=82=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.026078=0.026078=0.026078=0.026078=1=0.026078=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 -__rec=ctx,ref=83=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.026070=0.026070=0.026070=0.026070=1=0.026070=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=84=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000298=0.000298=0.000298=0.000298=1=0.000298=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 -__rec=ctx,ref=85=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000291=0.000291=0.000291=0.000291=1=0.000291=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=86=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000193=0.000193=0.000193=0.000193=1=0.000193=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 -__rec=ctx,ref=87=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000183=0.000183=0.000183=0.000183=1=0.000183=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=88=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.121816=0.121816=0.121816=0.121816=1=0.121816=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 -__rec=ctx,ref=89=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.121809=0.121809=0.121809=0.121809=1=0.121809=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=90=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000154=0.000154=0.000154=0.000154=1=0.000154=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 -__rec=ctx,ref=91=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000149=0.000149=0.000149=0.000149=1=0.000149=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=92=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000359=0.000359=0.000359=0.000359=1=0.000359=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 -__rec=ctx,ref=93=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000355=0.000355=0.000355=0.000355=1=0.000355=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=94=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 -__rec=ctx,ref=95=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000389=0.000389=0.000389=0.000389=1=0.000389=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=96=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000173=0.000173=0.000173=0.000173=1=0.000173=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 -__rec=ctx,ref=97=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000169=0.000169=0.000169=0.000169=1=0.000169=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=98=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011186=0.011186=0.011186=0.011186=1=0.011186=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 -__rec=ctx,ref=99=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006425=0.006425=0.006425=0.006425=1=0.006425=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 -__rec=ctx,ref=100=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006417=0.006417=0.006417=0.006417=1=0.006417=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 -__rec=ctx,ref=101=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 -__rec=ctx,ref=102=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000255=0.000255=0.000255=0.000255=1=0.000255=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 -__rec=ctx,ref=103=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000340=0.000340=0.000340=0.000340=1=0.000340=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 -__rec=ctx,ref=104=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000333=0.000333=0.000333=0.000333=1=0.000333=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 -__rec=ctx,ref=105=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000267=0.000267=0.000267=0.000267=1=0.000267=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 -__rec=ctx,ref=106=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000258=0.000258=0.000258=0.000258=1=0.000258=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 -__rec=ctx,ref=107=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000403=0.000403=0.000403=0.000403=1=0.000403=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 -__rec=ctx,ref=108=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000399=0.000399=0.000399=0.000399=1=0.000399=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 -__rec=ctx,ref=109=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000701=0.000701=0.000701=0.000701=1=0.000701=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 -__rec=ctx,ref=110=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000690=0.000690=0.000690=0.000690=1=0.000690=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 -__rec=ctx,ref=111=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000262=0.000262=0.000262=0.000262=1=0.000262=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 -__rec=ctx,ref=112=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000257=0.000257=0.000257=0.000257=1=0.000257=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 -__rec=ctx,ref=113=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000698=0.000698=0.000698=0.000698=1=0.000698=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 -__rec=ctx,ref=114=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000690=0.000690=0.000690=0.000690=1=0.000690=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 -__rec=ctx,ref=115=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001122=0.001122=0.001122=0.001122=1=0.001122=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 -__rec=ctx,ref=116=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001115=0.001115=0.001115=0.001115=1=0.001115=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 -__rec=ctx,ref=117=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000383=0.000383=0.000383=0.000383=1=0.000383=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 -__rec=ctx,ref=118=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000376=0.000376=0.000376=0.000376=1=0.000376=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 -__rec=ctx,ref=119=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000278=0.000278=0.000278=0.000278=1=0.000278=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 -__rec=ctx,ref=120=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000271=0.000271=0.000271=0.000271=1=0.000271=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=121=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.714984=0.714984=0.714984=0.714984=1=0.714984=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 -__rec=ctx,ref=122=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.172167=0.172167=0.172167=0.172167=1=0.172167=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 -__rec=ctx,ref=123=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.172158=0.172158=0.172158=0.172158=1=0.172158=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 -__rec=ctx,ref=124=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.268010=0.268010=0.268010=0.268010=1=0.268010=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 -__rec=ctx,ref=125=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.267996=0.267996=0.267996=0.267996=1=0.267996=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 -__rec=ctx,ref=126=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.084866=0.084866=0.084866=0.084866=1=0.084866=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 -__rec=ctx,ref=127=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.084860=0.084860=0.084860=0.084860=1=0.084860=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 -__rec=ctx,ref=128=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000490=0.000490=0.000490=0.000490=1=0.000490=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 -__rec=ctx,ref=129=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000485=0.000485=0.000485=0.000485=1=0.000485=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 -__rec=ctx,ref=130=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.008285=0.008285=0.008285=0.008285=1=0.008285=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 -__rec=ctx,ref=131=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.008280=0.008280=0.008280=0.008280=1=0.008280=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 -__rec=ctx,ref=132=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.053857=0.053857=0.053857=0.053857=1=0.053857=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 -__rec=ctx,ref=133=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.053849=0.053849=0.053849=0.053849=1=0.053849=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 -__rec=ctx,ref=134=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.099208=0.099208=0.099208=0.099208=1=0.099208=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 -__rec=ctx,ref=135=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.099202=0.099202=0.099202=0.099202=1=0.099202=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 -__rec=ctx,ref=136=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009339=0.009339=0.009339=0.009339=1=0.009339=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 -__rec=ctx,ref=137=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009326=0.009326=0.009326=0.009326=1=0.009326=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 -__rec=ctx,ref=138=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000427=0.000427=0.000427=0.000427=1=0.000427=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 -__rec=ctx,ref=139=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000423=0.000423=0.000423=0.000423=1=0.000423=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 -__rec=ctx,ref=140=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.010565=0.010565=0.010565=0.010565=1=0.010565=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 -__rec=ctx,ref=141=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.010558=0.010558=0.010558=0.010558=1=0.010558=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 -__rec=ctx,ref=142=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001839=0.001839=0.001839=0.001839=1=0.001839=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 -__rec=ctx,ref=143=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001832=0.001832=0.001832=0.001832=1=0.001832=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 -__rec=ctx,ref=144=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005512=0.005512=0.005512=0.005512=1=0.005512=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 -__rec=ctx,ref=145=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005502=0.005502=0.005502=0.005502=1=0.005502=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 -__rec=ctx,ref=146=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 -__rec=ctx,ref=147=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream,parent=60 -__rec=ctx,ref=148=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001681=0.001681=0.001681=0.001681=1=0.001681=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 -__rec=ctx,ref=149=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 -__rec=ctx,ref=150=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000340=0.000340=0.000340=0.000340=1=0.000340=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 -__rec=ctx,ref=151=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 -__rec=ctx,ref=152=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 -__rec=ctx,ref=153=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000343=0.000343=0.000343=0.000343=1=0.000343=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 -__rec=ctx,ref=154=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000338=0.000338=0.000338=0.000338=1=0.000338=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 -__rec=ctx,ref=155=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000344=0.000344=0.000344=0.000344=1=0.000344=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 -__rec=ctx,ref=156=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000337=0.000337=0.000337=0.000337=1=0.000337=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 -__rec=ctx,ref=157=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000287=0.000287=0.000287=0.000287=1=0.000287=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 -__rec=ctx,ref=158=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000281=0.000281=0.000281=0.000281=1=0.000281=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps,parent=60 -__rec=ctx,ref=159=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.025303=0.025303=0.025303=0.025303=1=0.025303=216000000.000000=79417584.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 -__rec=ctx,ref=160=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000805=0.000805=0.000805=0.000805=1=0.000805=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 -__rec=ctx,ref=161=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000800=0.000800=0.000800=0.000800=1=0.000800=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_ENERGY,parent=159 -__rec=ctx,ref=162=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000514=0.000514=0.000514=0.000514=1=0.000514=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_ENERGY.default,parent=162 -__rec=ctx,ref=163=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000506=0.000506=0.000506=0.000506=1=0.000506=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_FIR,parent=159 -__rec=ctx,ref=164=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000339=0.000339=0.000339=0.000339=1=0.000339=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_FIR.default,parent=164 -__rec=ctx,ref=165=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_HALOEXCHANGE,parent=159 -__rec=ctx,ref=166=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005194=0.005194=0.005194=0.005194=1=0.005194=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_HALOEXCHANGE.default,parent=166 -__rec=ctx,ref=167=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005185=0.005185=0.005185=0.005185=1=0.005185=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 -__rec=ctx,ref=168=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.014440=0.014440=0.014440=0.014440=1=0.014440=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=168 -__rec=ctx,ref=169=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.014433=0.014433=0.014433=0.014433=1=0.014433=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_LTIMES,parent=159 -__rec=ctx,ref=170=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000585=0.000585=0.000585=0.000585=1=0.000585=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_LTIMES.default,parent=170 -__rec=ctx,ref=171=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 -__rec=ctx,ref=172=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000588=0.000588=0.000588=0.000588=1=0.000588=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=172 -__rec=ctx,ref=173=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 -__rec=ctx,ref=174=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001144=0.001144=0.001144=0.001144=1=0.001144=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=174 -__rec=ctx,ref=175=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001139=0.001139=0.001139=0.001139=1=0.001139=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_PRESSURE,parent=159 -__rec=ctx,ref=176=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000743=0.000743=0.000743=0.000743=1=0.000743=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_PRESSURE.default,parent=176 -__rec=ctx,ref=177=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000737=0.000737=0.000737=0.000737=1=0.000737=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_VOL3D,parent=159 -__rec=ctx,ref=178=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000903=0.000903=0.000903=0.000903=1=0.000903=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_VOL3D.default,parent=178 -__rec=ctx,ref=179=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000890=0.000890=0.000890=0.000890=1=0.000890=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=180,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=180=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.019297=0.019297=0.019297=0.019297=1=0.019297=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Algorithm_SCAN,parent=180 -__rec=ctx,ref=181=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000365=0.000365=0.000365=0.000365=1=0.000365=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Algorithm_SCAN.default,parent=181 -__rec=ctx,ref=182=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000360=0.000360=0.000360=0.000360=1=0.000360=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=183,attr=59,data=Algorithm_REDUCE_SUM,parent=180 -__rec=ctx,ref=183=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000221=0.000221=0.000221=0.000221=1=0.000221=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=184,attr=59,data=Algorithm_REDUCE_SUM.default,parent=183 -__rec=ctx,ref=184=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000216=0.000216=0.000216=0.000216=1=0.000216=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=185,attr=59,data=Algorithm_MEMSET,parent=180 -__rec=ctx,ref=185=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009364=0.009364=0.009364=0.009364=1=0.009364=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm_MEMSET.default,parent=185 -__rec=ctx,ref=186=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009359=0.009359=0.009359=0.009359=1=0.009359=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_MEMCPY,parent=180 -__rec=ctx,ref=187=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009329=0.009329=0.009329=0.009329=1=0.009329=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_MEMCPY.default,parent=187 -__rec=ctx,ref=188=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009324=0.009324=0.009324=0.009324=1=0.009324=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=300,attr=10,data=512,parent=3 -__rec=node,id=306,attr=8,data=spot.channels,parent=300 -__rec=node,id=305,attr=8,data=spot.options,parent=300 -__rec=node,id=303,attr=10,data=512,parent=1 -__rec=node,id=304,attr=8,data=spot.format.version,parent=303 -__rec=node,id=302,attr=8,data=spot.timeseries.metrics,parent=300 -__rec=node,id=301,attr=8,data=spot.metrics,parent=300 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=307,attr=301,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=308,attr=302,data=,parent=307 -__rec=node,id=309,attr=304,data=2,parent=308 -__rec=node,id=310,attr=305,data=,parent=309 -__rec=node,id=311,attr=306,data=regionprofile,parent=310 -__rec=node,id=225,attr=10,data=84,parent=3 -__rec=node,id=226,attr=8,data=adiak.subcategory,parent=225 -__rec=node,id=227,attr=10,data=84,parent=1 -__rec=node,id=228,attr=8,data=adiak.category,parent=227 -__rec=node,id=229,attr=8,data=adiak.type,parent=225 -__rec=node,id=230,attr=229,data=string,parent=3 -__rec=node,id=231,attr=228,data=2,parent=230 -__rec=node,id=232,attr=226,data=none,parent=231 -__rec=node,id=233,attr=10,data=1612,parent=232 -__rec=node,id=234,attr=8,data=variant,parent=233 -__rec=node,id=235,attr=8,data=omp_max_threads,parent=233 -__rec=node,id=236,attr=8,data=omp_version,parent=233 -__rec=node,id=237,attr=8,data=SizeMeaning,parent=233 -__rec=node,id=238,attr=229,data=double,parent=5 -__rec=node,id=239,attr=228,data=2,parent=238 -__rec=node,id=240,attr=226,data=none,parent=239 -__rec=node,id=241,attr=10,data=1612,parent=240 -__rec=node,id=242,attr=8,data=ProblemSizeRunParam,parent=241 -__rec=node,id=243,attr=8,data=machine_build,parent=233 -__rec=node,id=244,attr=8,data=systype_build,parent=233 -__rec=node,id=245,attr=8,data=Compiler_path_version,parent=233 -__rec=node,id=246,attr=8,data=compiler,parent=233 -__rec=node,id=247,attr=8,data=compiler_version,parent=233 -__rec=node,id=248,attr=8,data=rajaperf_compiler_options,parent=233 -__rec=node,id=249,attr=8,data=rajaperf_compiler,parent=233 -__rec=node,id=250,attr=8,data=cmake_exe_linker_flags,parent=233 -__rec=node,id=251,attr=8,data=cmake_cxx_flags,parent=233 -__rec=node,id=252,attr=8,data=cmake_build_type,parent=233 -__rec=node,id=253,attr=8,data=raja_version,parent=233 -__rec=node,id=254,attr=8,data=perfsuite_version,parent=233 -__rec=node,id=255,attr=226,data=host,parent=231 -__rec=node,id=256,attr=10,data=1612,parent=255 -__rec=node,id=257,attr=8,data=cluster,parent=256 -__rec=node,id=258,attr=229,data=set of string,parent=3 -__rec=node,id=259,attr=228,data=2,parent=258 -__rec=node,id=260,attr=226,data=runinfo,parent=259 -__rec=node,id=261,attr=10,data=1612,parent=260 -__rec=node,id=262,attr=8,data=cmdline,parent=261 -__rec=node,id=263,attr=229,data=set of path,parent=3 -__rec=node,id=264,attr=228,data=2,parent=263 -__rec=node,id=265,attr=226,data=binary,parent=264 -__rec=node,id=266,attr=10,data=1612,parent=265 -__rec=node,id=267,attr=8,data=libraries,parent=266 -__rec=node,id=268,attr=229,data=date,parent=2 -__rec=node,id=269,attr=228,data=2,parent=268 -__rec=node,id=270,attr=226,data=runinfo,parent=269 -__rec=node,id=271,attr=10,data=1612,parent=270 -__rec=node,id=272,attr=8,data=launchdate,parent=271 -__rec=node,id=273,attr=226,data=runinfo,parent=231 -__rec=node,id=274,attr=10,data=1612,parent=273 -__rec=node,id=275,attr=8,data=user,parent=274 -__rec=node,id=276,attr=8,data=cali.channel,parent=16 -__rec=node,id=277,attr=276,data=spot -__rec=node,id=278,attr=275,data=umdev,parent=277 -__rec=node,id=279,attr=272,data=1673516370,parent=278 -__rec=node,id=280,attr=267,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=279 -__rec=node,id=281,attr=262,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=280 -__rec=node,id=282,attr=257,data=ruby,parent=281 -__rec=node,id=283,attr=254,data=0.11.0,parent=282 -__rec=node,id=284,attr=253,data=2022.10.4,parent=283 -__rec=node,id=285,attr=252,data=RelWithDebInfo,parent=284 -__rec=node,id=286,attr=251,data= -Wall -Wextra ,parent=285 -__rec=node,id=287,attr=250,data=,parent=286 -__rec=node,id=288,attr=249,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=287 -__rec=node,id=289,attr=248,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=288 -__rec=node,id=290,attr=247,data=8.3.1,parent=289 -__rec=node,id=291,attr=246,data=g++-8.3.1,parent=290 -__rec=node,id=292,attr=245,data=gcc-8.3.1,parent=291 -__rec=node,id=293,attr=244,data=toss_3_x86_64_ib,parent=292 -__rec=node,id=294,attr=243,data=ruby961,parent=293 -__rec=node,id=295,attr=242,data=1.000000,parent=294 -__rec=node,id=296,attr=237,data=Factor,parent=295 -__rec=node,id=297,attr=236,data=4.5,parent=296 -__rec=node,id=298,attr=235,data=112,parent=297 -__rec=node,id=299,attr=234,data=Lambda_OpenMP,parent=298 -__rec=globals,ref=311=299 diff --git a/test/caliper-baselines/Lambda_Seq.cali b/test/caliper-baselines/Lambda_Seq.cali deleted file mode 100644 index d53a88014..000000000 --- a/test/caliper-baselines/Lambda_Seq.cali +++ /dev/null @@ -1,384 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=189,attr=14,data=sec,parent=5 -__rec=node,id=190,attr=13,data=Min time/rank,parent=189 -__rec=node,id=191,attr=10,data=65,parent=190 -__rec=node,id=192,attr=8,data=min#inclusive#sum#time.duration,parent=191 -__rec=node,id=193,attr=13,data=Max time/rank,parent=189 -__rec=node,id=194,attr=10,data=65,parent=193 -__rec=node,id=195,attr=8,data=max#inclusive#sum#time.duration,parent=194 -__rec=node,id=196,attr=13,data=Avg time/rank,parent=189 -__rec=node,id=197,attr=10,data=65,parent=196 -__rec=node,id=198,attr=8,data=avg#inclusive#sum#time.duration,parent=197 -__rec=node,id=201,attr=10,data=193,parent=5 -__rec=node,id=202,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=201 -__rec=node,id=199,attr=10,data=193,parent=2 -__rec=node,id=200,attr=8,data=avg.count#inclusive#sum#time.duration,parent=199 -__rec=node,id=203,attr=13,data=Total time,parent=189 -__rec=node,id=204,attr=10,data=65,parent=203 -__rec=node,id=205,attr=8,data=sum#inclusive#sum#time.duration,parent=204 -__rec=node,id=206,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=207,attr=10,data=65,parent=206 -__rec=node,id=208,attr=8,data=any#any#max#Bytes/Rep,parent=207 -__rec=node,id=209,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=210,attr=10,data=65,parent=209 -__rec=node,id=211,attr=8,data=any#any#max#Flops/Rep,parent=210 -__rec=node,id=212,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=213,attr=10,data=65,parent=212 -__rec=node,id=214,attr=8,data=any#any#max#Iterations/Rep,parent=213 -__rec=node,id=215,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=216,attr=10,data=65,parent=215 -__rec=node,id=217,attr=8,data=any#any#max#Kernels/Rep,parent=216 -__rec=node,id=218,attr=13,data=ProblemSize,parent=5 -__rec=node,id=219,attr=10,data=65,parent=218 -__rec=node,id=220,attr=8,data=any#any#max#ProblemSize,parent=219 -__rec=node,id=221,attr=13,data=Reps,parent=5 -__rec=node,id=222,attr=10,data=65,parent=221 -__rec=node,id=223,attr=8,data=any#any#max#Reps,parent=222 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=224,attr=15,data=regionprofile -__rec=ctx,ref=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=49.781536=49.781536=49.781536=49.781536=1=49.781536=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=Lambda_Seq -__rec=ctx,ref=60=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=12.944897=12.944897=12.944897=12.944897=1=12.944897=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.680827=0.680827=0.680827=0.680827=1=0.680827=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000979=0.000979=0.000979=0.000979=1=0.000979=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000976=0.000976=0.000976=0.000976=1=0.000976=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000739=0.000739=0.000739=0.000739=1=0.000739=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000736=0.000736=0.000736=0.000736=1=0.000736=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007106=0.007106=0.007106=0.007106=1=0.007106=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007102=0.007102=0.007102=0.007102=1=0.007102=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST,parent=65 -__rec=ctx,ref=72=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003858=0.003858=0.003858=0.003858=1=0.003858=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST.default,parent=72 -__rec=ctx,ref=73=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003854=0.003854=0.003854=0.003854=1=0.003854=10000016.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=74=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004706=0.004706=0.004706=0.004706=1=0.004706=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=74 -__rec=ctx,ref=75=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004702=0.004702=0.004702=0.004702=1=0.004702=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=76=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002041=0.002041=0.002041=0.002041=1=0.002041=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT3.default,parent=76 -__rec=ctx,ref=77=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002036=0.002036=0.002036=0.002036=1=0.002036=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=78=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000516=0.000516=0.000516=0.000516=1=0.000516=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D.default,parent=78 -__rec=ctx,ref=79=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000512=0.000512=0.000512=0.000512=1=0.000512=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=80=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000520=0.000520=0.000520=0.000520=1=0.000520=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=80 -__rec=ctx,ref=81=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000517=0.000517=0.000517=0.000517=1=0.000517=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=82=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.646852=0.646852=0.646852=0.646852=1=0.646852=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=82 -__rec=ctx,ref=83=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.646844=0.646844=0.646844=0.646844=1=0.646844=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=84=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002052=0.002052=0.002052=0.002052=1=0.002052=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_MULADDSUB.default,parent=84 -__rec=ctx,ref=85=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002047=0.002047=0.002047=0.002047=1=0.002047=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=86=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000634=0.000634=0.000634=0.000634=1=0.000634=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_NESTED_INIT.default,parent=86 -__rec=ctx,ref=87=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000628=0.000628=0.000628=0.000628=1=0.000628=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=88=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001174=0.001174=0.001174=0.001174=1=0.001174=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_ATOMIC.default,parent=88 -__rec=ctx,ref=89=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001171=0.001171=0.001171=0.001171=1=0.001171=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=90=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002273=0.002273=0.002273=0.002273=1=0.002273=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_PI_REDUCE.default,parent=90 -__rec=ctx,ref=91=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002268=0.002268=0.002268=0.002268=1=0.002268=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=92=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000543=0.000543=0.000543=0.000543=1=0.000543=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE3_INT.default,parent=92 -__rec=ctx,ref=93=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000540=0.000540=0.000540=0.000540=1=0.000540=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=94=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001520=0.001520=0.001520=0.001520=1=0.001520=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_REDUCE_STRUCT.default,parent=94 -__rec=ctx,ref=95=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001516=0.001516=0.001516=0.001516=1=0.001516=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=96=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005263=0.005263=0.005263=0.005263=1=0.005263=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Basic_TRAP_INT.default,parent=96 -__rec=ctx,ref=97=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005260=0.005260=0.005260=0.005260=1=0.005260=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=98=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.047058=0.047058=0.047058=0.047058=1=0.047058=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_DIFF_PREDICT,parent=98 -__rec=ctx,ref=99=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006930=0.006930=0.006930=0.006930=1=0.006930=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_DIFF_PREDICT.default,parent=99 -__rec=ctx,ref=100=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.006925=0.006925=0.006925=0.006925=1=0.006925=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_EOS,parent=98 -__rec=ctx,ref=101=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002474=0.002474=0.002474=0.002474=1=0.002474=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_EOS.default,parent=101 -__rec=ctx,ref=102=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002469=0.002469=0.002469=0.002469=1=0.002469=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_DIFF,parent=98 -__rec=ctx,ref=103=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000660=0.000660=0.000660=0.000660=1=0.000660=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_DIFF.default,parent=103 -__rec=ctx,ref=104=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000656=0.000656=0.000656=0.000656=1=0.000656=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_MIN,parent=98 -__rec=ctx,ref=105=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001018=0.001018=0.001018=0.001018=1=0.001018=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_MIN.default,parent=105 -__rec=ctx,ref=106=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001011=0.001011=0.001011=0.001011=1=0.001011=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_FIRST_SUM,parent=98 -__rec=ctx,ref=107=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000636=0.000636=0.000636=0.000636=1=0.000636=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_FIRST_SUM.default,parent=107 -__rec=ctx,ref=108=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000632=0.000632=0.000632=0.000632=1=0.000632=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_GEN_LIN_RECUR,parent=98 -__rec=ctx,ref=109=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002962=0.002962=0.002962=0.002962=1=0.002962=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=109 -__rec=ctx,ref=110=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002956=0.002956=0.002956=0.002956=1=0.002956=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_1D,parent=98 -__rec=ctx,ref=111=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001069=0.001069=0.001069=0.001069=1=0.001069=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_1D.default,parent=111 -__rec=ctx,ref=112=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001064=0.001064=0.001064=0.001064=1=0.001064=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_HYDRO_2D,parent=98 -__rec=ctx,ref=113=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009841=0.009841=0.009841=0.009841=1=0.009841=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_HYDRO_2D.default,parent=113 -__rec=ctx,ref=114=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.009833=0.009833=0.009833=0.009833=1=0.009833=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_INT_PREDICT,parent=98 -__rec=ctx,ref=115=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005109=0.005109=0.005109=0.005109=1=0.005109=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_INT_PREDICT.default,parent=115 -__rec=ctx,ref=116=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.005102=0.005102=0.005102=0.005102=1=0.005102=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_PLANCKIAN,parent=98 -__rec=ctx,ref=117=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.015014=0.015014=0.015014=0.015014=1=0.015014=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_PLANCKIAN.default,parent=117 -__rec=ctx,ref=118=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.015008=0.015008=0.015008=0.015008=1=0.015008=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Lcals_TRIDIAG_ELIM,parent=98 -__rec=ctx,ref=119=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001314=0.001314=0.001314=0.001314=1=0.001314=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=120,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=119 -__rec=ctx,ref=120=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001310=0.001310=0.001310=0.001310=1=0.001310=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=121=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=12.122137=12.122137=12.122137=12.122137=1=12.122137=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_2MM,parent=121 -__rec=ctx,ref=122=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=3.456017=3.456017=3.456017=3.456017=1=3.456017=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_2MM.default,parent=122 -__rec=ctx,ref=123=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=3.456010=3.456010=3.456010=3.456010=1=3.456010=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_3MM,parent=121 -__rec=ctx,ref=124=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=5.351619=5.351619=5.351619=5.351619=1=5.351619=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_3MM.default,parent=124 -__rec=ctx,ref=125=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=5.351601=5.351601=5.351601=5.351601=1=5.351601=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ADI,parent=121 -__rec=ctx,ref=126=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.086265=0.086265=0.086265=0.086265=1=0.086265=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ADI.default,parent=126 -__rec=ctx,ref=127=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.086254=0.086254=0.086254=0.086254=1=0.086254=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_ATAX,parent=121 -__rec=ctx,ref=128=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002559=0.002559=0.002559=0.002559=1=0.002559=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_ATAX.default,parent=128 -__rec=ctx,ref=129=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002555=0.002555=0.002555=0.002555=1=0.002555=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FDTD_2D,parent=121 -__rec=ctx,ref=130=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.095378=0.095378=0.095378=0.095378=1=0.095378=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FDTD_2D.default,parent=130 -__rec=ctx,ref=131=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.095374=0.095374=0.095374=0.095374=1=0.095374=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_FLOYD_WARSHALL,parent=121 -__rec=ctx,ref=132=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.699198=0.699198=0.699198=0.699198=1=0.699198=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=132 -__rec=ctx,ref=133=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.699194=0.699194=0.699194=0.699194=1=0.699194=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMM,parent=121 -__rec=ctx,ref=134=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=2.256919=2.256919=2.256919=2.256919=1=2.256919=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMM.default,parent=134 -__rec=ctx,ref=135=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=2.256913=2.256913=2.256913=2.256913=1=2.256913=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GEMVER,parent=121 -__rec=ctx,ref=136=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003382=0.003382=0.003382=0.003382=1=0.003382=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GEMVER.default,parent=136 -__rec=ctx,ref=137=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003376=0.003376=0.003376=0.003376=1=0.003376=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_GESUMMV,parent=121 -__rec=ctx,ref=138=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001032=0.001032=0.001032=0.001032=1=0.001032=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_GESUMMV.default,parent=138 -__rec=ctx,ref=139=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001027=0.001027=0.001027=0.001027=1=0.001027=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_HEAT_3D,parent=121 -__rec=ctx,ref=140=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.067686=0.067686=0.067686=0.067686=1=0.067686=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_HEAT_3D.default,parent=140 -__rec=ctx,ref=141=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.067677=0.067677=0.067677=0.067677=1=0.067677=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_1D,parent=121 -__rec=ctx,ref=142=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.021538=0.021538=0.021538=0.021538=1=0.021538=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_1D.default,parent=142 -__rec=ctx,ref=143=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.021532=0.021532=0.021532=0.021532=1=0.021532=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_JACOBI_2D,parent=121 -__rec=ctx,ref=144=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.077991=0.077991=0.077991=0.077991=1=0.077991=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_JACOBI_2D.default,parent=144 -__rec=ctx,ref=145=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.077986=0.077986=0.077986=0.077986=1=0.077986=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=146,attr=59,data=Polybench_MVT,parent=121 -__rec=ctx,ref=146=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002511=0.002511=0.002511=0.002511=1=0.002511=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=147,attr=59,data=Polybench_MVT.default,parent=146 -__rec=ctx,ref=147=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002506=0.002506=0.002506=0.002506=1=0.002506=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream,parent=60 -__rec=ctx,ref=148=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.004101=0.004101=0.004101=0.004101=1=0.004101=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_ADD,parent=148 -__rec=ctx,ref=149=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000921=0.000921=0.000921=0.000921=1=0.000921=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_ADD.default,parent=149 -__rec=ctx,ref=150=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_COPY,parent=148 -__rec=ctx,ref=151=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000620=0.000620=0.000620=0.000620=1=0.000620=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_COPY.default,parent=151 -__rec=ctx,ref=152=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000616=0.000616=0.000616=0.000616=1=0.000616=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_DOT,parent=148 -__rec=ctx,ref=153=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001016=0.001016=0.001016=0.001016=1=0.001016=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_DOT.default,parent=153 -__rec=ctx,ref=154=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001013=0.001013=0.001013=0.001013=1=0.001013=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_MUL,parent=148 -__rec=ctx,ref=155=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000604=0.000604=0.000604=0.000604=1=0.000604=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_MUL.default,parent=155 -__rec=ctx,ref=156=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000600=0.000600=0.000600=0.000600=1=0.000600=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Stream_TRIAD,parent=148 -__rec=ctx,ref=157=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000924=0.000924=0.000924=0.000924=1=0.000924=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=158,attr=59,data=Stream_TRIAD.default,parent=157 -__rec=ctx,ref=158=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000920=0.000920=0.000920=0.000920=1=0.000920=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps,parent=60 -__rec=ctx,ref=159=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.087302=0.087302=0.087302=0.087302=1=0.087302=216000000.000000=79417584.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=159 -__rec=ctx,ref=160=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007851=0.007851=0.007851=0.007851=1=0.007851=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 -__rec=ctx,ref=161=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.007848=0.007848=0.007848=0.007848=1=0.007848=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_ENERGY,parent=159 -__rec=ctx,ref=162=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.013210=0.013210=0.013210=0.013210=1=0.013210=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_ENERGY.default,parent=162 -__rec=ctx,ref=163=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.013201=0.013201=0.013201=0.013201=1=0.013201=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_FIR,parent=159 -__rec=ctx,ref=164=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.012294=0.012294=0.012294=0.012294=1=0.012294=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_FIR.default,parent=164 -__rec=ctx,ref=165=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.012290=0.012290=0.012290=0.012290=1=0.012290=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_HALOEXCHANGE,parent=159 -__rec=ctx,ref=166=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000758=0.000758=0.000758=0.000758=1=0.000758=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_HALOEXCHANGE.default,parent=166 -__rec=ctx,ref=167=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000752=0.000752=0.000752=0.000752=1=0.000752=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=159 -__rec=ctx,ref=168=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000751=0.000751=0.000751=0.000751=1=0.000751=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=168 -__rec=ctx,ref=169=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000746=0.000746=0.000746=0.000746=1=0.000746=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_LTIMES,parent=159 -__rec=ctx,ref=170=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017924=0.017924=0.017924=0.017924=1=0.017924=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_LTIMES.default,parent=170 -__rec=ctx,ref=171=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017920=0.017920=0.017920=0.017920=1=0.017920=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_LTIMES_NOVIEW,parent=159 -__rec=ctx,ref=172=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017952=0.017952=0.017952=0.017952=1=0.017952=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=172 -__rec=ctx,ref=173=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.017948=0.017948=0.017948=0.017948=1=0.017948=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=159 -__rec=ctx,ref=174=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002991=0.002991=0.002991=0.002991=1=0.002991=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=174 -__rec=ctx,ref=175=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002986=0.002986=0.002986=0.002986=1=0.002986=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_PRESSURE,parent=159 -__rec=ctx,ref=176=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002368=0.002368=0.002368=0.002368=1=0.002368=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_PRESSURE.default,parent=176 -__rec=ctx,ref=177=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.002363=0.002363=0.002363=0.002363=1=0.002363=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_VOL3D,parent=159 -__rec=ctx,ref=178=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011172=0.011172=0.011172=0.011172=1=0.011172=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_VOL3D.default,parent=178 -__rec=ctx,ref=179=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.011166=0.011166=0.011166=0.011166=1=0.011166=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=180,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=180=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.003132=0.003132=0.003132=0.003132=1=0.003132=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Algorithm_SCAN,parent=180 -__rec=ctx,ref=181=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001028=0.001028=0.001028=0.001028=1=0.001028=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Algorithm_SCAN.default,parent=181 -__rec=ctx,ref=182=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001021=0.001021=0.001021=0.001021=1=0.001021=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=183,attr=59,data=Algorithm_REDUCE_SUM,parent=180 -__rec=ctx,ref=183=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001100=0.001100=0.001100=0.001100=1=0.001100=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=184,attr=59,data=Algorithm_REDUCE_SUM.default,parent=183 -__rec=ctx,ref=184=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.001095=0.001095=0.001095=0.001095=1=0.001095=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=185,attr=59,data=Algorithm_MEMSET,parent=180 -__rec=ctx,ref=185=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000369=0.000369=0.000369=0.000369=1=0.000369=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm_MEMSET.default,parent=185 -__rec=ctx,ref=186=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000366=0.000366=0.000366=0.000366=1=0.000366=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_MEMCPY,parent=180 -__rec=ctx,ref=187=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000622=0.000622=0.000622=0.000622=1=0.000622=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_MEMCPY.default,parent=187 -__rec=ctx,ref=188=224,attr=192=195=198=202=200=205=208=211=214=217=220=223,data=0.000618=0.000618=0.000618=0.000618=1=0.000618=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=300,attr=10,data=512,parent=3 -__rec=node,id=306,attr=8,data=spot.channels,parent=300 -__rec=node,id=305,attr=8,data=spot.options,parent=300 -__rec=node,id=303,attr=10,data=512,parent=1 -__rec=node,id=304,attr=8,data=spot.format.version,parent=303 -__rec=node,id=302,attr=8,data=spot.timeseries.metrics,parent=300 -__rec=node,id=301,attr=8,data=spot.metrics,parent=300 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=307,attr=301,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=308,attr=302,data=,parent=307 -__rec=node,id=309,attr=304,data=2,parent=308 -__rec=node,id=310,attr=305,data=,parent=309 -__rec=node,id=311,attr=306,data=regionprofile,parent=310 -__rec=node,id=225,attr=10,data=84,parent=3 -__rec=node,id=226,attr=8,data=adiak.subcategory,parent=225 -__rec=node,id=227,attr=10,data=84,parent=1 -__rec=node,id=228,attr=8,data=adiak.category,parent=227 -__rec=node,id=229,attr=8,data=adiak.type,parent=225 -__rec=node,id=230,attr=229,data=string,parent=3 -__rec=node,id=231,attr=228,data=2,parent=230 -__rec=node,id=232,attr=226,data=none,parent=231 -__rec=node,id=233,attr=10,data=1612,parent=232 -__rec=node,id=234,attr=8,data=variant,parent=233 -__rec=node,id=235,attr=8,data=omp_max_threads,parent=233 -__rec=node,id=236,attr=8,data=omp_version,parent=233 -__rec=node,id=237,attr=8,data=SizeMeaning,parent=233 -__rec=node,id=238,attr=229,data=double,parent=5 -__rec=node,id=239,attr=228,data=2,parent=238 -__rec=node,id=240,attr=226,data=none,parent=239 -__rec=node,id=241,attr=10,data=1612,parent=240 -__rec=node,id=242,attr=8,data=ProblemSizeRunParam,parent=241 -__rec=node,id=243,attr=8,data=machine_build,parent=233 -__rec=node,id=244,attr=8,data=systype_build,parent=233 -__rec=node,id=245,attr=8,data=Compiler_path_version,parent=233 -__rec=node,id=246,attr=8,data=compiler,parent=233 -__rec=node,id=247,attr=8,data=compiler_version,parent=233 -__rec=node,id=248,attr=8,data=rajaperf_compiler_options,parent=233 -__rec=node,id=249,attr=8,data=rajaperf_compiler,parent=233 -__rec=node,id=250,attr=8,data=cmake_exe_linker_flags,parent=233 -__rec=node,id=251,attr=8,data=cmake_cxx_flags,parent=233 -__rec=node,id=252,attr=8,data=cmake_build_type,parent=233 -__rec=node,id=253,attr=8,data=raja_version,parent=233 -__rec=node,id=254,attr=8,data=perfsuite_version,parent=233 -__rec=node,id=255,attr=226,data=host,parent=231 -__rec=node,id=256,attr=10,data=1612,parent=255 -__rec=node,id=257,attr=8,data=cluster,parent=256 -__rec=node,id=258,attr=229,data=set of string,parent=3 -__rec=node,id=259,attr=228,data=2,parent=258 -__rec=node,id=260,attr=226,data=runinfo,parent=259 -__rec=node,id=261,attr=10,data=1612,parent=260 -__rec=node,id=262,attr=8,data=cmdline,parent=261 -__rec=node,id=263,attr=229,data=set of path,parent=3 -__rec=node,id=264,attr=228,data=2,parent=263 -__rec=node,id=265,attr=226,data=binary,parent=264 -__rec=node,id=266,attr=10,data=1612,parent=265 -__rec=node,id=267,attr=8,data=libraries,parent=266 -__rec=node,id=268,attr=229,data=date,parent=2 -__rec=node,id=269,attr=228,data=2,parent=268 -__rec=node,id=270,attr=226,data=runinfo,parent=269 -__rec=node,id=271,attr=10,data=1612,parent=270 -__rec=node,id=272,attr=8,data=launchdate,parent=271 -__rec=node,id=273,attr=226,data=runinfo,parent=231 -__rec=node,id=274,attr=10,data=1612,parent=273 -__rec=node,id=275,attr=8,data=user,parent=274 -__rec=node,id=276,attr=8,data=cali.channel,parent=16 -__rec=node,id=277,attr=276,data=spot -__rec=node,id=278,attr=275,data=umdev,parent=277 -__rec=node,id=279,attr=272,data=1673516370,parent=278 -__rec=node,id=280,attr=267,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=279 -__rec=node,id=281,attr=262,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=280 -__rec=node,id=282,attr=257,data=ruby,parent=281 -__rec=node,id=283,attr=254,data=0.11.0,parent=282 -__rec=node,id=284,attr=253,data=2022.10.4,parent=283 -__rec=node,id=285,attr=252,data=RelWithDebInfo,parent=284 -__rec=node,id=286,attr=251,data= -Wall -Wextra ,parent=285 -__rec=node,id=287,attr=250,data=,parent=286 -__rec=node,id=288,attr=249,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=287 -__rec=node,id=289,attr=248,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=288 -__rec=node,id=290,attr=247,data=8.3.1,parent=289 -__rec=node,id=291,attr=246,data=g++-8.3.1,parent=290 -__rec=node,id=292,attr=245,data=gcc-8.3.1,parent=291 -__rec=node,id=293,attr=244,data=toss_3_x86_64_ib,parent=292 -__rec=node,id=294,attr=243,data=ruby961,parent=293 -__rec=node,id=295,attr=242,data=1.000000,parent=294 -__rec=node,id=296,attr=237,data=Factor,parent=295 -__rec=node,id=297,attr=236,data=4.5,parent=296 -__rec=node,id=298,attr=235,data=112,parent=297 -__rec=node,id=299,attr=234,data=Lambda_Seq,parent=298 -__rec=globals,ref=311=299 diff --git a/test/caliper-baselines/RAJA_OpenMP.cali b/test/caliper-baselines/RAJA_OpenMP.cali deleted file mode 100644 index da551292d..000000000 --- a/test/caliper-baselines/RAJA_OpenMP.cali +++ /dev/null @@ -1,400 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=197,attr=14,data=sec,parent=5 -__rec=node,id=198,attr=13,data=Min time/rank,parent=197 -__rec=node,id=199,attr=10,data=65,parent=198 -__rec=node,id=200,attr=8,data=min#inclusive#sum#time.duration,parent=199 -__rec=node,id=201,attr=13,data=Max time/rank,parent=197 -__rec=node,id=202,attr=10,data=65,parent=201 -__rec=node,id=203,attr=8,data=max#inclusive#sum#time.duration,parent=202 -__rec=node,id=204,attr=13,data=Avg time/rank,parent=197 -__rec=node,id=205,attr=10,data=65,parent=204 -__rec=node,id=206,attr=8,data=avg#inclusive#sum#time.duration,parent=205 -__rec=node,id=209,attr=10,data=193,parent=5 -__rec=node,id=210,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=209 -__rec=node,id=207,attr=10,data=193,parent=2 -__rec=node,id=208,attr=8,data=avg.count#inclusive#sum#time.duration,parent=207 -__rec=node,id=211,attr=13,data=Total time,parent=197 -__rec=node,id=212,attr=10,data=65,parent=211 -__rec=node,id=213,attr=8,data=sum#inclusive#sum#time.duration,parent=212 -__rec=node,id=214,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=215,attr=10,data=65,parent=214 -__rec=node,id=216,attr=8,data=any#any#max#Bytes/Rep,parent=215 -__rec=node,id=217,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=218,attr=10,data=65,parent=217 -__rec=node,id=219,attr=8,data=any#any#max#Flops/Rep,parent=218 -__rec=node,id=220,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=221,attr=10,data=65,parent=220 -__rec=node,id=222,attr=8,data=any#any#max#Iterations/Rep,parent=221 -__rec=node,id=223,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=224,attr=10,data=65,parent=223 -__rec=node,id=225,attr=8,data=any#any#max#Kernels/Rep,parent=224 -__rec=node,id=226,attr=13,data=ProblemSize,parent=5 -__rec=node,id=227,attr=10,data=65,parent=226 -__rec=node,id=228,attr=8,data=any#any#max#ProblemSize,parent=227 -__rec=node,id=229,attr=13,data=Reps,parent=5 -__rec=node,id=230,attr=10,data=65,parent=229 -__rec=node,id=231,attr=8,data=any#any#max#Reps,parent=230 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=232,attr=15,data=regionprofile -__rec=ctx,ref=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=61.785285=61.785285=61.785285=61.785285=1=61.785285=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=RAJA_OpenMP -__rec=ctx,ref=60=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=1.042290=1.042290=1.042290=1.042290=1=1.042290=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.152660=0.152660=0.152660=0.152660=1=0.152660=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000161=0.000161=0.000161=0.000161=1=0.000161=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000156=0.000156=0.000156=0.000156=1=0.000156=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000320=0.000320=0.000320=0.000320=1=0.000320=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000314=0.000314=0.000314=0.000314=1=0.000314=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=72=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000907=0.000907=0.000907=0.000907=1=0.000907=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=72 -__rec=ctx,ref=73=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000902=0.000902=0.000902=0.000902=1=0.000902=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=74=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000307=0.000307=0.000307=0.000307=1=0.000307=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INIT3.default,parent=74 -__rec=ctx,ref=75=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000300=0.000300=0.000300=0.000300=1=0.000300=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=76=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000217=0.000217=0.000217=0.000217=1=0.000217=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT_VIEW1D.default,parent=76 -__rec=ctx,ref=77=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000212=0.000212=0.000212=0.000212=1=0.000212=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=78=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000200=0.000200=0.000200=0.000200=1=0.000200=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=78 -__rec=ctx,ref=79=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000194=0.000194=0.000194=0.000194=1=0.000194=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=80=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.025423=0.025423=0.025423=0.025423=1=0.025423=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=80 -__rec=ctx,ref=81=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.025416=0.025416=0.025416=0.025416=1=0.025416=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=82=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000334=0.000334=0.000334=0.000334=1=0.000334=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MULADDSUB.default,parent=82 -__rec=ctx,ref=83=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000329=0.000329=0.000329=0.000329=1=0.000329=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=84=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000200=0.000200=0.000200=0.000200=1=0.000200=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_NESTED_INIT.default,parent=84 -__rec=ctx,ref=85=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000195=0.000195=0.000195=0.000195=1=0.000195=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=86=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.116482=0.116482=0.116482=0.116482=1=0.116482=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_PI_ATOMIC.default,parent=86 -__rec=ctx,ref=87=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.116478=0.116478=0.116478=0.116478=1=0.116478=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=88=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000341=0.000341=0.000341=0.000341=1=0.000341=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_REDUCE.default,parent=88 -__rec=ctx,ref=89=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000335=0.000335=0.000335=0.000335=1=0.000335=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=90=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.005569=0.005569=0.005569=0.005569=1=0.005569=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_REDUCE3_INT.default,parent=90 -__rec=ctx,ref=91=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.005564=0.005564=0.005564=0.005564=1=0.005564=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=92=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001413=0.001413=0.001413=0.001413=1=0.001413=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE_STRUCT.default,parent=92 -__rec=ctx,ref=93=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001409=0.001409=0.001409=0.001409=1=0.001409=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=94=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000356=0.000356=0.000356=0.000356=1=0.000356=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_TRAP_INT.default,parent=94 -__rec=ctx,ref=95=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000351=0.000351=0.000351=0.000351=1=0.000351=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=96=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.016915=0.016915=0.016915=0.016915=1=0.016915=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Lcals_DIFF_PREDICT,parent=96 -__rec=ctx,ref=97=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.011661=0.011661=0.011661=0.011661=1=0.011661=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals_DIFF_PREDICT.default,parent=97 -__rec=ctx,ref=98=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.011650=0.011650=0.011650=0.011650=1=0.011650=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_EOS,parent=96 -__rec=ctx,ref=99=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000291=0.000291=0.000291=0.000291=1=0.000291=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_EOS.default,parent=99 -__rec=ctx,ref=100=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000286=0.000286=0.000286=0.000286=1=0.000286=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_FIRST_DIFF,parent=96 -__rec=ctx,ref=101=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_FIRST_DIFF.default,parent=101 -__rec=ctx,ref=102=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000346=0.000346=0.000346=0.000346=1=0.000346=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_MIN,parent=96 -__rec=ctx,ref=103=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000481=0.000481=0.000481=0.000481=1=0.000481=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_MIN.default,parent=103 -__rec=ctx,ref=104=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000476=0.000476=0.000476=0.000476=1=0.000476=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_SUM,parent=96 -__rec=ctx,ref=105=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000418=0.000418=0.000418=0.000418=1=0.000418=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_SUM.default,parent=105 -__rec=ctx,ref=106=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000414=0.000414=0.000414=0.000414=1=0.000414=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_GEN_LIN_RECUR,parent=96 -__rec=ctx,ref=107=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000783=0.000783=0.000783=0.000783=1=0.000783=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=107 -__rec=ctx,ref=108=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000778=0.000778=0.000778=0.000778=1=0.000778=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_HYDRO_1D,parent=96 -__rec=ctx,ref=109=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000303=0.000303=0.000303=0.000303=1=0.000303=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_HYDRO_1D.default,parent=109 -__rec=ctx,ref=110=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000296=0.000296=0.000296=0.000296=1=0.000296=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_2D,parent=96 -__rec=ctx,ref=111=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000692=0.000692=0.000692=0.000692=1=0.000692=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_2D.default,parent=111 -__rec=ctx,ref=112=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000680=0.000680=0.000680=0.000680=1=0.000680=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_INT_PREDICT,parent=96 -__rec=ctx,ref=113=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001182=0.001182=0.001182=0.001182=1=0.001182=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_INT_PREDICT.default,parent=113 -__rec=ctx,ref=114=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001175=0.001175=0.001175=0.001175=1=0.001175=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_PLANCKIAN,parent=96 -__rec=ctx,ref=115=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000393=0.000393=0.000393=0.000393=1=0.000393=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_PLANCKIAN.default,parent=115 -__rec=ctx,ref=116=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000386=0.000386=0.000386=0.000386=1=0.000386=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_TRIDIAG_ELIM,parent=96 -__rec=ctx,ref=117=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000309=0.000309=0.000309=0.000309=1=0.000309=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=117 -__rec=ctx,ref=118=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000303=0.000303=0.000303=0.000303=1=0.000303=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=119=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.773181=0.773181=0.773181=0.773181=1=0.773181=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=120,attr=59,data=Polybench_2MM,parent=119 -__rec=ctx,ref=120=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.175900=0.175900=0.175900=0.175900=1=0.175900=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench_2MM.default,parent=120 -__rec=ctx,ref=121=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.175890=0.175890=0.175890=0.175890=1=0.175890=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_3MM,parent=119 -__rec=ctx,ref=122=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.273619=0.273619=0.273619=0.273619=1=0.273619=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_3MM.default,parent=122 -__rec=ctx,ref=123=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.273598=0.273598=0.273598=0.273598=1=0.273598=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_ADI,parent=119 -__rec=ctx,ref=124=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.125600=0.125600=0.125600=0.125600=1=0.125600=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_ADI.default,parent=124 -__rec=ctx,ref=125=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.125594=0.125594=0.125594=0.125594=1=0.125594=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ATAX,parent=119 -__rec=ctx,ref=126=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000537=0.000537=0.000537=0.000537=1=0.000537=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ATAX.default,parent=126 -__rec=ctx,ref=127=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000533=0.000533=0.000533=0.000533=1=0.000533=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_FDTD_2D,parent=119 -__rec=ctx,ref=128=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010653=0.010653=0.010653=0.010653=1=0.010653=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_FDTD_2D.default,parent=128 -__rec=ctx,ref=129=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010646=0.010646=0.010646=0.010646=1=0.010646=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FLOYD_WARSHALL,parent=119 -__rec=ctx,ref=130=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.066670=0.066670=0.066670=0.066670=1=0.066670=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=130 -__rec=ctx,ref=131=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.066664=0.066664=0.066664=0.066664=1=0.066664=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_GEMM,parent=119 -__rec=ctx,ref=132=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.099128=0.099128=0.099128=0.099128=1=0.099128=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_GEMM.default,parent=132 -__rec=ctx,ref=133=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.099112=0.099112=0.099112=0.099112=1=0.099112=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMVER,parent=119 -__rec=ctx,ref=134=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000768=0.000768=0.000768=0.000768=1=0.000768=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMVER.default,parent=134 -__rec=ctx,ref=135=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000758=0.000758=0.000758=0.000758=1=0.000758=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GESUMMV,parent=119 -__rec=ctx,ref=136=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000436=0.000436=0.000436=0.000436=1=0.000436=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GESUMMV.default,parent=136 -__rec=ctx,ref=137=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000432=0.000432=0.000432=0.000432=1=0.000432=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_HEAT_3D,parent=119 -__rec=ctx,ref=138=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010680=0.010680=0.010680=0.010680=1=0.010680=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_HEAT_3D.default,parent=138 -__rec=ctx,ref=139=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.010673=0.010673=0.010673=0.010673=1=0.010673=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_JACOBI_1D,parent=119 -__rec=ctx,ref=140=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.002128=0.002128=0.002128=0.002128=1=0.002128=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_JACOBI_1D.default,parent=140 -__rec=ctx,ref=141=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.002122=0.002122=0.002122=0.002122=1=0.002122=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_2D,parent=119 -__rec=ctx,ref=142=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.006652=0.006652=0.006652=0.006652=1=0.006652=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_2D.default,parent=142 -__rec=ctx,ref=143=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.006645=0.006645=0.006645=0.006645=1=0.006645=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_MVT,parent=119 -__rec=ctx,ref=144=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000353=0.000353=0.000353=0.000353=1=0.000353=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_MVT.default,parent=144 -__rec=ctx,ref=145=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000347=0.000347=0.000347=0.000347=1=0.000347=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=146,attr=59,data=Stream,parent=60 -__rec=ctx,ref=146=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001987=0.001987=0.001987=0.001987=1=0.001987=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=147,attr=59,data=Stream_ADD,parent=146 -__rec=ctx,ref=147=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000368=0.000368=0.000368=0.000368=1=0.000368=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream_ADD.default,parent=147 -__rec=ctx,ref=148=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000361=0.000361=0.000361=0.000361=1=0.000361=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_COPY,parent=146 -__rec=ctx,ref=149=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000357=0.000357=0.000357=0.000357=1=0.000357=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_COPY.default,parent=149 -__rec=ctx,ref=150=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000352=0.000352=0.000352=0.000352=1=0.000352=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_DOT,parent=146 -__rec=ctx,ref=151=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000563=0.000563=0.000563=0.000563=1=0.000563=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_DOT.default,parent=151 -__rec=ctx,ref=152=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000558=0.000558=0.000558=0.000558=1=0.000558=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_MUL,parent=146 -__rec=ctx,ref=153=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000360=0.000360=0.000360=0.000360=1=0.000360=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_MUL.default,parent=153 -__rec=ctx,ref=154=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000354=0.000354=0.000354=0.000354=1=0.000354=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_TRIAD,parent=146 -__rec=ctx,ref=155=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000319=0.000319=0.000319=0.000319=1=0.000319=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_TRIAD.default,parent=155 -__rec=ctx,ref=156=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000313=0.000313=0.000313=0.000313=1=0.000313=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Apps,parent=60 -__rec=ctx,ref=157=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021992=0.021992=0.021992=0.021992=1=0.021992=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=158,attr=59,data=Apps_CONVECTION3DPA,parent=157 -__rec=ctx,ref=158=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000647=0.000647=0.000647=0.000647=1=0.000647=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps_CONVECTION3DPA.default,parent=158 -__rec=ctx,ref=159=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000639=0.000639=0.000639=0.000639=1=0.000639=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=157 -__rec=ctx,ref=160=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000983=0.000983=0.000983=0.000983=1=0.000983=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 -__rec=ctx,ref=161=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000976=0.000976=0.000976=0.000976=1=0.000976=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_DIFFUSION3DPA,parent=157 -__rec=ctx,ref=162=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000853=0.000853=0.000853=0.000853=1=0.000853=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_DIFFUSION3DPA.default,parent=162 -__rec=ctx,ref=163=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000846=0.000846=0.000846=0.000846=1=0.000846=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_ENERGY,parent=157 -__rec=ctx,ref=164=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000471=0.000471=0.000471=0.000471=1=0.000471=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_ENERGY.default,parent=164 -__rec=ctx,ref=165=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000462=0.000462=0.000462=0.000462=1=0.000462=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_FIR,parent=157 -__rec=ctx,ref=166=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000371=0.000371=0.000371=0.000371=1=0.000371=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_FIR.default,parent=166 -__rec=ctx,ref=167=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000365=0.000365=0.000365=0.000365=1=0.000365=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE,parent=157 -__rec=ctx,ref=168=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007077=0.007077=0.007077=0.007077=1=0.007077=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE.default,parent=168 -__rec=ctx,ref=169=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007069=0.007069=0.007069=0.007069=1=0.007069=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=157 -__rec=ctx,ref=170=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007084=0.007084=0.007084=0.007084=1=0.007084=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=170 -__rec=ctx,ref=171=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.007078=0.007078=0.007078=0.007078=1=0.007078=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_LTIMES,parent=157 -__rec=ctx,ref=172=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000586=0.000586=0.000586=0.000586=1=0.000586=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_LTIMES.default,parent=172 -__rec=ctx,ref=173=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000581=0.000581=0.000581=0.000581=1=0.000581=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_LTIMES_NOVIEW,parent=157 -__rec=ctx,ref=174=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000614=0.000614=0.000614=0.000614=1=0.000614=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=174 -__rec=ctx,ref=175=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000608=0.000608=0.000608=0.000608=1=0.000608=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_MASS3DPA,parent=157 -__rec=ctx,ref=176=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000490=0.000490=0.000490=0.000490=1=0.000490=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_MASS3DPA.default,parent=176 -__rec=ctx,ref=177=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000484=0.000484=0.000484=0.000484=1=0.000484=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=157 -__rec=ctx,ref=178=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001086=0.001086=0.001086=0.001086=1=0.001086=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=178 -__rec=ctx,ref=179=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001079=0.001079=0.001079=0.001079=1=0.001079=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=180,attr=59,data=Apps_PRESSURE,parent=157 -__rec=ctx,ref=180=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000752=0.000752=0.000752=0.000752=1=0.000752=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Apps_PRESSURE.default,parent=180 -__rec=ctx,ref=181=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000745=0.000745=0.000745=0.000745=1=0.000745=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Apps_VOL3D,parent=157 -__rec=ctx,ref=182=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000923=0.000923=0.000923=0.000923=1=0.000923=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=183,attr=59,data=Apps_VOL3D.default,parent=182 -__rec=ctx,ref=183=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000912=0.000912=0.000912=0.000912=1=0.000912=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=184,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=184=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.075052=0.075052=0.075052=0.075052=1=0.075052=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=185,attr=59,data=Algorithm_SCAN,parent=184 -__rec=ctx,ref=185=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001310=0.001310=0.001310=0.001310=1=0.001310=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm_SCAN.default,parent=185 -__rec=ctx,ref=186=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.001305=0.001305=0.001305=0.001305=1=0.001305=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_SORT,parent=184 -__rec=ctx,ref=187=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021546=0.021546=0.021546=0.021546=1=0.021546=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_SORT.default,parent=187 -__rec=ctx,ref=188=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.021540=0.021540=0.021540=0.021540=1=0.021540=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=189,attr=59,data=Algorithm_SORTPAIRS,parent=184 -__rec=ctx,ref=189=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.022820=0.022820=0.022820=0.022820=1=0.022820=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=190,attr=59,data=Algorithm_SORTPAIRS.default,parent=189 -__rec=ctx,ref=190=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.022812=0.022812=0.022812=0.022812=1=0.022812=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=191,attr=59,data=Algorithm_REDUCE_SUM,parent=184 -__rec=ctx,ref=191=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000437=0.000437=0.000437=0.000437=1=0.000437=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=192,attr=59,data=Algorithm_REDUCE_SUM.default,parent=191 -__rec=ctx,ref=192=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.000430=0.000430=0.000430=0.000430=1=0.000430=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=193,attr=59,data=Algorithm_MEMSET,parent=184 -__rec=ctx,ref=193=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014469=0.014469=0.014469=0.014469=1=0.014469=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=194,attr=59,data=Algorithm_MEMSET.default,parent=193 -__rec=ctx,ref=194=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014465=0.014465=0.014465=0.014465=1=0.014465=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=195,attr=59,data=Algorithm_MEMCPY,parent=184 -__rec=ctx,ref=195=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014445=0.014445=0.014445=0.014445=1=0.014445=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=196,attr=59,data=Algorithm_MEMCPY.default,parent=195 -__rec=ctx,ref=196=232,attr=200=203=206=210=208=213=216=219=222=225=228=231,data=0.014439=0.014439=0.014439=0.014439=1=0.014439=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=308,attr=10,data=512,parent=3 -__rec=node,id=314,attr=8,data=spot.channels,parent=308 -__rec=node,id=313,attr=8,data=spot.options,parent=308 -__rec=node,id=311,attr=10,data=512,parent=1 -__rec=node,id=312,attr=8,data=spot.format.version,parent=311 -__rec=node,id=310,attr=8,data=spot.timeseries.metrics,parent=308 -__rec=node,id=309,attr=8,data=spot.metrics,parent=308 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=315,attr=309,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=316,attr=310,data=,parent=315 -__rec=node,id=317,attr=312,data=2,parent=316 -__rec=node,id=318,attr=313,data=,parent=317 -__rec=node,id=319,attr=314,data=regionprofile,parent=318 -__rec=node,id=233,attr=10,data=84,parent=3 -__rec=node,id=234,attr=8,data=adiak.subcategory,parent=233 -__rec=node,id=235,attr=10,data=84,parent=1 -__rec=node,id=236,attr=8,data=adiak.category,parent=235 -__rec=node,id=237,attr=8,data=adiak.type,parent=233 -__rec=node,id=238,attr=237,data=string,parent=3 -__rec=node,id=239,attr=236,data=2,parent=238 -__rec=node,id=240,attr=234,data=none,parent=239 -__rec=node,id=241,attr=10,data=1612,parent=240 -__rec=node,id=242,attr=8,data=variant,parent=241 -__rec=node,id=243,attr=8,data=omp_max_threads,parent=241 -__rec=node,id=244,attr=8,data=omp_version,parent=241 -__rec=node,id=245,attr=8,data=SizeMeaning,parent=241 -__rec=node,id=246,attr=237,data=double,parent=5 -__rec=node,id=247,attr=236,data=2,parent=246 -__rec=node,id=248,attr=234,data=none,parent=247 -__rec=node,id=249,attr=10,data=1612,parent=248 -__rec=node,id=250,attr=8,data=ProblemSizeRunParam,parent=249 -__rec=node,id=251,attr=8,data=machine_build,parent=241 -__rec=node,id=252,attr=8,data=systype_build,parent=241 -__rec=node,id=253,attr=8,data=Compiler_path_version,parent=241 -__rec=node,id=254,attr=8,data=compiler,parent=241 -__rec=node,id=255,attr=8,data=compiler_version,parent=241 -__rec=node,id=256,attr=8,data=rajaperf_compiler_options,parent=241 -__rec=node,id=257,attr=8,data=rajaperf_compiler,parent=241 -__rec=node,id=258,attr=8,data=cmake_exe_linker_flags,parent=241 -__rec=node,id=259,attr=8,data=cmake_cxx_flags,parent=241 -__rec=node,id=260,attr=8,data=cmake_build_type,parent=241 -__rec=node,id=261,attr=8,data=raja_version,parent=241 -__rec=node,id=262,attr=8,data=perfsuite_version,parent=241 -__rec=node,id=263,attr=234,data=host,parent=239 -__rec=node,id=264,attr=10,data=1612,parent=263 -__rec=node,id=265,attr=8,data=cluster,parent=264 -__rec=node,id=266,attr=237,data=set of string,parent=3 -__rec=node,id=267,attr=236,data=2,parent=266 -__rec=node,id=268,attr=234,data=runinfo,parent=267 -__rec=node,id=269,attr=10,data=1612,parent=268 -__rec=node,id=270,attr=8,data=cmdline,parent=269 -__rec=node,id=271,attr=237,data=set of path,parent=3 -__rec=node,id=272,attr=236,data=2,parent=271 -__rec=node,id=273,attr=234,data=binary,parent=272 -__rec=node,id=274,attr=10,data=1612,parent=273 -__rec=node,id=275,attr=8,data=libraries,parent=274 -__rec=node,id=276,attr=237,data=date,parent=2 -__rec=node,id=277,attr=236,data=2,parent=276 -__rec=node,id=278,attr=234,data=runinfo,parent=277 -__rec=node,id=279,attr=10,data=1612,parent=278 -__rec=node,id=280,attr=8,data=launchdate,parent=279 -__rec=node,id=281,attr=234,data=runinfo,parent=239 -__rec=node,id=282,attr=10,data=1612,parent=281 -__rec=node,id=283,attr=8,data=user,parent=282 -__rec=node,id=284,attr=8,data=cali.channel,parent=16 -__rec=node,id=285,attr=284,data=spot -__rec=node,id=286,attr=283,data=umdev,parent=285 -__rec=node,id=287,attr=280,data=1673516370,parent=286 -__rec=node,id=288,attr=275,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=287 -__rec=node,id=289,attr=270,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=288 -__rec=node,id=290,attr=265,data=ruby,parent=289 -__rec=node,id=291,attr=262,data=0.11.0,parent=290 -__rec=node,id=292,attr=261,data=2022.10.4,parent=291 -__rec=node,id=293,attr=260,data=RelWithDebInfo,parent=292 -__rec=node,id=294,attr=259,data= -Wall -Wextra ,parent=293 -__rec=node,id=295,attr=258,data=,parent=294 -__rec=node,id=296,attr=257,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=295 -__rec=node,id=297,attr=256,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=296 -__rec=node,id=298,attr=255,data=8.3.1,parent=297 -__rec=node,id=299,attr=254,data=g++-8.3.1,parent=298 -__rec=node,id=300,attr=253,data=gcc-8.3.1,parent=299 -__rec=node,id=301,attr=252,data=toss_3_x86_64_ib,parent=300 -__rec=node,id=302,attr=251,data=ruby961,parent=301 -__rec=node,id=303,attr=250,data=1.000000,parent=302 -__rec=node,id=304,attr=245,data=Factor,parent=303 -__rec=node,id=305,attr=244,data=4.5,parent=304 -__rec=node,id=306,attr=243,data=112,parent=305 -__rec=node,id=307,attr=242,data=RAJA_OpenMP,parent=306 -__rec=globals,ref=319=307 diff --git a/test/caliper-baselines/RAJA_Seq.cali b/test/caliper-baselines/RAJA_Seq.cali deleted file mode 100644 index 2fa630016..000000000 --- a/test/caliper-baselines/RAJA_Seq.cali +++ /dev/null @@ -1,404 +0,0 @@ -__rec=node,id=12,attr=10,data=64,parent=3 -__rec=node,id=13,attr=8,data=attribute.alias,parent=12 -__rec=node,id=14,attr=8,data=attribute.unit,parent=12 -__rec=node,id=199,attr=14,data=sec,parent=5 -__rec=node,id=200,attr=13,data=Min time/rank,parent=199 -__rec=node,id=201,attr=10,data=65,parent=200 -__rec=node,id=202,attr=8,data=min#inclusive#sum#time.duration,parent=201 -__rec=node,id=203,attr=13,data=Max time/rank,parent=199 -__rec=node,id=204,attr=10,data=65,parent=203 -__rec=node,id=205,attr=8,data=max#inclusive#sum#time.duration,parent=204 -__rec=node,id=206,attr=13,data=Avg time/rank,parent=199 -__rec=node,id=207,attr=10,data=65,parent=206 -__rec=node,id=208,attr=8,data=avg#inclusive#sum#time.duration,parent=207 -__rec=node,id=211,attr=10,data=193,parent=5 -__rec=node,id=212,attr=8,data=avg.sum#inclusive#sum#time.duration,parent=211 -__rec=node,id=209,attr=10,data=193,parent=2 -__rec=node,id=210,attr=8,data=avg.count#inclusive#sum#time.duration,parent=209 -__rec=node,id=213,attr=13,data=Total time,parent=199 -__rec=node,id=214,attr=10,data=65,parent=213 -__rec=node,id=215,attr=8,data=sum#inclusive#sum#time.duration,parent=214 -__rec=node,id=216,attr=13,data=Bytes/Rep,parent=5 -__rec=node,id=217,attr=10,data=65,parent=216 -__rec=node,id=218,attr=8,data=any#any#max#Bytes/Rep,parent=217 -__rec=node,id=219,attr=13,data=Flops/Rep,parent=5 -__rec=node,id=220,attr=10,data=65,parent=219 -__rec=node,id=221,attr=8,data=any#any#max#Flops/Rep,parent=220 -__rec=node,id=222,attr=13,data=Iterations/Rep,parent=5 -__rec=node,id=223,attr=10,data=65,parent=222 -__rec=node,id=224,attr=8,data=any#any#max#Iterations/Rep,parent=223 -__rec=node,id=225,attr=13,data=Kernels/Rep,parent=5 -__rec=node,id=226,attr=10,data=65,parent=225 -__rec=node,id=227,attr=8,data=any#any#max#Kernels/Rep,parent=226 -__rec=node,id=228,attr=13,data=ProblemSize,parent=5 -__rec=node,id=229,attr=10,data=65,parent=228 -__rec=node,id=230,attr=8,data=any#any#max#ProblemSize,parent=229 -__rec=node,id=231,attr=13,data=Reps,parent=5 -__rec=node,id=232,attr=10,data=65,parent=231 -__rec=node,id=233,attr=8,data=any#any#max#Reps,parent=232 -__rec=node,id=15,attr=8,data=spot.channel,parent=12 -__rec=node,id=234,attr=15,data=regionprofile -__rec=ctx,ref=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=49.406754=49.406754=49.406754=49.406754=1=49.406754=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=58,attr=10,data=276,parent=3 -__rec=node,id=59,attr=8,data=region,parent=58 -__rec=node,id=60,attr=59,data=RAJA_Seq -__rec=ctx,ref=60=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=13.351111=13.351111=13.351111=13.351111=1=13.351111=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1103022.000000=1.000000 -__rec=node,id=65,attr=59,data=Basic,parent=60 -__rec=ctx,ref=65=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.646215=0.646215=0.646215=0.646215=1=0.646215=40000000.000000=2048385024.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=66,attr=59,data=Basic_DAXPY,parent=65 -__rec=ctx,ref=66=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000781=0.000781=0.000781=0.000781=1=0.000781=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=67,attr=59,data=Basic_DAXPY.default,parent=66 -__rec=ctx,ref=67=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000777=0.000777=0.000777=0.000777=1=0.000777=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=68,attr=59,data=Basic_DAXPY_ATOMIC,parent=65 -__rec=ctx,ref=68=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000818=0.000818=0.000818=0.000818=1=0.000818=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=69,attr=59,data=Basic_DAXPY_ATOMIC.default,parent=68 -__rec=ctx,ref=69=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000814=0.000814=0.000814=0.000814=1=0.000814=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=70,attr=59,data=Basic_IF_QUAD,parent=65 -__rec=ctx,ref=70=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006425=0.006425=0.006425=0.006425=1=0.006425=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=71,attr=59,data=Basic_IF_QUAD.default,parent=70 -__rec=ctx,ref=71=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006420=0.006420=0.006420=0.006420=1=0.006420=40000000.000000=11000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=72,attr=59,data=Basic_INDEXLIST_3LOOP,parent=65 -__rec=ctx,ref=72=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.004593=0.004593=0.004593=0.004593=1=0.004593=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=73,attr=59,data=Basic_INDEXLIST_3LOOP.default,parent=72 -__rec=ctx,ref=73=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.004590=0.004590=0.004590=0.004590=1=0.004590=26000028.000000=0.000000=3000001.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=74,attr=59,data=Basic_INIT3,parent=65 -__rec=ctx,ref=74=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001882=0.001882=0.001882=0.001882=1=0.001882=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=75,attr=59,data=Basic_INIT3.default,parent=74 -__rec=ctx,ref=75=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001877=0.001877=0.001877=0.001877=1=0.001877=40000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=76,attr=59,data=Basic_INIT_VIEW1D,parent=65 -__rec=ctx,ref=76=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000516=0.000516=0.000516=0.000516=1=0.000516=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=77,attr=59,data=Basic_INIT_VIEW1D.default,parent=76 -__rec=ctx,ref=77=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000513=0.000513=0.000513=0.000513=1=0.000513=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=78,attr=59,data=Basic_INIT_VIEW1D_OFFSET,parent=65 -__rec=ctx,ref=78=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000545=0.000545=0.000545=0.000545=1=0.000545=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=79,attr=59,data=Basic_INIT_VIEW1D_OFFSET.default,parent=78 -__rec=ctx,ref=79=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000542=0.000542=0.000542=0.000542=1=0.000542=8000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=80,attr=59,data=Basic_MAT_MAT_SHARED,parent=65 -__rec=ctx,ref=80=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.614849=0.614849=0.614849=0.614849=1=0.614849=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=81,attr=59,data=Basic_MAT_MAT_SHARED.default,parent=80 -__rec=ctx,ref=81=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.614844=0.614844=0.614844=0.614844=1=0.614844=16000000.000000=2048385024.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=82,attr=59,data=Basic_MULADDSUB,parent=65 -__rec=ctx,ref=82=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001900=0.001900=0.001900=0.001900=1=0.001900=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=83,attr=59,data=Basic_MULADDSUB.default,parent=82 -__rec=ctx,ref=83=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001893=0.001893=0.001893=0.001893=1=0.001893=40000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=84,attr=59,data=Basic_NESTED_INIT,parent=65 -__rec=ctx,ref=84=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000838=0.000838=0.000838=0.000838=1=0.000838=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=85,attr=59,data=Basic_NESTED_INIT.default,parent=84 -__rec=ctx,ref=85=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000832=0.000832=0.000832=0.000832=1=0.000832=8000000.000000=3000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=86,attr=59,data=Basic_PI_ATOMIC,parent=65 -__rec=ctx,ref=86=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002259=0.002259=0.002259=0.002259=1=0.002259=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=87,attr=59,data=Basic_PI_ATOMIC.default,parent=86 -__rec=ctx,ref=87=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002256=0.002256=0.002256=0.002256=1=0.002256=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=88,attr=59,data=Basic_PI_REDUCE,parent=65 -__rec=ctx,ref=88=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002697=0.002697=0.002697=0.002697=1=0.002697=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=89,attr=59,data=Basic_PI_REDUCE.default,parent=88 -__rec=ctx,ref=89=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002694=0.002694=0.002694=0.002694=1=0.002694=16.000000=6000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=90,attr=59,data=Basic_REDUCE3_INT,parent=65 -__rec=ctx,ref=90=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000823=0.000823=0.000823=0.000823=1=0.000823=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=91,attr=59,data=Basic_REDUCE3_INT.default,parent=90 -__rec=ctx,ref=91=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000819=0.000819=0.000819=0.000819=1=0.000819=4000024.000000=1000001.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=92,attr=59,data=Basic_REDUCE_STRUCT,parent=65 -__rec=ctx,ref=92=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001977=0.001977=0.001977=0.001977=1=0.001977=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=93,attr=59,data=Basic_REDUCE_STRUCT.default,parent=92 -__rec=ctx,ref=93=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001974=0.001974=0.001974=0.001974=1=0.001974=16000048.000000=2000002.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=94,attr=59,data=Basic_TRAP_INT,parent=65 -__rec=ctx,ref=94=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005270=0.005270=0.005270=0.005270=1=0.005270=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=95,attr=59,data=Basic_TRAP_INT.default,parent=94 -__rec=ctx,ref=95=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005266=0.005266=0.005266=0.005266=1=0.005266=16.000000=10000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=96,attr=59,data=Lcals,parent=60 -__rec=ctx,ref=96=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.045281=0.045281=0.045281=0.045281=1=0.045281=160000000.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=97,attr=59,data=Lcals_DIFF_PREDICT,parent=96 -__rec=ctx,ref=97=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006713=0.006713=0.006713=0.006713=1=0.006713=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=98,attr=59,data=Lcals_DIFF_PREDICT.default,parent=97 -__rec=ctx,ref=98=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.006708=0.006708=0.006708=0.006708=1=0.006708=160000000.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=99,attr=59,data=Lcals_EOS,parent=96 -__rec=ctx,ref=99=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001515=0.001515=0.001515=0.001515=1=0.001515=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=100,attr=59,data=Lcals_EOS.default,parent=99 -__rec=ctx,ref=100=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001511=0.001511=0.001511=0.001511=1=0.001511=32000056.000000=16000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=101,attr=59,data=Lcals_FIRST_DIFF,parent=96 -__rec=ctx,ref=101=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000603=0.000603=0.000603=0.000603=1=0.000603=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=102,attr=59,data=Lcals_FIRST_DIFF.default,parent=101 -__rec=ctx,ref=102=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000599=0.000599=0.000599=0.000599=1=0.000599=16000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=103,attr=59,data=Lcals_FIRST_MIN,parent=96 -__rec=ctx,ref=103=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001100=0.001100=0.001100=0.001100=1=0.001100=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=104,attr=59,data=Lcals_FIRST_MIN.default,parent=103 -__rec=ctx,ref=104=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001096=0.001096=0.001096=0.001096=1=0.001096=8000032.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=105,attr=59,data=Lcals_FIRST_SUM,parent=96 -__rec=ctx,ref=105=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000615=0.000615=0.000615=0.000615=1=0.000615=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=106,attr=59,data=Lcals_FIRST_SUM.default,parent=105 -__rec=ctx,ref=106=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000609=0.000609=0.000609=0.000609=1=0.000609=15999992.000000=999999.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=107,attr=59,data=Lcals_GEN_LIN_RECUR,parent=96 -__rec=ctx,ref=107=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002784=0.002784=0.002784=0.002784=1=0.002784=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=108,attr=59,data=Lcals_GEN_LIN_RECUR.default,parent=107 -__rec=ctx,ref=108=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002780=0.002780=0.002780=0.002780=1=0.002780=80000000.000000=6000000.000000=1000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=109,attr=59,data=Lcals_HYDRO_1D,parent=96 -__rec=ctx,ref=109=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000963=0.000963=0.000963=0.000963=1=0.000963=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=110,attr=59,data=Lcals_HYDRO_1D.default,parent=109 -__rec=ctx,ref=110=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000958=0.000958=0.000958=0.000958=1=0.000958=24000008.000000=5000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=111,attr=59,data=Lcals_HYDRO_2D,parent=96 -__rec=ctx,ref=111=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.009777=0.009777=0.009777=0.009777=1=0.009777=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=112,attr=59,data=Lcals_HYDRO_2D.default,parent=111 -__rec=ctx,ref=112=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.009771=0.009771=0.009771=0.009771=1=0.009771=143680320.000000=43824176.000000=3000000.000000=3.000000=1000000.000000=1.000000 -__rec=node,id=113,attr=59,data=Lcals_INT_PREDICT,parent=96 -__rec=ctx,ref=113=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005167=0.005167=0.005167=0.005167=1=0.005167=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=114,attr=59,data=Lcals_INT_PREDICT.default,parent=113 -__rec=ctx,ref=114=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005158=0.005158=0.005158=0.005158=1=0.005158=88000000.000000=17000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=115,attr=59,data=Lcals_PLANCKIAN,parent=96 -__rec=ctx,ref=115=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014707=0.014707=0.014707=0.014707=1=0.014707=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=116,attr=59,data=Lcals_PLANCKIAN.default,parent=115 -__rec=ctx,ref=116=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014700=0.014700=0.014700=0.014700=1=0.014700=40000000.000000=4000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=117,attr=59,data=Lcals_TRIDIAG_ELIM,parent=96 -__rec=ctx,ref=117=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001305=0.001305=0.001305=0.001305=1=0.001305=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=118,attr=59,data=Lcals_TRIDIAG_ELIM.default,parent=117 -__rec=ctx,ref=118=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001301=0.001301=0.001301=0.001301=1=0.001301=31999968.000000=1999998.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=119,attr=59,data=Polybench,parent=60 -__rec=ctx,ref=119=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=12.343142=12.343142=12.343142=12.343142=1=12.343142=3197120960.000000=6434850422.000000=119880040.000000=160.000000=1002001.000000=1.000000 -__rec=node,id=120,attr=59,data=Polybench_2MM,parent=119 -__rec=ctx,ref=120=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=3.478706=3.478706=3.478706=3.478706=1=3.478706=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=121,attr=59,data=Polybench_2MM.default,parent=120 -__rec=ctx,ref=121=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=3.478692=3.478692=3.478692=3.478692=1=3.478692=50001952.000000=5372729362.000000=2004002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=122,attr=59,data=Polybench_3MM,parent=119 -__rec=ctx,ref=122=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=5.426873=5.426873=5.426873=5.426873=1=5.426873=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=123,attr=59,data=Polybench_3MM.default,parent=122 -__rec=ctx,ref=123=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=5.426862=5.426862=5.426862=5.426862=1=5.426862=75475400.000000=6434850422.000000=3006003.000000=3.000000=1002001.000000=1.000000 -__rec=node,id=124,attr=59,data=Polybench_ADI,parent=119 -__rec=ctx,ref=124=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.086423=0.086423=0.086423=0.086423=1=0.086423=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=125,attr=59,data=Polybench_ADI.default,parent=124 -__rec=ctx,ref=125=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.086418=0.086418=0.086418=0.086418=1=0.086418=382465152.000000=135185224.000000=7976.000000=8.000000=994009.000000=1.000000 -__rec=node,id=126,attr=59,data=Polybench_ATAX,parent=119 -__rec=ctx,ref=126=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002555=0.002555=0.002555=0.002555=1=0.002555=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=127,attr=59,data=Polybench_ATAX.default,parent=126 -__rec=ctx,ref=127=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002550=0.002550=0.002550=0.002550=1=0.002550=16072056.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=128,attr=59,data=Polybench_FDTD_2D,parent=119 -__rec=ctx,ref=128=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.094538=0.094538=0.094538=0.094538=1=0.094538=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=129,attr=59,data=Polybench_FDTD_2D.default,parent=128 -__rec=ctx,ref=129=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.094531=0.094531=0.094531=0.094531=1=0.094531=3197120960.000000=439360200.000000=119880040.000000=160.000000=999000.000000=1.000000 -__rec=node,id=130,attr=59,data=Polybench_FLOYD_WARSHALL,parent=119 -__rec=ctx,ref=130=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.800272=0.800272=0.800272=0.800272=1=0.800272=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=131,attr=59,data=Polybench_FLOYD_WARSHALL.default,parent=130 -__rec=ctx,ref=131=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.800267=0.800267=0.800267=0.800267=1=0.800267=16032016.000000=1003003001.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=132,attr=59,data=Polybench_GEMM,parent=119 -__rec=ctx,ref=132=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=2.262155=2.262155=2.262155=2.262155=1=2.262155=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=133,attr=59,data=Polybench_GEMM.default,parent=132 -__rec=ctx,ref=133=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=2.262150=2.262150=2.262150=2.262150=1=2.262150=27235208.000000=3608205601.000000=1002001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=134,attr=59,data=Polybench_GEMVER,parent=119 -__rec=ctx,ref=134=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003361=0.003361=0.003361=0.003361=1=0.003361=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=135,attr=59,data=Polybench_GEMVER.default,parent=134 -__rec=ctx,ref=135=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003356=0.003356=0.003356=0.003356=1=0.003356=32168136.000000=10021011.000000=3007004.000000=4.000000=1002001.000000=1.000000 -__rec=node,id=136,attr=59,data=Polybench_GESUMMV,parent=119 -__rec=ctx,ref=136=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001016=0.001016=0.001016=0.001016=1=0.001016=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=137,attr=59,data=Polybench_GESUMMV.default,parent=136 -__rec=ctx,ref=137=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001011=0.001011=0.001011=0.001011=1=0.001011=16056040.000000=4011007.000000=1001.000000=1.000000=1002001.000000=1.000000 -__rec=node,id=138,attr=59,data=Polybench_HEAT_3D,parent=119 -__rec=ctx,ref=138=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.067907=0.067907=0.067907=0.067907=1=0.067907=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=139,attr=59,data=Polybench_HEAT_3D.default,parent=138 -__rec=ctx,ref=139=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.067899=0.067899=0.067899=0.067899=1=0.067899=602176000.000000=547603800.000000=36506920.000000=40.000000=912673.000000=1.000000 -__rec=node,id=140,attr=59,data=Polybench_JACOBI_1D,parent=119 -__rec=ctx,ref=140=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.022956=0.022956=0.022956=0.022956=1=0.022956=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=141,attr=59,data=Polybench_JACOBI_1D.default,parent=140 -__rec=ctx,ref=141=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.022951=0.022951=0.022951=0.022951=1=0.022951=511998464.000000=95999616.000000=31999872.000000=32.000000=999996.000000=1.000000 -__rec=node,id=142,attr=59,data=Polybench_JACOBI_2D,parent=119 -__rec=ctx,ref=142=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.093821=0.093821=0.093821=0.093821=1=0.093821=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=143,attr=59,data=Polybench_JACOBI_2D.default,parent=142 -__rec=ctx,ref=143=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.093816=0.093816=0.093816=0.093816=1=0.093816=1279998720.000000=399200400.000000=79840080.000000=2.000000=998001.000000=1.000000 -__rec=node,id=144,attr=59,data=Polybench_MVT,parent=119 -__rec=ctx,ref=144=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002524=0.002524=0.002524=0.002524=1=0.002524=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=145,attr=59,data=Polybench_MVT.default,parent=144 -__rec=ctx,ref=145=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002519=0.002519=0.002519=0.002519=1=0.002519=16080064.000000=4008004.000000=2002.000000=2.000000=1002001.000000=1.000000 -__rec=node,id=146,attr=59,data=Stream,parent=60 -__rec=ctx,ref=146=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.005311=0.005311=0.005311=0.005311=1=0.005311=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=147,attr=59,data=Stream_ADD,parent=146 -__rec=ctx,ref=147=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000909=0.000909=0.000909=0.000909=1=0.000909=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=148,attr=59,data=Stream_ADD.default,parent=147 -__rec=ctx,ref=148=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000906=0.000906=0.000906=0.000906=1=0.000906=24000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=149,attr=59,data=Stream_COPY,parent=146 -__rec=ctx,ref=149=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000594=0.000594=0.000594=0.000594=1=0.000594=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=150,attr=59,data=Stream_COPY.default,parent=149 -__rec=ctx,ref=150=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000591=0.000591=0.000591=0.000591=1=0.000591=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=151,attr=59,data=Stream_DOT,parent=146 -__rec=ctx,ref=151=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002278=0.002278=0.002278=0.002278=1=0.002278=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=152,attr=59,data=Stream_DOT.default,parent=151 -__rec=ctx,ref=152=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002273=0.002273=0.002273=0.002273=1=0.002273=16000016.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=153,attr=59,data=Stream_MUL,parent=146 -__rec=ctx,ref=153=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000597=0.000597=0.000597=0.000597=1=0.000597=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=154,attr=59,data=Stream_MUL.default,parent=153 -__rec=ctx,ref=154=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000588=0.000588=0.000588=0.000588=1=0.000588=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=155,attr=59,data=Stream_TRIAD,parent=146 -__rec=ctx,ref=155=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000917=0.000917=0.000917=0.000917=1=0.000917=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=156,attr=59,data=Stream_TRIAD.default,parent=155 -__rec=ctx,ref=156=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000913=0.000913=0.000913=0.000913=1=0.000913=24000000.000000=2000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=157,attr=59,data=Apps,parent=60 -__rec=ctx,ref=157=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.148937=0.148937=0.148937=0.148937=1=0.148937=216000000.000000=110390625.000000=6000000.000000=156.000000=1103022.000000=1.000000 -__rec=node,id=158,attr=59,data=Apps_CONVECTION3DPA,parent=157 -__rec=ctx,ref=158=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.014000=0.014000=0.014000=0.014000=1=0.014000=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=159,attr=59,data=Apps_CONVECTION3DPA.default,parent=158 -__rec=ctx,ref=159=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013997=0.013997=0.013997=0.013997=1=0.013997=30750288.000000=57546875.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=160,attr=59,data=Apps_DEL_DOT_VEC_2D,parent=157 -__rec=ctx,ref=160=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.008402=0.008402=0.008402=0.008402=1=0.008402=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=161,attr=59,data=Apps_DEL_DOT_VEC_2D.default,parent=160 -__rec=ctx,ref=161=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.008397=0.008397=0.008397=0.008397=1=0.008397=48064032.000000=54000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=162,attr=59,data=Apps_DIFFUSION3DPA,parent=157 -__rec=ctx,ref=162=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.032413=0.032413=0.032413=0.032413=1=0.032413=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=163,attr=59,data=Apps_DIFFUSION3DPA.default,parent=162 -__rec=ctx,ref=163=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.032404=0.032404=0.032404=0.032404=1=0.032404=54750192.000000=110390625.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=164,attr=59,data=Apps_ENERGY,parent=157 -__rec=ctx,ref=164=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012758=0.012758=0.012758=0.012758=1=0.012758=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=165,attr=59,data=Apps_ENERGY.default,parent=164 -__rec=ctx,ref=165=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012752=0.012752=0.012752=0.012752=1=0.012752=216000000.000000=55000000.000000=6000000.000000=6.000000=1000000.000000=1.000000 -__rec=node,id=166,attr=59,data=Apps_FIR,parent=157 -__rec=ctx,ref=166=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012291=0.012291=0.012291=0.012291=1=0.012291=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=167,attr=59,data=Apps_FIR.default,parent=166 -__rec=ctx,ref=167=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.012286=0.012286=0.012286=0.012286=1=0.012286=15999872.000000=31999488.000000=999984.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=168,attr=59,data=Apps_HALOEXCHANGE,parent=157 -__rec=ctx,ref=168=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000789=0.000789=0.000789=0.000789=1=0.000789=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=169,attr=59,data=Apps_HALOEXCHANGE.default,parent=168 -__rec=ctx,ref=169=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000784=0.000784=0.000784=0.000784=1=0.000784=7344960.000000=0.000000=183624.000000=156.000000=1000000.000000=1.000000 -__rec=node,id=170,attr=59,data=Apps_HALOEXCHANGE_FUSED,parent=157 -__rec=ctx,ref=170=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000749=0.000749=0.000749=0.000749=1=0.000749=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=171,attr=59,data=Apps_HALOEXCHANGE_FUSED.default,parent=170 -__rec=ctx,ref=171=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000745=0.000745=0.000745=0.000745=1=0.000745=7344960.000000=0.000000=183624.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=172,attr=59,data=Apps_LTIMES,parent=157 -__rec=ctx,ref=172=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.018043=0.018043=0.018043=0.018043=1=0.018043=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=173,attr=59,data=Apps_LTIMES.default,parent=172 -__rec=ctx,ref=173=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.018039=0.018039=0.018039=0.018039=1=0.018039=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=174,attr=59,data=Apps_LTIMES_NOVIEW,parent=157 -__rec=ctx,ref=174=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.017969=0.017969=0.017969=0.017969=1=0.017969=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=175,attr=59,data=Apps_LTIMES_NOVIEW.default,parent=174 -__rec=ctx,ref=175=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.017966=0.017966=0.017966=0.017966=1=0.017966=14254592.000000=49971200.000000=999424.000000=1.000000=999424.000000=1.000000 -__rec=node,id=176,attr=59,data=Apps_MASS3DPA,parent=157 -__rec=ctx,ref=176=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013989=0.013989=0.013989=0.013989=1=0.013989=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=177,attr=59,data=Apps_MASS3DPA.default,parent=176 -__rec=ctx,ref=177=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.013986=0.013986=0.013986=0.013986=1=0.013986=16192320.000000=40552000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=178,attr=59,data=Apps_NODAL_ACCUMULATION_3D,parent=157 -__rec=ctx,ref=178=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003985=0.003985=0.003985=0.003985=1=0.003985=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=179,attr=59,data=Apps_NODAL_ACCUMULATION_3D.default,parent=178 -__rec=ctx,ref=179=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.003981=0.003981=0.003981=0.003981=1=0.003981=32484816.000000=9000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=180,attr=59,data=Apps_PRESSURE,parent=157 -__rec=ctx,ref=180=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002355=0.002355=0.002355=0.002355=1=0.002355=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=181,attr=59,data=Apps_PRESSURE.default,parent=180 -__rec=ctx,ref=181=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.002351=0.002351=0.002351=0.002351=1=0.002351=40000000.000000=3000000.000000=2000000.000000=2.000000=1000000.000000=1.000000 -__rec=node,id=182,attr=59,data=Apps_VOL3D,parent=157 -__rec=ctx,ref=182=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.011150=0.011150=0.011150=0.011150=1=0.011150=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=183,attr=59,data=Apps_VOL3D.default,parent=182 -__rec=ctx,ref=183=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.011144=0.011144=0.011144=0.011144=1=0.011144=35558808.000000=79417584.000000=1103022.000000=1.000000=1103022.000000=1.000000 -__rec=node,id=184,attr=59,data=Algorithm,parent=60 -__rec=ctx,ref=184=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.161851=0.161851=0.161851=0.161851=1=0.161851=32000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=185,attr=59,data=Algorithm_SCAN,parent=184 -__rec=ctx,ref=185=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001024=0.001024=0.001024=0.001024=1=0.001024=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=186,attr=59,data=Algorithm_SCAN.default,parent=185 -__rec=ctx,ref=186=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001014=0.001014=0.001014=0.001014=1=0.001014=16000000.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=187,attr=59,data=Algorithm_SORT,parent=184 -__rec=ctx,ref=187=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078832=0.078832=0.078832=0.078832=1=0.078832=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=188,attr=59,data=Algorithm_SORT.default,parent=187 -__rec=ctx,ref=188=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078829=0.078829=0.078829=0.078829=1=0.078829=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=189,attr=59,data=Algorithm_SORTPAIRS,parent=184 -__rec=ctx,ref=189=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078354=0.078354=0.078354=0.078354=1=0.078354=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=190,attr=59,data=Algorithm_SORTPAIRS.default,parent=189 -__rec=ctx,ref=190=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.078348=0.078348=0.078348=0.078348=1=0.078348=32000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=191,attr=59,data=Algorithm_REDUCE_SUM,parent=184 -__rec=ctx,ref=191=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001099=0.001099=0.001099=0.001099=1=0.001099=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=192,attr=59,data=Algorithm_REDUCE_SUM.default,parent=191 -__rec=ctx,ref=192=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001095=0.001095=0.001095=0.001095=1=0.001095=8000008.000000=1000000.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=193,attr=59,data=Algorithm_MEMSET,parent=184 -__rec=ctx,ref=193=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000869=0.000869=0.000869=0.000869=1=0.000869=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=194,attr=59,data=Algorithm_MEMSET.library,parent=193 -__rec=ctx,ref=194=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000310=0.000310=0.000310=0.000310=1=0.000310=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=195,attr=59,data=Algorithm_MEMSET.default,parent=193 -__rec=ctx,ref=195=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000551=0.000551=0.000551=0.000551=1=0.000551=8000008.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=196,attr=59,data=Algorithm_MEMCPY,parent=184 -__rec=ctx,ref=196=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001648=0.001648=0.001648=0.001648=1=0.001648=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=197,attr=59,data=Algorithm_MEMCPY.library,parent=196 -__rec=ctx,ref=197=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.001009=0.001009=0.001009=0.001009=1=0.001009=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=198,attr=59,data=Algorithm_MEMCPY.default,parent=196 -__rec=ctx,ref=198=234,attr=202=205=208=212=210=215=218=221=224=227=230=233,data=0.000630=0.000630=0.000630=0.000630=1=0.000630=16000000.000000=0.000000=1000000.000000=1.000000=1000000.000000=1.000000 -__rec=node,id=310,attr=10,data=512,parent=3 -__rec=node,id=316,attr=8,data=spot.channels,parent=310 -__rec=node,id=315,attr=8,data=spot.options,parent=310 -__rec=node,id=313,attr=10,data=512,parent=1 -__rec=node,id=314,attr=8,data=spot.format.version,parent=313 -__rec=node,id=312,attr=8,data=spot.timeseries.metrics,parent=310 -__rec=node,id=311,attr=8,data=spot.metrics,parent=310 -__rec=node,id=16,attr=10,data=1612,parent=3 -__rec=node,id=17,attr=8,data=cali.caliper.version,parent=16 -__rec=node,id=18,attr=17,data=2.10.0-dev -__rec=node,id=317,attr=311,data=min#inclusive#sum#time.duration\,max#inclusive#sum#time.duration\,avg#inclusive#sum#time.duration\,sum#inclusive#sum#time.duration\,any#any#max#Bytes/Rep\,any#any#max#Flops/Rep\,any#any#max#Iterations/Rep\,any#any#max#Kernels/Rep\,any#any#max#ProblemSize\,any#any#max#Reps,parent=18 -__rec=node,id=318,attr=312,data=,parent=317 -__rec=node,id=319,attr=314,data=2,parent=318 -__rec=node,id=320,attr=315,data=,parent=319 -__rec=node,id=321,attr=316,data=regionprofile,parent=320 -__rec=node,id=235,attr=10,data=84,parent=3 -__rec=node,id=236,attr=8,data=adiak.subcategory,parent=235 -__rec=node,id=237,attr=10,data=84,parent=1 -__rec=node,id=238,attr=8,data=adiak.category,parent=237 -__rec=node,id=239,attr=8,data=adiak.type,parent=235 -__rec=node,id=240,attr=239,data=string,parent=3 -__rec=node,id=241,attr=238,data=2,parent=240 -__rec=node,id=242,attr=236,data=none,parent=241 -__rec=node,id=243,attr=10,data=1612,parent=242 -__rec=node,id=244,attr=8,data=variant,parent=243 -__rec=node,id=245,attr=8,data=omp_max_threads,parent=243 -__rec=node,id=246,attr=8,data=omp_version,parent=243 -__rec=node,id=247,attr=8,data=SizeMeaning,parent=243 -__rec=node,id=248,attr=239,data=double,parent=5 -__rec=node,id=249,attr=238,data=2,parent=248 -__rec=node,id=250,attr=236,data=none,parent=249 -__rec=node,id=251,attr=10,data=1612,parent=250 -__rec=node,id=252,attr=8,data=ProblemSizeRunParam,parent=251 -__rec=node,id=253,attr=8,data=machine_build,parent=243 -__rec=node,id=254,attr=8,data=systype_build,parent=243 -__rec=node,id=255,attr=8,data=Compiler_path_version,parent=243 -__rec=node,id=256,attr=8,data=compiler,parent=243 -__rec=node,id=257,attr=8,data=compiler_version,parent=243 -__rec=node,id=258,attr=8,data=rajaperf_compiler_options,parent=243 -__rec=node,id=259,attr=8,data=rajaperf_compiler,parent=243 -__rec=node,id=260,attr=8,data=cmake_exe_linker_flags,parent=243 -__rec=node,id=261,attr=8,data=cmake_cxx_flags,parent=243 -__rec=node,id=262,attr=8,data=cmake_build_type,parent=243 -__rec=node,id=263,attr=8,data=raja_version,parent=243 -__rec=node,id=264,attr=8,data=perfsuite_version,parent=243 -__rec=node,id=265,attr=236,data=host,parent=241 -__rec=node,id=266,attr=10,data=1612,parent=265 -__rec=node,id=267,attr=8,data=cluster,parent=266 -__rec=node,id=268,attr=239,data=set of string,parent=3 -__rec=node,id=269,attr=238,data=2,parent=268 -__rec=node,id=270,attr=236,data=runinfo,parent=269 -__rec=node,id=271,attr=10,data=1612,parent=270 -__rec=node,id=272,attr=8,data=cmdline,parent=271 -__rec=node,id=273,attr=239,data=set of path,parent=3 -__rec=node,id=274,attr=238,data=2,parent=273 -__rec=node,id=275,attr=236,data=binary,parent=274 -__rec=node,id=276,attr=10,data=1612,parent=275 -__rec=node,id=277,attr=8,data=libraries,parent=276 -__rec=node,id=278,attr=239,data=date,parent=2 -__rec=node,id=279,attr=238,data=2,parent=278 -__rec=node,id=280,attr=236,data=runinfo,parent=279 -__rec=node,id=281,attr=10,data=1612,parent=280 -__rec=node,id=282,attr=8,data=launchdate,parent=281 -__rec=node,id=283,attr=236,data=runinfo,parent=241 -__rec=node,id=284,attr=10,data=1612,parent=283 -__rec=node,id=285,attr=8,data=user,parent=284 -__rec=node,id=286,attr=8,data=cali.channel,parent=16 -__rec=node,id=287,attr=286,data=spot -__rec=node,id=288,attr=285,data=umdev,parent=287 -__rec=node,id=289,attr=282,data=1673516370,parent=288 -__rec=node,id=290,attr=277,data=[/lib64/libpthread.so.0\,/lib64/libdl.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/caliper-master-ny5rkvkbsgddr7bomsa2qrkg6j3kkmpp/lib64/libcaliper.so.2\,/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/adiak-0.2.2-2rv4525fupaxg43yj6nx2seemkqw7zse/lib/libadiak.so\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpi.so.12\,/usr/tce/packages/mvapich2/mvapich2-2.3-gcc-8.3.1/lib/libmpicxx.so.12\,/lib64/libstdc++.so.6\,/lib64/libm.so.6\,/lib64/libgomp.so.1\,/lib64/libgcc_s.so.1\,/lib64/libc.so.6\,/lib64/ld-linux-x86-64.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpapi.so.6.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libdw.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libunwind-1.6.2-zd5wrrxpfuiby4a2pvmpxdpchkkznexc/lib/libunwind.so.8\,/lib64/librt.so.1\,/lib64/libgfortran.so.5\,/lib64/libnuma.so.1\,/lib64/libibverbs.so.1\,/lib64/libpsm2.so.2\,/lib64/libpmi2.so.0\,/lib64/libquadmath.so.0\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/papi-6.0.0.1-xjhdzqzmpbhx6hunnzd7imj2xwy7u7zn/lib/libpfm.so.4\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/gettext-0.21.1-bgnyoqxxxhsnujmatvqlzrzshwuprcku/lib/libintl.so.8\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/elfutils-0.188-thqfyznhw3cok6yhgiom3hwayz6jwju2/lib/libelf.so.1\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/zlib-1.2.13-ixzruzdhtrm7dy45ynkttlvvl4zowhv3/lib/libz.so.1\,/lib64/libnl-route-3.so.200\,/lib64/libnl-3.so.200\,/lib64/libresolv.so.2\,/usr/WS2/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/spack-dir/gcc-8.3.1/libiconv-1.16-w6l5utwthqxwa4epvxkr4da7lw37nhny/lib/libiconv.so.2\,/lib64/libnss_files.so.2],parent=289 -__rec=node,id=291,attr=272,data=[/usr/workspace/umdev/RAJAPerf/pr-from-fork-137-245771-1673514206/RAJAPerf/build_hc-ruby-toss_3_x86_64_ib-gcc@8.3.1-nahuoricarh4wo3w3au3kioxlsk5qer4/test/test-raja-perf-suite.exe],parent=290 -__rec=node,id=292,attr=267,data=ruby,parent=291 -__rec=node,id=293,attr=264,data=0.11.0,parent=292 -__rec=node,id=294,attr=263,data=2022.10.4,parent=293 -__rec=node,id=295,attr=262,data=RelWithDebInfo,parent=294 -__rec=node,id=296,attr=261,data= -Wall -Wextra ,parent=295 -__rec=node,id=297,attr=260,data=,parent=296 -__rec=node,id=298,attr=259,data=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++,parent=297 -__rec=node,id=299,attr=258,data=-O2 -g -DNDEBUG; -Wall -Wextra ,parent=298 -__rec=node,id=300,attr=257,data=8.3.1,parent=299 -__rec=node,id=301,attr=256,data=g++-8.3.1,parent=300 -__rec=node,id=302,attr=255,data=gcc-8.3.1,parent=301 -__rec=node,id=303,attr=254,data=toss_3_x86_64_ib,parent=302 -__rec=node,id=304,attr=253,data=ruby961,parent=303 -__rec=node,id=305,attr=252,data=1.000000,parent=304 -__rec=node,id=306,attr=247,data=Factor,parent=305 -__rec=node,id=307,attr=246,data=4.5,parent=306 -__rec=node,id=308,attr=245,data=112,parent=307 -__rec=node,id=309,attr=244,data=RAJA_Seq,parent=308 -__rec=globals,ref=321=309 From 6b03dac9295df3fd72019f15f91758ad12f79473 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 9 Mar 2023 10:14:45 +0100 Subject: [PATCH 150/174] Store filtered graphframes in copy --- scripts/gitlab/hatchet-analysis.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index 841cc81c6..0c7e075df 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -100,6 +100,7 @@ def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> f2 = args.baseline[0] tolerance=args.tolerance[0] + gf1 = GenericFrame(ht.GraphFrame.from_caliperreader(f1)) gf2 = GenericFrame(ht.GraphFrame.from_caliperreader(f2)) @@ -108,11 +109,14 @@ def ExtractCommonSubtree(gf1: ht.GraphFrame, gf2: ht.GraphFrame, metric: str) -> elif 'Min time/rank' in gf1.inc_metrics: metric = 'Min time/rank' +gf11 = gf1 +gf22 = gf2 + if len(gf1.graph) != len(gf2.graph): - gf1 = ExtractCommonSubtree(gf1,gf2,metric) - gf2 = ExtractCommonSubtree(gf2,gf1,metric) + gf11 = ExtractCommonSubtree(gf1,gf2,metric) + gf22 = ExtractCommonSubtree(gf2,gf1,metric) -gf3 = gf1 - gf2 +gf3 = gf11 - gf22 # Sort resulting DataFrame by ``time`` column in descending order. #sorted_df = gf3.dataframe.sort_values(by=[metric], ascending=False) From e4ca868aeb5980a0d0e560c5903ee9092b8bb341 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Thu, 9 Mar 2023 11:02:18 +0100 Subject: [PATCH 151/174] Add caliper target to lassen and corona, add Cuda and OmpTarget analysis --- .gitlab/corona-build-and-test-extra.yml | 9 ++++++++- .gitlab/lassen-build-and-test-extra.yml | 5 +++++ .gitlab/ruby-build-and-test-extra.yml | 2 +- scripts/gitlab/build_and_test.sh | 23 ++++++++++++----------- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.gitlab/corona-build-and-test-extra.yml b/.gitlab/corona-build-and-test-extra.yml index 1dd6b9bed..7026d725f 100644 --- a/.gitlab/corona-build-and-test-extra.yml +++ b/.gitlab/corona-build-and-test-extra.yml @@ -29,5 +29,12 @@ variables: # INFO: This job is activated in RAJA CI, but we don't use desul atomics here #rocm_5_1_1_clang_13_0_0_desul_atomics: # variables: -# SPEC: "+rocm~openmp +desul amdgpu_target=gfx906 %clang@13.0.0 ^blt@develop ^hip@5.1.1" +# SPEC: "~openmp +rocm +desul amdgpu_target=gfx906 %clang@13.0.0 ^hip@5.1.1 ^blt@develop" # extends: .build_and_test_on_corona + +# EXTRA +rocm_5_1_1_clang_13_0_0_caliper: + variables: + SPEC: "~openmp +caliper +rocm amdgpu_target=gfx906 %clang@13.0.0 ^hip@5.1.1 ^blt@develop" + extends: .build_and_test_on_corona + diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index 1ebe9daac..ec5d6ffa5 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -132,6 +132,11 @@ gcc_8_3_1_cuda_11_5_0_ats_disabled: # EXTRAS ########## +clang_12_0_1_cuda_11_5_0_caliper: + variables: + SPEC: " +openmp +caliper +cuda cuda_arch=70 %clang@12.0.1 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ^cuda@11.5.0" + extends: .build_and_test_on_lassen + clang_13_0_1_libcpp: variables: SPEC: " +openmp %clang@13.0.1+libcpp" diff --git a/.gitlab/ruby-build-and-test-extra.yml b/.gitlab/ruby-build-and-test-extra.yml index 452db6a0d..4253a3056 100644 --- a/.gitlab/ruby-build-and-test-extra.yml +++ b/.gitlab/ruby-build-and-test-extra.yml @@ -37,7 +37,7 @@ pgi_20_1_gcc_local_8_3_1: gcc_8_3_1_caliper: variables: - SPEC: " ${PROJECT_RUBY_VARIANTS} +caliper %gcc@8.3.1 ${PROJECT_RUBY_DEPS}" + SPEC: " +openmp +caliper %gcc@8.3.1" RUBY_BUILD_AND_TEST_JOB_ALLOC: "--time=60 --nodes=1" extends: .build_and_test_on_ruby diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 2261aac5c..ec84d2072 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -270,17 +270,18 @@ then mkdir -p ${reports_dir} cp test/*.cali ${reports_dir} - baselines_dir=${project_dir}/test/caliper-baselines - for suffix in "Seq" "OpenMP"; do - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - echo "Hatchet comparison of Caliper data for ${suffix}" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - echo " -> Base vs RAJA" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali - echo " -> Base vs Lambda" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/Lambda_${suffix}.cali - echo " -> Lambda vs RAJA" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Lambda_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali + for suffix in "Seq" "OpenMP" "OpenMPTarget" "Cuda" "HIP"; do + if ( find ${reports_dir} -name '*${suffix}.cali' | grep -q '.' ); then + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "Hatchet comparison of Caliper data for ${suffix}" + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo " -> Base vs RAJA" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali + echo " -> Base vs Lambda" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/Lambda_${suffix}.cali + echo " -> Lambda vs RAJA" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Lambda_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali + fi done fi From 74a4f6e05aa7675a592e8a73db9fcc9cc42ab54f Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 10 Mar 2023 11:36:50 +0100 Subject: [PATCH 152/174] Remove cuda-arch in non-cuda spec --- .gitlab/lassen-build-and-test-extra.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/lassen-build-and-test-extra.yml b/.gitlab/lassen-build-and-test-extra.yml index b9a139b3a..f9f95e47d 100644 --- a/.gitlab/lassen-build-and-test-extra.yml +++ b/.gitlab/lassen-build-and-test-extra.yml @@ -67,7 +67,7 @@ xl_16_1_1_12: # Overriding shared spec: Longer allocation + Extra flags xl_16_1_1_12_gcc_8_3_1: variables: - SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" cuda_arch=70 ${PROJECT_LASSEN_DEPS}" + SPEC: " ${PROJECT_LASSEN_VARIANTS} %xl@16.1.1.12 cxxflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1 -qthreaded -std=c++14 -O3 -qstrict -qxlcompatmacros -qlanglvl=extended0x -qalias=noansi -qhot -qsmp=omp -qnoeh -qsuppress=1500-029 -qsuppress=1500-036\" cflags==\"--gcc-toolchain=/usr/tce/packages/gcc/gcc-8.3.1\" ${PROJECT_LASSEN_DEPS}" LASSEN_BUILD_AND_TEST_JOB_ALLOC: "1 -W 50" extends: .build_and_test_on_lassen From 489c9a58c44161ced008ec77352e5244f8c6d735 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 10 Mar 2023 16:57:15 +0100 Subject: [PATCH 153/174] Effectively use the upstream --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index ec84d2072..11c0a0646 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -79,7 +79,7 @@ then prefix_opt="--prefix=${prefix}" upstream_opt="" - if [[ ${update_spack_upstream} == false && -e ${spack_upstream_path}/spack/opt/spack/spack.yaml ]] + if [[ ${update_spack_upstream} == false && -e ${spack_upstream_path}/.spack-db ]] then upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" fi From 29dbcdb94c18456e34ecc2e4fe0b887d77cf3325 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 10 Mar 2023 20:13:18 +0100 Subject: [PATCH 154/174] Fix upstream path --- scripts/gitlab/build_and_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 11c0a0646..c1abe9e2b 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -81,7 +81,7 @@ then upstream_opt="" if [[ ${update_spack_upstream} == false && -e ${spack_upstream_path}/.spack-db ]] then - upstream_opt="--upstream=${spack_upstream_path}/spack/opt/spack" + upstream_opt="--upstream=${spack_upstream_path}" fi # We force Spack to put all generated files (cache and configuration of From b826e2832930268e67296e71451ea9bddfa38727 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Mon, 13 Mar 2023 21:59:29 +0100 Subject: [PATCH 155/174] Remove superfluous comparison --- scripts/gitlab/build_and_test.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index c1abe9e2b..fb9de4b10 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -275,12 +275,10 @@ then echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo "Hatchet comparison of Caliper data for ${suffix}" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - echo " -> Base vs RAJA" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali - echo " -> Base vs Lambda" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Base_${suffix}.cali --baseline=${reports_dir}/Lambda_${suffix}.cali - echo " -> Lambda vs RAJA" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --report=${reports_dir}/Lambda_${suffix}.cali --baseline=${reports_dir}/RAJA_${suffix}.cali + echo " -> RAJA vs Base" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/RAJA_${suffix}.cali --report=${reports_dir}/Base_${suffix}.cali + echo " -> Lambda vs Base" + ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/Lambda_${suffix}.cali --report=${reports_dir}/Base_${suffix}.cali fi done fi From 7a1f7b920115d5083487f84a9bc8637abb1f5392 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Tue, 14 Mar 2023 19:02:16 +0100 Subject: [PATCH 156/174] Actually use Base implementation as baseline --- scripts/gitlab/build_and_test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/gitlab/build_and_test.sh b/scripts/gitlab/build_and_test.sh index 23b65c4b5..849174cac 100755 --- a/scripts/gitlab/build_and_test.sh +++ b/scripts/gitlab/build_and_test.sh @@ -276,9 +276,9 @@ then echo "Hatchet comparison of Caliper data for ${suffix}" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo " -> RAJA vs Base" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/RAJA_${suffix}.cali --report=${reports_dir}/Base_${suffix}.cali + ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/Base_${suffix}.cali --report=${reports_dir}/RAJA_${suffix}.cali echo " -> Lambda vs Base" - ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/Lambda_${suffix}.cali --report=${reports_dir}/Base_${suffix}.cali + ${project_dir}/scripts/gitlab/hatchet-analysis.py --baseline=${reports_dir}/Base_${suffix}.cali --report=${reports_dir}/Lambda_${suffix}.cali fi done fi From bd0d585ad81a3a90447d5cd01abc60e9dae2f275 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 10:09:04 +0100 Subject: [PATCH 157/174] Use new CI queue in RAJAPerf --- .gitlab/custom-jobs-and-variables.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab/custom-jobs-and-variables.yml b/.gitlab/custom-jobs-and-variables.yml index f299e16ff..e69d6cd0f 100644 --- a/.gitlab/custom-jobs-and-variables.yml +++ b/.gitlab/custom-jobs-and-variables.yml @@ -16,9 +16,9 @@ variables: # Ruby # Arguments for top level allocation - RUBY_BUILD_AND_TEST_SHARED_ALLOC: "--exclusive --partition=pdebug --time=45 --nodes=1" + RUBY_BUILD_AND_TEST_SHARED_ALLOC: "--exclusive --reservation=ci --qos=ci_ruby --time=45 --nodes=1" # Arguments for job level allocation - RUBY_BUILD_AND_TEST_JOB_ALLOC: "--time=30 --nodes=1" + RUBY_BUILD_AND_TEST_JOB_ALLOC: "--reservation=ci --qos=ci_ruby --time=30 --nodes=1" # Project specific variants for ruby PROJECT_RUBY_VARIANTS: "+openmp " # Project specific deps for ruby From 39e699db7204adf5dfe9bc010b8b4f345e3db13f Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 10:40:21 +0100 Subject: [PATCH 158/174] Update Rad Spack Conf (via RAJA) to Add python and elfutils as external builds only --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index ce1f40198..06cf95afc 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit ce1f40198c4835ea809b7d778da7e3d997b0df56 +Subproject commit 06cf95afc011792096fd10272b9e71bf8a0c18c0 From 73068080efa8850a7f603ed903aeb9026add161a Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 13:21:40 +0100 Subject: [PATCH 159/174] python 3.8.2 missing on toss4 machines, using 3.10.8 --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index 06cf95afc..43ffb2f45 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 06cf95afc011792096fd10272b9e71bf8a0c18c0 +Subproject commit 43ffb2f45070f1aaba352c8835a21395dc8d6663 From 2eac54fa76b67d5d22f8a5a416bd3c2dbd015369 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 13:46:53 +0100 Subject: [PATCH 160/174] No system elfutils on toss4 --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index 43ffb2f45..66da45b52 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 43ffb2f45070f1aaba352c8835a21395dc8d6663 +Subproject commit 66da45b52b82991486deeb34a3e9d52d63c78b09 From b7fbc8c5381f3c18793daaddbd5ee52a9ddfcd45 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 14:41:59 +0100 Subject: [PATCH 161/174] No system elfutils on blueos --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index 66da45b52..7464f5e0e 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 66da45b52b82991486deeb34a3e9d52d63c78b09 +Subproject commit 7464f5e0efbab964d8f2cc7efc12b365a7e5ef67 From 110d578c8a0dabaf38d0d6c728217e7a7d2b7167 Mon Sep 17 00:00:00 2001 From: "Adrien M. BERNEDE" Date: Fri, 17 Mar 2023 21:27:47 +0100 Subject: [PATCH 162/174] Point to RAJA@develop with new radiuss-spack-configs --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index 7464f5e0e..6250fbdcb 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 7464f5e0efbab964d8f2cc7efc12b365a7e5ef67 +Subproject commit 6250fbdcb3b74ae4d86ab1755aa73d70759bdcb2 From 202635efed480eea3dfd06514a85e1274eadb07c Mon Sep 17 00:00:00 2001 From: holger Date: Sun, 19 Mar 2023 13:33:23 -0700 Subject: [PATCH 163/174] added sphinx doc for building with caliper, and Caliper output --- docs/sphinx/user_guide/build.rst | 41 ++++++++++++++++++++++ docs/sphinx/user_guide/output.rst | 58 +++++++++++++++++++++++++++++++ tpl/RAJA | 2 +- 3 files changed, 100 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/user_guide/build.rst b/docs/sphinx/user_guide/build.rst index be1bde2fe..346ffdda8 100644 --- a/docs/sphinx/user_guide/build.rst +++ b/docs/sphinx/user_guide/build.rst @@ -210,3 +210,44 @@ sizes. The CMake option for this is will build versions of GPU kernels that use 64, 128, 256, 512, and 1024 threads per GPU thread-block. + +Building with Caliper +--------------------- + +RAJAPerf Suite may also use Caliper instrumentation, with per variant output into +Spot/Hatchet .cali files. Original timing is nested within Caliper annotations and +so is not impacted when Caliper support is turned on. While Caliper is low-overhead +it is not zero, so it will add a small amount of timing skew in its data as +compared to the original. For much more on Caliper, read it's documentation here: +[Caliper] (http://software.llnl.gov/Caliper/) + +Caliper *annotation* is in the following tree structure + +Variant + Group + Kernel + Kernel.Tuning + +| Build against these Caliper versions +| +| **caliper@2.9.0** (preferred target) +| **caliper@master** (if using older Spack version) + +In Cmake scripts add + **-DRAJA_PERFSUITE_USE_CALIPER=On** + +Add to **-DCMAKE_PREFIX_PATH** + ;${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak + +or use + -Dcaliper_DIR -Dadiak_DIR package prefixes + +For Spack : raja_perf +caliper ^caliper@2.9.0 + +For Uberenv: python3 scripts/uberenv/uberenv.py --spec +caliper ^caliper@2.9.0 + +If you intend on passing nvtx or roctx annotation to Nvidia or AMD profiling tools, +build Caliper with +cuda cuda_arch=XX or +rocm respectively. Then you can specify +an additional Caliper service for nvtx or roctx like so: roctx example: + +CALI_SERVICES_ENABLE=roctx rocprof --roctx-trace --hip-trace raja-perf.exe \ No newline at end of file diff --git a/docs/sphinx/user_guide/output.rst b/docs/sphinx/user_guide/output.rst index edcbc9a57..7706620b1 100644 --- a/docs/sphinx/user_guide/output.rst +++ b/docs/sphinx/user_guide/output.rst @@ -159,3 +159,61 @@ storing the result in matrix A (N_i X N_j). Problem size could be chosen to be the maximum number of entries in matrix B or C. We choose the size of matrix A (N_i * N_j), which is more closely aligned with the number of independent operations (i.e., the amount of parallel work) in the kernels. + + +=========================== +Caliper output files +=========================== + +If you've built RAJAPerf with Caliper support turned on, then in addition to the +outputs mentioned above, we also save a .cali file for each variant run, such as: +Base_OpenMP.cali, Lambda_OpenMP.cali, RAJA_OpenMP.cali, etc. + +There are several techniques to display the Caliper trees (Timing Hierarchy) + +| 1: Caliper's cali-query tool. +| The first technique is with Caliper's own tool cali-query, we run it with +| **-T** to display tree, or you can specify **--tree**. +| +| cali-query -T $HOME/data/default_problem_size/gcc/RAJA_Seq.cali + +2: Caliper's Python module *caliperreader*:: + + import os + import caliperreader as cr + DATA_DIR = os.getenv('HOME')+"/data/default_problem_size/gcc" + os.chdir(DATA_DIR) + r = cr.CaliperReader() + r.read("RAJA_Seq.cali") + metric = 'avg#inclusive#sum#time.duration' + for rec in r.records: + path = rec['path'] if 'path' in rec else 'UNKNOWN' + time = rec[metric] if metric in rec else '0' + if not 'UNKNOWN' in path: + if (isinstance(path, list)): + path = "/".join(path) + print("{0}: {1}".format(path, time)) + +You can add a couple of lines to view the metadata keys captured by Caliper/Adiak:: + + for g in r.globals: + print(g) + +You can also add a line to display metadata value in the dictionary **r.globals** + +For example print out the OpenMP Max Threads value recorded at runtime:: + + print('OMP Max Threads: ' + r.globals['omp_max_threads'])` + +or the variant represented in this file:: + + print('Variant: ' + r.globals['variant']) + +3: Using the *Hatchet* Python module:: + + import hatchet as ht + DATA_DIR = os.getenv('HOME')+"/data/default_problem_size/gcc" + os.chdir(DATA_DIR) + gf1 = ht.GraphFrame.from_caliperreader("RAJA_Seq.cali") + print(gf1.tree()) + diff --git a/tpl/RAJA b/tpl/RAJA index 6250fbdcb..28fbae0c9 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 6250fbdcb3b74ae4d86ab1755aa73d70759bdcb2 +Subproject commit 28fbae0c957d223ea88685669f5eb2108aca84d1 From 548b42a75fa3d07daf75126037571a0e114639e7 Mon Sep 17 00:00:00 2001 From: Holger Jones Date: Sun, 19 Mar 2023 14:53:00 -0700 Subject: [PATCH 164/174] more generic MPI Init --- test/test-raja-perf-suite.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/test-raja-perf-suite.cpp b/test/test-raja-perf-suite.cpp index 1741dbf68..5078a7167 100644 --- a/test/test-raja-perf-suite.cpp +++ b/test/test-raja-perf-suite.cpp @@ -55,9 +55,8 @@ TEST(ShortSuiteTest, Basic) for (int is = 0; is < argc; ++is) { argv[is] = const_cast(sargv[is].c_str()); } - #ifdef RAJA_PERFSUITE_ENABLE_MPI - MPI_Init(&argc, &argv); + MPI_Init(NULL,NULL); int num_ranks; MPI_Comm_size(MPI_COMM_WORLD, &num_ranks); @@ -142,7 +141,6 @@ TEST(ShortSuiteTest, Basic) MPI_Finalize(); #endif - // clean up delete [] argv; } From b831e475199ef25564ac98b52c8ee41c76ec61f4 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 20 Mar 2023 13:02:59 -0700 Subject: [PATCH 165/174] more sphinx docs for Caliper Use Cases; minor formatting --- docs/sphinx/user_guide/output.rst | 3 + docs/sphinx/user_guide/run.rst | 108 ++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/docs/sphinx/user_guide/output.rst b/docs/sphinx/user_guide/output.rst index 7706620b1..da5aee421 100644 --- a/docs/sphinx/user_guide/output.rst +++ b/docs/sphinx/user_guide/output.rst @@ -217,3 +217,6 @@ or the variant represented in this file:: gf1 = ht.GraphFrame.from_caliperreader("RAJA_Seq.cali") print(gf1.tree()) +`Find out more on hatchet `_ + + diff --git a/docs/sphinx/user_guide/run.rst b/docs/sphinx/user_guide/run.rst index c4f53c522..b5a1751e1 100644 --- a/docs/sphinx/user_guide/run.rst +++ b/docs/sphinx/user_guide/run.rst @@ -103,3 +103,111 @@ was not possible for them to co-exist in the same executable as CUDA variants, for example. In the future, the build system may be reworked so that the OpenMP target variants can be run from the same executable as the other variants. + +============================ +Additional Caliper Use Cases +============================ + +If you specified building with Caliper `-DRAJA_PERFSUITE_USE_CALIPER=On`, +for the most part the generation of Caliper .cali files are automated. +However, there are a couple of other supported use cases. + +Collecting PAPI topdown statistics on Intel Architectures +--------------------------------------------------------- + +On Intel systems, you can collect topdown PAPI counter statistics by using a command line switch + +``--add-to-spot-config, -atsc [Default is none]`` + +appends additional parameters to the built-in Caliper spot config + +Example to include some PAPI counters (Intel arch) + +``-atsc topdown.all`` + +Caliper's topdown service generates derived metrics from raw PAPI counters; a hierarchy of metrics to identify bottlenecks in out-of-order processors. This is based on an an approach described in Ahmad Yasin's paper *A Top-Down Method for Performance Analysis and Counters Architecture*. The toplevel of the hierarchy has a reliable set of four derived metrics or starting weights (sum to 1.0) which include: + +1. Frontend Bound: stalls attributed to the front end which is responsible for fetching and decoding program code. +2. Bad Speculation: fraction of the workload that is affected by incorrect execution paths, i.e. branch misprediction penalties +3. Retiring: Increases in this category reflects overall Instructions Per Cycle (IPC) fraction which is good in general. However, a large retiring fraction for non-vectorized code could also be a hint to the user to vectorize their code (see Yasin's paper) +4. Backend Bound: Memory Bound where execution stalls are related to the memory subsystem, or Core Bound where execution unit occupancy is sub-optimal lowering IPC (more compiler dependent) + +> Backend Bound = 1 - (Frontend Bound + Bad Speculation + Retiring) + +Caveats: + +1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. +2. Small kernels should be run at large problem sizes to minimize anomalous readings +3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation +4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepancy + +``-atsc topdown-counters.all`` + +A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Kernel.Tuning) nodes across several files using -atsc topdown.toplevel:: + + def load_toplevel(cr): + md = {} + metric = [] + metric.append('any#any#topdown.retiring') + metric.append('any#any#topdown.backend_bound') + metric.append('any#any#topdown.frontend_bound') + metric.append('any#any#topdown.bad_speculation') + values = np.zeros((3, 4)) + files = sorted(glob.glob('data/*topleve*.cali')) + findex = 0 + for f in files: + print(f) + gf = cr.GraphFrame.from_caliperreader(f) + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + for mindex in range(0, 4): + values[findex, mindex] = gf.dataframe.loc[nn, metric[mindex]] + findex += 1 + for mindex in range(0,len(metric)): + md[metric[mindex]] = np.average(values[:,mindex]) + return values,md + + +> Caveat for the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning + +> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Models of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. + +`Yasin's Paper `_ + +`Vtune-cookbook topdown method `_ + +`Automatic Generation of Models of Microarchitectures `_ + +Generating trace events (time-series) for viewing in chrome://tracing or Perfetto +--------------------------------------------------------------------------------- + +`Perfetto `_ + +Use Caliper's event trace service to collect timestamp info, where kernel timing can be viewed using browser trace profile views + +``CALI_CONFIG=event-trace,event.timestamps ./raja-perf.exe -ek PI_ATOMIC INDEXLIST -sp`` + +This will produce a separate .cali file with date prefix which looks something like 221108-100718_724_ZKrHC68b77Yd.cali + +Then we'll need to convert this .cali file to JSON records, but first we need to make sure Caliper's python reader is available in the PYTHONPATH, + +``export PYTHONPATH=caliper-source-dir/python/caliper-reader`` + +then run cali2traceevent.py. Example: + +``python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xvetnu.cali RAJAPerf.trace.json`` + +You can then load the resulting JSON file either in Chrome by going to chrome://tracing or in Perfetto. + +For CUDA, assuming you built Caliper with CUDA support, you can collect and combine trace information for memcpy, kernel launch, synchronization, and kernels; with example: + +``CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp`` + +However, when you run cali2traceevent.py you need to add --sort option before the filenames. + +``~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json`` + +For HIP substitute rocm.activities vs. cuda.activities; note currently there is no analog trace.rocm. + From 9ed8761ec743869cfc1d6c88afef0cb841201079 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 20 Mar 2023 13:16:05 -0700 Subject: [PATCH 166/174] sync tpl/RAJA --- tpl/RAJA | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/RAJA b/tpl/RAJA index 28fbae0c9..6250fbdcb 160000 --- a/tpl/RAJA +++ b/tpl/RAJA @@ -1 +1 @@ -Subproject commit 28fbae0c957d223ea88685669f5eb2108aca84d1 +Subproject commit 6250fbdcb3b74ae4d86ab1755aa73d70759bdcb2 From eb9629445e2d61b57fe25d78ab47e491769037f9 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 22 Mar 2023 12:46:40 -0700 Subject: [PATCH 167/174] remove example script to build with Caliper; which also was outdated since we need Caliper@2.9.0; we can spack dev-build or uberenv against Caliper now --- .../blueos_nvcc10_caliper25_gcc8.3.1.sh | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100755 scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh diff --git a/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh b/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh deleted file mode 100755 index a9d553dfb..000000000 --- a/scripts/lc-builds/blueos_nvcc10_caliper25_gcc8.3.1.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash - -############################################################################### -# Copyright (c) 2017-20, Lawrence Livermore National Security, LLC -# and RAJA Performance Suite project contributors. -# See the RAJAPerf/COPYRIGHT file for details. -# -# SPDX-License-Identifier: (BSD-3-Clause) -################################################################################# - -BUILD_SUFFIX=lc_blueos-nvcc10-caliper-gcc8.3.1 -RAJA_HOSTCONFIG=../tpl/RAJA/host-configs/lc-builds/blueos/nvcc_gcc_X.cmake - -rm -rf build_${BUILD_SUFFIX} >/dev/null -mkdir build_${BUILD_SUFFIX} && cd build_${BUILD_SUFFIX} - -module load cmake/3.14.5 -module load caliper-2.5.0-gcc-8.3.1-cu3vy3k - -CALIPER_PREFIX=/usr/WS2/holger/spack/opt/spack/linux-rhel7-power9le/gcc-8.3.1/caliper-2.5.0-cu3vy3kjwjerpdm6xis2kauhz4s6wto2/ - -ADIAK_PREFIX=/usr/WS2/holger/spack/opt/spack/linux-rhel7-power9le/gcc-8.3.1/adiak-0.2.1-hsv444o7ofb6s2znkvvnh6hcmr774g73/ - -cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_CXX_COMPILER=/usr/tce/packages/gcc/gcc-8.3.1/bin/g++ \ - -C ${RAJA_HOSTCONFIG} \ - -DCMAKE_PREFIX_PATH="${CALIPER_PREFIX}/share/cmake/caliper;${ADIAK_PREFIX}/lib/cmake/adiak" \ - -DENABLE_OPENMP=On \ - -DENABLE_CUDA=On \ - -DCMAKE_CUDA_FLAGS="-Xcompiler -mno-float128" \ - -DCUDA_TOOLKIT_ROOT_DIR=/usr/tce/packages/cuda/cuda-10.2.89 \ - -DCMAKE_CUDA_COMPILER=/usr/tce/packages/cuda/cuda-10.1.243/bin/nvcc \ - -DCUDA_ARCH=sm_70 \ - -DENABLE_CALIPER=On \ - -DCMAKE_INSTALL_PREFIX=../install_${BUILD_SUFFIX} \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=On \ - -DCMAKE_VERBOSE_MAKEFILE=On \ - "$@" \ - .. From 70371c44e508da48ed417b4f73b17104f1ab56dc Mon Sep 17 00:00:00 2001 From: holger Date: Thu, 13 Apr 2023 13:08:32 -0700 Subject: [PATCH 168/174] clean-up, and add warning or note sphinx tags to caveats --- docs/sphinx/user_guide/run.rst | 21 +++++++++++++-------- src/CMakeLists.txt | 4 ++++ src/common/Executor.cpp | 14 +++++++------- src/common/Executor.hpp | 2 +- src/common/KernelBase.cpp | 10 +++++----- src/common/KernelBase.hpp | 6 +++--- src/common/RAJAPerfSuite.hpp | 2 +- src/common/RunParams.cpp | 8 ++++---- src/rajaperf_config.hpp.in | 26 +------------------------- test/test-raja-perf-suite.cpp | 4 ++-- 10 files changed, 41 insertions(+), 56 deletions(-) diff --git a/docs/sphinx/user_guide/run.rst b/docs/sphinx/user_guide/run.rst index 99309a536..8caf90fbc 100644 --- a/docs/sphinx/user_guide/run.rst +++ b/docs/sphinx/user_guide/run.rst @@ -169,12 +169,12 @@ Caliper's topdown service generates derived metrics from raw PAPI counters; a hi > Backend Bound = 1 - (Frontend Bound + Bad Speculation + Retiring) -Caveats: +.. warning:: -1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. -2. Small kernels should be run at large problem sizes to minimize anomalous readings -3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation -4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepancy + 1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. + 2. Small kernels should be run at large problem sizes to minimize anomalous readings. + 3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation. + 4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepancy. ``-atsc topdown-counters.all`` @@ -205,9 +205,10 @@ A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Ker return values,md -> Caveat for the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning +.. note:: + For the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning -> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Models of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. + Raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires root access), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Models of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. `Yasin's Paper `_ @@ -240,7 +241,11 @@ For CUDA, assuming you built Caliper with CUDA support, you can collect and comb ``CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp`` -However, when you run cali2traceevent.py you need to add --sort option before the filenames. +.. warning:: + When you run cali2traceevent.py you need to add --sort option before the filenames. + This is needed because the trace.cuda event records need to be sorted before processing. + Failing to do so may result in a Python traceback. + New versions of the Caliper Python package have this option built in by default to avoid this issue. ``~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json`` diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c2adcd105..024fc60ec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -254,5 +254,9 @@ install( TARGETS raja-perf.exe ) endif() +# Uncomment the following to help with cmake file debugging #blt_print_target_properties(TARGET raja-perf.exe) +# See the BLT documentation for other options to expose target's children properties +# or limit the properties printed with regular expressions + diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index a8e4a4ac9..d6e91ad34 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -42,7 +42,7 @@ namespace rajaperf { using namespace std; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) vector split(const string str, const string regex_str) { regex regexz(regex_str); @@ -116,7 +116,7 @@ Executor::Executor(int argc, char** argv) reference_vid(NumVariants), reference_tune_idx(KernelBase::getUnknownTuningIdx()) { -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) struct configuration cc; adiak::init(NULL); adiak::user(); @@ -212,7 +212,7 @@ Executor::~Executor() for (size_t ik = 0; ik < kernels.size(); ++ik) { delete kernels[ik]; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) adiak::fini(); #endif } @@ -709,7 +709,7 @@ void Executor::setupSuite() for (VIDset::iterator vid = run_var.begin(); vid != run_var.end(); ++vid) { variant_ids.push_back( *vid ); -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) KernelBase::setCaliperMgrVariant(*vid,run_params.getOutputDirName(),run_params.getAddToSpotConfig()); #endif } @@ -983,11 +983,11 @@ void Executor::runSuite() for (size_t ik = 0; ik < warmup_kernels.size(); ++ik) { KernelBase* warmup_kernel = warmup_kernels[ik]; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) warmup_kernel->caliperOff(); #endif runKernel(warmup_kernel, true); -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) warmup_kernel->caliperOn(); #endif delete warmup_kernel; @@ -1014,7 +1014,7 @@ void Executor::runSuite() } // loop over passes through suite -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) // Flush Caliper data KernelBase::setCaliperMgrFlush(); #endif diff --git a/src/common/Executor.hpp b/src/common/Executor.hpp index 22fdfce8e..2aaeeb10a 100644 --- a/src/common/Executor.hpp +++ b/src/common/Executor.hpp @@ -12,7 +12,7 @@ #include "common/RAJAPerfSuite.hpp" #include "common/RunParams.hpp" -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #include "rajaperf_config.hpp" #endif diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index ea6d9bd30..3d0d4e3bf 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -44,7 +44,7 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) running_tuning = getUnknownTuningIdx(); checksum_scale_factor = 1.0; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) // Init Caliper column metadata attributes; aggregatable attributes need to be initialized before manager.start() ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); @@ -166,7 +166,7 @@ void KernelBase::setVariantDefined(VariantID vid) min_time[vid].resize(variant_tuning_names[vid].size(), std::numeric_limits::max()); max_time[vid].resize(variant_tuning_names[vid].size(), -std::numeric_limits::max()); tot_time[vid].resize(variant_tuning_names[vid].size(), 0.0); -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) doCaliMetaOnce[vid].resize(variant_tuning_names[vid].size(),true); #endif } @@ -255,7 +255,7 @@ void KernelBase::runKernel(VariantID vid, size_t tune_idx) return; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) if(doCaliperTiming) { KernelBase::setCaliperMgrStart(vid); } @@ -331,7 +331,7 @@ void KernelBase::runKernel(VariantID vid, size_t tune_idx) } } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) if(doCaliperTiming) { setCaliperMgrStop(vid); } @@ -406,7 +406,7 @@ void KernelBase::print(std::ostream& os) const os << std::endl; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { // attributes are class variables initialized in ctor diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 468b6fab8..236b7e046 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -33,7 +33,7 @@ #include #include -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #define CALI_START \ if(doCaliperTiming) { \ @@ -398,7 +398,7 @@ class KernelBase } #endif -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); @@ -624,7 +624,7 @@ class KernelBase RAJA::Timer timer; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) bool doCaliperTiming = true; // warmup can use this to exclude timing std::vector doCaliMetaOnce[NumVariants]; cali_id_t ProblemSize_attr; // in ctor cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); diff --git a/src/common/RAJAPerfSuite.hpp b/src/common/RAJAPerfSuite.hpp index a47c2cbe9..a2adb9847 100644 --- a/src/common/RAJAPerfSuite.hpp +++ b/src/common/RAJAPerfSuite.hpp @@ -19,7 +19,7 @@ #include #include -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #include #include #include diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index 3ccf39708..490b790c5 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -55,7 +55,7 @@ RunParams::RunParams(int argc, char** argv) invalid_npasses_combiner_input(), outdir(), outfile_prefix("RAJAPerf"), -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) add_to_spot_config(), #endif disable_warmup(false) @@ -114,7 +114,7 @@ void RunParams::print(std::ostream& str) const str << "\n outdir = " << outdir; str << "\n outfile_prefix = " << outfile_prefix; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) if(add_to_spot_config.length() > 0) { str << "\n add_to_spot_config = " << add_to_spot_config; } @@ -639,7 +639,7 @@ void RunParams::parseCommandLineOptions(int argc, char** argv) } } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) } else if ( std::string(argv[i]) == std::string("--add-to-spot-config") || std::string(argv[i]) == std::string("-atsc") ) { @@ -847,7 +847,7 @@ void RunParams::printHelpMessage(std::ostream& str) const str << "\t\t Example...\n" << "\t\t --checkrun 2 (run each kernel twice)\n\n"; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) str << "\t --add-to-spot-config, -atsc [Default is none]\n" << "\t\t appends additional parameters to the built-in Caliper spot config\n"; str << "\t\t Example to include some PAPI counters (Intel arch)\n" diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index 6f7386976..c35bc56ca 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -40,7 +40,7 @@ namespace rajaperf { struct configuration { -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) constexpr static const char* adiak_perfsuite_version = "@CMAKE_PROJECT_VERSION@"; constexpr static const char* adiak_raja_version = "@RAJA_LOADED@"; constexpr static const char* adiak_cmake_build_type = "@CMAKE_BUILD_TYPE@"; @@ -59,30 +59,6 @@ constexpr static const char* adiak_systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; constexpr static const char* adiak_machine_build = "@RAJAPERF_BUILD_HOST@"; #endif -#if 0 -// Version of RAJA Perf Suite (ex: 0.1.0) -static const std::string perfsuite_version = -"@RAJA_PERFSUITE_VERSION_MAJOR@" + std::string(".") + -"@RAJA_PERFSUITE_VERSION_MINOR@" + std::string(".") + -"@RAJA_PERFSUITE_VERSION_PATCHLEVEL@"; - -// Version of RAJA used to build (ex: 0.2.4) -static const std::string raja_version = -std::to_string(RAJA::RAJA_VERSION_MAJOR) + std::string(".") + -std::to_string(RAJA::RAJA_VERSION_MINOR) + std::string(".") + -std::to_string(RAJA::RAJA_VERSION_PATCH_LEVEL); - -// Systype and machine code was built on (ex: chaos_5_x64_64, rzhasgpu18) -static const std::string systype_build = "@RAJAPERF_BUILD_SYSTYPE@"; -static const std::string machine_build = "@RAJAPERF_BUILD_HOST@"; - -// Compiler used to build (ex: gcc-4.9.3) -static const std::string compiler = "@RAJAPERF_COMPILER@"; - -// Command options used to build (ex: -Ofast -mavx) -static const std::string compiler_options = "@RAJAPERF_COMPILER_OPTIONS@"; -#endif - // helper alias to void trailing comma in no-arg case template < size_t... Is > using i_seq = camp::int_seq; diff --git a/test/test-raja-perf-suite.cpp b/test/test-raja-perf-suite.cpp index 64f7e4de2..29423c5d3 100644 --- a/test/test-raja-perf-suite.cpp +++ b/test/test-raja-perf-suite.cpp @@ -50,7 +50,7 @@ TEST(ShortSuiteTest, Basic) for (size_t is = 0; is < sargv.size(); ++is) { argv[is] = const_cast(sargv[is].c_str()); } -#ifdef RAJA_PERFSUITE_ENABLE_MPI +#if defined(RAJA_PERFSUITE_ENABLE_MPI) MPI_Init(NULL,NULL); int num_ranks; @@ -132,7 +132,7 @@ TEST(ShortSuiteTest, Basic) } // loop over variants } // loop over kernels -#ifdef RAJA_PERFSUITE_ENABLE_MPI +#if defined(RAJA_PERFSUITE_ENABLE_MPI) MPI_Finalize(); #endif From aa343892788c0b6af0cc260900369d5b2965a0c0 Mon Sep 17 00:00:00 2001 From: holger Date: Thu, 13 Apr 2023 14:09:13 -0700 Subject: [PATCH 169/174] updating commit to add clean-up for RunParams.hpp --- src/common/RunParams.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/RunParams.hpp b/src/common/RunParams.hpp index a1b3530a2..7dc377b03 100644 --- a/src/common/RunParams.hpp +++ b/src/common/RunParams.hpp @@ -203,7 +203,7 @@ class RunParams { const std::string& getOutputDirName() const { return outdir; } const std::string& getOutputFilePrefix() const { return outfile_prefix; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) const std::string& getAddToSpotConfig() const { return add_to_spot_config; } #endif @@ -289,7 +289,7 @@ class RunParams { std::string outdir; /*!< Output directory name. */ std::string outfile_prefix; /*!< Prefix for output data file names. */ -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) std::string add_to_spot_config; #endif From dc9ca71561fd3fd48a5f07ca90a2b9a5090e0a13 Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 19 Apr 2023 12:13:38 -0700 Subject: [PATCH 170/174] fixup sweep_graph from merge --- scripts/argparse_sweep_graph.py | 1 + scripts/data_classes_sweep_graph.py | 27 +++++++++++++++------------ scripts/sweep_graph.py | 26 +++++--------------------- 3 files changed, 21 insertions(+), 33 deletions(-) diff --git a/scripts/argparse_sweep_graph.py b/scripts/argparse_sweep_graph.py index 3825bfb36..125a20b0d 100644 --- a/scripts/argparse_sweep_graph.py +++ b/scripts/argparse_sweep_graph.py @@ -43,6 +43,7 @@ def check_hatchet_import(): cr = importlib.import_module("hatchet") import_submodules(cr) depends_found = True + #print(cr.__file__) except: print("Can't load Hatchet") traceback.print_exc() diff --git a/scripts/data_classes_sweep_graph.py b/scripts/data_classes_sweep_graph.py index f7d206714..d842a535e 100644 --- a/scripts/data_classes_sweep_graph.py +++ b/scripts/data_classes_sweep_graph.py @@ -143,12 +143,15 @@ def set_legend_order(labels) -> list: "kind": "throughput(GProblem size/s)", "kernels": [ "Basic_PI_REDUCE", "Basic_REDUCE3_INT", "Basic_REDUCE_STRUCT", "Basic_TRAP_INT", "Lcals_FIRST_MIN", "Stream_DOT", - "Algorithm_REDUCE_SUM", ] + "Algorithm_REDUCE_SUM", + + "Basic_PI_ATOMIC",] }, "other": { "kind": "throughput(GProblem size/s)", - "kernels": [ "Polybench_ADI", "Polybench_ATAX", "Polybench_FLOYD_WARSHALL", - "Polybench_GEMVER", "Polybench_GESUMMV", "Polybench_MVT", + "kernels": [ "Basic_PI_ATOMIC", "Polybench_ADI", "Polybench_ATAX", + "Polybench_FLOYD_WARSHALL", "Polybench_GEMVER", + "Polybench_GESUMMV", "Polybench_MVT", "Apps_LTIMES", "Apps_LTIMES_NOVIEW", "Algorithm_SORT", "Algorithm_SORTPAIRS", ] }, @@ -567,7 +570,7 @@ def axes_difference(axes, partial_axes_index): def MultiAxesTreeKeyGenerator0(data_tree): assert (len(data_tree.axes) == 0) if False: - yield {} + yield {} #unreachable def MultiAxesTreeKeyGenerator1(data_tree): assert (len(data_tree.axes) == 1) @@ -622,7 +625,7 @@ def MultiAxesTreeKeyGenerator5(data_tree): def MultiAxesTreeItemGenerator0(data_tree): assert (len(data_tree.axes) == 0) if False: - yield ({}, None,) + yield ({}, None,) #unreachable def MultiAxesTreeItemGenerator1(data_tree): assert (len(data_tree.axes) == 1) @@ -711,7 +714,7 @@ def MultiAxesTreePartialItemGenerator_helper(data_tree, partial_axes_index, def MultiAxesTreePartialItemGenerator0(data_tree, partial_axes_index): assert (len(data_tree.axes) == 0) if False: - yield ({}, None,) + yield ({}, None,) #unreachable def MultiAxesTreePartialItemGenerator1(data_tree, partial_axes_index): assert (len(data_tree.axes) == 1) @@ -752,7 +755,7 @@ def check(self, axes_index): for axis_index in self.axes: if not axis_index in axes_index: axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) + raise NameError("Missing axis {}".format(Data.get_axis_name(axis_index))) index = axes_index[axis_index] if not index in data: return False @@ -764,10 +767,10 @@ def get(self, axes_index): for axis_index in self.axes: if not axis_index in axes_index: axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) + raise NameError("Missing axis {}".format(Data.get_axis_name(axis_index))) index = axes_index[axis_index] if not index in data: - raise NameError("Missing index {}".format(index)) + raise NameError("Missing index {}".format(Data.get_axes_index_str(axes_index,index))) data = data[index] return data @@ -777,7 +780,7 @@ def set(self, axes_index, val): axis_index = self.axes[i] if not axis_index in axes_index: axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) + raise NameError("Missing axis {}".format(Data.get_axis_name(axis_index))) index = axes_index[axis_index] if not index in data: data[index] = {} @@ -785,7 +788,7 @@ def set(self, axes_index, val): axis_index = self.axes[len(self.axes) - 1] if not axis_index in axes_index: axis_name = Data.axes[axis_index] - raise NameError("Missing axis {}".format(axis_name)) + raise NameError("Missing axis {}".format(Data.get_axis_name(axis_index))) index = axes_index[axis_index] data[index] = val @@ -802,7 +805,7 @@ def axesString(self): axes_names = "" for axis_index in self.axes: if axes_names: - axes_names = "{}, {}".format(axes_names, Data.axes[axis_index]) + axes_names = "{}, {}".format(axes_names, Data.get_axis_name(axis_index)) else: axes_names = "[{}".format(Data.axes[axis_index]) return "{}]".format(axes_names) diff --git a/scripts/sweep_graph.py b/scripts/sweep_graph.py index 6b2f1db21..d24a66d0e 100755 --- a/scripts/sweep_graph.py +++ b/scripts/sweep_graph.py @@ -1,29 +1,13 @@ #!/usr/bin/env python3 - import math import os import sys import csv - import glob import numpy as np - import matplotlib.pyplot as plt - -import argparse_sweep_graph +import argparse_sweep_graph as ac import data_classes_sweep_graph as dc -# the following is edited specifically for Hatchet, but future make exclude pkgs generic -# We exclude roundtrip and vis in import check since we're not in Hatchet interactive mode - -def get_size_from_dir_name(sweep_subdir_name): - # print(sweep_subdir_name) - run_size_name = sweep_subdir_name.replace("SIZE_", "") - try: - run_size = int(run_size_name) - return str(run_size) - except ValueError: - raise NameError("Expected SIZE_".format(sweep_subdir_name)) - def read_runinfo_file(sweep_index, sweep_subdir_runinfo_file_path, run_size_index): #print("read_runinfo_file") #print(sweep_index, sweep_subdir_runinfo_file_path, run_size_index) @@ -779,7 +763,7 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): for hname in kernel_data["hnames"]: h_i = kernel_data["hnames"][hname] - xoffset = hbin_size * ((h_i+1)/(h_n+1) - 0.5) + xoffset = hbin_size * ((h_i+0.5)/h_n) hcolor = kernel_data["hcolor"][hname] hbins = kernel_data["hbins"][hname] @@ -791,7 +775,7 @@ def plot_data_histogram(outputfile_name, haxis, hkinds): xaxis = [] haxis = [] for i, hval in hbins.items(): - xval = (i + 0.5) * hbin_size + xoffset + xval = i * hbin_size + xoffset xaxis.append(xval) haxis.append(hval) @@ -838,7 +822,7 @@ def main(argv): plt.rcParams.update(params) - parser = argparse_sweep_graph.process_argparse() + parser = ac.process_argparse() args, unknown = parser.parse_args(argv) print(args) @@ -1039,7 +1023,7 @@ def main(argv): sweep_subdir_path = os.path.join(sweep_dir_path, sweep_subdir_name) # print(sweep_dir_name, sweep_subdir_path) - run_size_name = get_size_from_dir_name(sweep_subdir_name) + run_size_name = ac.get_size_from_dir_name(sweep_subdir_name) if run_size_name in args.prescan["sweep_sizes"]: if not run_size_name in dc.Data.run_sizes: dc.Data.add_run_size(run_size_name) From 835a7cb22561d0b555cb57e14a678aeee6007d9f Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Tue, 25 Apr 2023 09:32:57 -0700 Subject: [PATCH 171/174] Consistent formatting of macro usage and code --- src/common/Executor.cpp | 18 +++++++------ src/common/Executor.hpp | 2 +- src/common/KernelBase.cpp | 50 +++++++++++++++++++++++++----------- src/common/KernelBase.hpp | 13 +++++----- src/common/RAJAPerfSuite.hpp | 2 +- src/common/RunParams.cpp | 10 ++++---- src/common/RunParams.hpp | 4 +-- src/rajaperf_config.hpp.in | 2 +- 8 files changed, 62 insertions(+), 39 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index a8e4a4ac9..f5687d1ff 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -42,7 +42,7 @@ namespace rajaperf { using namespace std; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) vector split(const string str, const string regex_str) { regex regexz(regex_str); @@ -116,7 +116,7 @@ Executor::Executor(int argc, char** argv) reference_vid(NumVariants), reference_tune_idx(KernelBase::getUnknownTuningIdx()) { -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) struct configuration cc; adiak::init(NULL); adiak::user(); @@ -212,7 +212,7 @@ Executor::~Executor() for (size_t ik = 0; ik < kernels.size(); ++ik) { delete kernels[ik]; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) adiak::fini(); #endif } @@ -709,8 +709,10 @@ void Executor::setupSuite() for (VIDset::iterator vid = run_var.begin(); vid != run_var.end(); ++vid) { variant_ids.push_back( *vid ); -#ifdef RAJA_PERFSUITE_USE_CALIPER - KernelBase::setCaliperMgrVariant(*vid,run_params.getOutputDirName(),run_params.getAddToSpotConfig()); +#if defined(RAJA_PERFSUITE_USE_CALIPER) + KernelBase::setCaliperMgrVariant(*vid, + run_params.getOutputDirName(), + run_params.getAddToSpotConfig()); #endif } @@ -983,11 +985,11 @@ void Executor::runSuite() for (size_t ik = 0; ik < warmup_kernels.size(); ++ik) { KernelBase* warmup_kernel = warmup_kernels[ik]; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) warmup_kernel->caliperOff(); #endif runKernel(warmup_kernel, true); -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) warmup_kernel->caliperOn(); #endif delete warmup_kernel; @@ -1014,7 +1016,7 @@ void Executor::runSuite() } // loop over passes through suite -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) // Flush Caliper data KernelBase::setCaliperMgrFlush(); #endif diff --git a/src/common/Executor.hpp b/src/common/Executor.hpp index 22fdfce8e..2aaeeb10a 100644 --- a/src/common/Executor.hpp +++ b/src/common/Executor.hpp @@ -12,7 +12,7 @@ #include "common/RAJAPerfSuite.hpp" #include "common/RunParams.hpp" -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #include "rajaperf_config.hpp" #endif diff --git a/src/common/KernelBase.cpp b/src/common/KernelBase.cpp index ea6d9bd30..19e33d448 100644 --- a/src/common/KernelBase.cpp +++ b/src/common/KernelBase.cpp @@ -44,14 +44,34 @@ KernelBase::KernelBase(KernelID kid, const RunParams& params) running_tuning = getUnknownTuningIdx(); checksum_scale_factor = 1.0; -#ifdef RAJA_PERFSUITE_USE_CALIPER - // Init Caliper column metadata attributes; aggregatable attributes need to be initialized before manager.start() - ProblemSize_attr = cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); - Reps_attr = cali_create_attribute("Reps",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); - Iters_Rep_attr = cali_create_attribute("Iterations/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); - Kernels_Rep_attr = cali_create_attribute("Kernels/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); - Bytes_Rep_attr = cali_create_attribute("Bytes/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); - Flops_Rep_attr = cali_create_attribute("Flops/Rep",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); + +#if defined(RAJA_PERFSUITE_USE_CALIPER) + // Init Caliper column metadata attributes + // Aggregatable attributes need to be initialized before manager.start() + ProblemSize_attr = cali_create_attribute("ProblemSize", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); + Reps_attr = cali_create_attribute("Reps", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); + Iters_Rep_attr = cali_create_attribute("Iterations/Rep", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); + Kernels_Rep_attr = cali_create_attribute("Kernels/Rep", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); + Bytes_Rep_attr = cali_create_attribute("Bytes/Rep", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); + Flops_Rep_attr = cali_create_attribute("Flops/Rep", CALI_TYPE_DOUBLE, + CALI_ATTR_ASVALUE | + CALI_ATTR_AGGREGATABLE | + CALI_ATTR_SKIP_EVENTS); #endif } @@ -166,8 +186,8 @@ void KernelBase::setVariantDefined(VariantID vid) min_time[vid].resize(variant_tuning_names[vid].size(), std::numeric_limits::max()); max_time[vid].resize(variant_tuning_names[vid].size(), -std::numeric_limits::max()); tot_time[vid].resize(variant_tuning_names[vid].size(), 0.0); -#ifdef RAJA_PERFSUITE_USE_CALIPER - doCaliMetaOnce[vid].resize(variant_tuning_names[vid].size(),true); +#if defined(RAJA_PERFSUITE_USE_CALIPER) + doCaliMetaOnce[vid].resize(variant_tuning_names[vid].size(), true); #endif } @@ -255,8 +275,8 @@ void KernelBase::runKernel(VariantID vid, size_t tune_idx) return; } -#ifdef RAJA_PERFSUITE_USE_CALIPER - if(doCaliperTiming) { +#if defined(RAJA_PERFSUITE_USE_CALIPER) + if (doCaliperTiming) { KernelBase::setCaliperMgrStart(vid); } #endif @@ -331,8 +351,8 @@ void KernelBase::runKernel(VariantID vid, size_t tune_idx) } } -#ifdef RAJA_PERFSUITE_USE_CALIPER - if(doCaliperTiming) { +#if defined(RAJA_PERFSUITE_USE_CALIPER) + if (doCaliperTiming) { setCaliperMgrStop(vid); } #endif @@ -406,7 +426,7 @@ void KernelBase::print(std::ostream& os) const os << std::endl; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) void KernelBase::doOnceCaliMetaBegin(VariantID vid, size_t tune_idx) { // attributes are class variables initialized in ctor diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 468b6fab8..2857274bc 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -33,10 +33,10 @@ #include #include -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #define CALI_START \ - if(doCaliperTiming) { \ + if (doCaliperTiming) { \ std::string tstr = getVariantTuningName(running_variant,running_tuning); \ std::string kstr = getName(); \ std::string ktstr = kstr + "." + tstr; \ @@ -50,7 +50,7 @@ } #define CALI_STOP \ - if(doCaliperTiming) { \ + if (doCaliperTiming) { \ std::string tstr = getVariantTuningName(running_variant,running_tuning); \ std::string kstr = getName(); \ std::string ktstr = kstr + "." + tstr; \ @@ -398,12 +398,13 @@ class KernelBase } #endif -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) void caliperOn() { doCaliperTiming = true; } void caliperOff() { doCaliperTiming = false; } void doOnceCaliMetaBegin(VariantID vid, size_t tune_idx); void doOnceCaliMetaEnd(VariantID vid, size_t tune_idx); - static void setCaliperMgrVariant(VariantID vid, const std::string& outdir, const std::string& addToConfig) + static void setCaliperMgrVariant(VariantID vid, const std::string& outdir, + const std::string& addToConfig) { static bool ran_spot_config_check = false; bool config_ok = true; @@ -624,7 +625,7 @@ class KernelBase RAJA::Timer timer; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) bool doCaliperTiming = true; // warmup can use this to exclude timing std::vector doCaliMetaOnce[NumVariants]; cali_id_t ProblemSize_attr; // in ctor cali_create_attribute("ProblemSize",CALI_TYPE_DOUBLE,CALI_ATTR_ASVALUE | CALI_ATTR_AGGREGATABLE | CALI_ATTR_SKIP_EVENTS); diff --git a/src/common/RAJAPerfSuite.hpp b/src/common/RAJAPerfSuite.hpp index a47c2cbe9..a2adb9847 100644 --- a/src/common/RAJAPerfSuite.hpp +++ b/src/common/RAJAPerfSuite.hpp @@ -19,7 +19,7 @@ #include #include -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) #include #include #include diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index 3ccf39708..c21a1533e 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -55,7 +55,7 @@ RunParams::RunParams(int argc, char** argv) invalid_npasses_combiner_input(), outdir(), outfile_prefix("RAJAPerf"), -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) add_to_spot_config(), #endif disable_warmup(false) @@ -114,8 +114,8 @@ void RunParams::print(std::ostream& str) const str << "\n outdir = " << outdir; str << "\n outfile_prefix = " << outfile_prefix; -#ifdef RAJA_PERFSUITE_USE_CALIPER - if(add_to_spot_config.length() > 0) { +#if defined(RAJA_PERFSUITE_USE_CALIPER) + if (add_to_spot_config.length() > 0) { str << "\n add_to_spot_config = " << add_to_spot_config; } #endif @@ -639,7 +639,7 @@ void RunParams::parseCommandLineOptions(int argc, char** argv) } } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) } else if ( std::string(argv[i]) == std::string("--add-to-spot-config") || std::string(argv[i]) == std::string("-atsc") ) { @@ -847,7 +847,7 @@ void RunParams::printHelpMessage(std::ostream& str) const str << "\t\t Example...\n" << "\t\t --checkrun 2 (run each kernel twice)\n\n"; -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) str << "\t --add-to-spot-config, -atsc [Default is none]\n" << "\t\t appends additional parameters to the built-in Caliper spot config\n"; str << "\t\t Example to include some PAPI counters (Intel arch)\n" diff --git a/src/common/RunParams.hpp b/src/common/RunParams.hpp index a1b3530a2..7dc377b03 100644 --- a/src/common/RunParams.hpp +++ b/src/common/RunParams.hpp @@ -203,7 +203,7 @@ class RunParams { const std::string& getOutputDirName() const { return outdir; } const std::string& getOutputFilePrefix() const { return outfile_prefix; } -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) const std::string& getAddToSpotConfig() const { return add_to_spot_config; } #endif @@ -289,7 +289,7 @@ class RunParams { std::string outdir; /*!< Output directory name. */ std::string outfile_prefix; /*!< Prefix for output data file names. */ -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) std::string add_to_spot_config; #endif diff --git a/src/rajaperf_config.hpp.in b/src/rajaperf_config.hpp.in index 6f7386976..7d82bd3de 100644 --- a/src/rajaperf_config.hpp.in +++ b/src/rajaperf_config.hpp.in @@ -40,7 +40,7 @@ namespace rajaperf { struct configuration { -#ifdef RAJA_PERFSUITE_USE_CALIPER +#if defined(RAJA_PERFSUITE_USE_CALIPER) constexpr static const char* adiak_perfsuite_version = "@CMAKE_PROJECT_VERSION@"; constexpr static const char* adiak_raja_version = "@RAJA_LOADED@"; constexpr static const char* adiak_cmake_build_type = "@CMAKE_BUILD_TYPE@"; From ddc0a04a0d1a3b992010130ba78d06755523e3fe Mon Sep 17 00:00:00 2001 From: Rich Hornung Date: Tue, 25 Apr 2023 09:58:50 -0700 Subject: [PATCH 172/174] Cleanup and formatting --- docs/sphinx/user_guide/run.rst | 92 ++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 27 deletions(-) diff --git a/docs/sphinx/user_guide/run.rst b/docs/sphinx/user_guide/run.rst index 99309a536..26db2ed51 100644 --- a/docs/sphinx/user_guide/run.rst +++ b/docs/sphinx/user_guide/run.rst @@ -143,42 +143,55 @@ other variants. Additional Caliper Use Cases ============================ -If you specified building with Caliper `-DRAJA_PERFSUITE_USE_CALIPER=On`, -for the most part the generation of Caliper .cali files are automated. +If you specified building with Caliper (``-DRAJA_PERFSUITE_USE_CALIPER=On``), +the generation of Caliper .cali files are automated for the most part. + However, there are a couple of other supported use cases. Collecting PAPI topdown statistics on Intel Architectures --------------------------------------------------------- -On Intel systems, you can collect topdown PAPI counter statistics by using a command line switch +On Intel systems, you can collect topdown PAPI counter statistics by using +command line arguments ``--add-to-spot-config, -atsc [Default is none]`` -appends additional parameters to the built-in Caliper spot config +This appends additional parameters to the built-in Caliper spot config. -Example to include some PAPI counters (Intel arch) +To include some PAPI counters (Intel arch), add the following to the command +line ``-atsc topdown.all`` -Caliper's topdown service generates derived metrics from raw PAPI counters; a hierarchy of metrics to identify bottlenecks in out-of-order processors. This is based on an an approach described in Ahmad Yasin's paper *A Top-Down Method for Performance Analysis and Counters Architecture*. The toplevel of the hierarchy has a reliable set of four derived metrics or starting weights (sum to 1.0) which include: +Caliper's topdown service generates derived metrics from raw PAPI counters; +a hierarchy of metrics to identify bottlenecks in out-of-order processors. +This is based on an an approach described in Ahmad Yasin's paper +*A Top-Down Method for Performance Analysis and Counters Architecture*. The +top level of the hierarchy has a reliable set of four derived metrics or +starting weights (sum to 1.0) which include: -1. Frontend Bound: stalls attributed to the front end which is responsible for fetching and decoding program code. -2. Bad Speculation: fraction of the workload that is affected by incorrect execution paths, i.e. branch misprediction penalties -3. Retiring: Increases in this category reflects overall Instructions Per Cycle (IPC) fraction which is good in general. However, a large retiring fraction for non-vectorized code could also be a hint to the user to vectorize their code (see Yasin's paper) -4. Backend Bound: Memory Bound where execution stalls are related to the memory subsystem, or Core Bound where execution unit occupancy is sub-optimal lowering IPC (more compiler dependent) +#. **Frontend Bound.** Stalls attributed to the front end which is responsible for fetching and decoding program code. +#. **Bad Speculation.** Fraction of the workload that is affected by incorrect execution paths, i.e. branch misprediction penalties +#. **Retiring.** Increases in this category reflects overall Instructions Per Cycle (IPC) fraction which is good in general. However, a large retiring fraction for non-vectorized code could also be a hint to the user to vectorize their code (see Yasin's paper) +#. **Backend Bound.** Memory Bound where execution stalls are related to the memory subsystem, or Core Bound where execution unit occupancy is sub-optimal lowering IPC (more compiler dependent) -> Backend Bound = 1 - (Frontend Bound + Bad Speculation + Retiring) +.. note:: Backend Bound = 1 - (Frontend Bound + Bad Speculation + Retiring) -Caveats: +.. note:: Caveats: -1. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only a single PAPI context. -2. Small kernels should be run at large problem sizes to minimize anomalous readings -3. Measured values are only relevant for the innermost level of the Caliper tree hierarchy, i.e. kernel.tuning under investigation -4. Some lower level derived quantities may still appear anomalous with negative values. Collecting raw counters can help identify the discrepancy + #. When collecting PAPI data in this way you'll be limited to running only one variant, since Caliper maintains only one PAPI context. + #. Small kernels should be run at large problem sizes to minimize + anomalous readings. + #. Measured values are only relevant for the innermost level of the + Caliper tree hierarchy, i.e. Kernel.Tuning under investigation. + #. Some lower level derived quantities may appear anomalous + with negative values. Collecting raw counters can help identify + the discrepancy. ``-atsc topdown-counters.all`` -A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Kernel.Tuning) nodes across several files using -atsc topdown.toplevel:: +A Hatchet-based snippet to fetch ``topdown.toplevel`` metric values at the leaf +(Kernel.Tuning) nodes across several files using ``-atsc topdown.toplevel``:: def load_toplevel(cr): md = {} @@ -204,10 +217,25 @@ A Hatchet based snippet to fetch topdown.toplevel metric values at the leaf (Ker md[metric[mindex]] = np.average(values[:,mindex]) return values,md +.. note:: Caveat for the code snippet above. If you run + ``-atsc topdown.toplevel,profile.mpi`` then the MPI Barrier routine + will be nested at the leaf node vs. expected Kernel.Tuning + +.. note:: Other caveats: Raw counter values are often noisy and require a lot + of accommodation to collect accurate data including: + + * Turning off Hyperthreading + * Turning off Prefetch as is done in Intel's Memory Latency + Checker (requires root access) + * Adding LFENCE instruction to serialize and bracket code under + test + * Disabling preemption and hard interrupts -> Caveat for the code snippet above. If you run -atsc topdown.toplevel,profile.mpi then the MPI Barrier routine will be nested at the leaf node vs expected Kernel.Tuning + See Andreas Abel's dissertation `Automatic Generation of Models of + Microarchitectures` for more info on this and for a comprehensive + look at the nanobench machinery. -> Other caveats: raw counter values are often noisy and require a lot of accommodation to collect accurate data; these include turning off Hyperthreading, turning off Prefetch as is done in Intel's Memory Latency Checker (requires Root), adding LFENCE instruction to serialize and bracket code under test, disable preemption and hard interrupts. See Andreas Abel's dissertation "Automatic Generation of Models of Microarchitectures" for more info on this and for a comprehensive look at the nanobench machinery. +Some helpful references: `Yasin's Paper `_ @@ -220,29 +248,39 @@ Generating trace events (time-series) for viewing in chrome://tracing or Perfett `Perfetto `_ -Use Caliper's event trace service to collect timestamp info, where kernel timing can be viewed using browser trace profile views +Use Caliper's event trace service to collect timestamp info, where kernel +timing can be viewed using browser trace profile views. For example, ``CALI_CONFIG=event-trace,event.timestamps ./raja-perf.exe -ek PI_ATOMIC INDEXLIST -sp`` -This will produce a separate .cali file with date prefix which looks something like 221108-100718_724_ZKrHC68b77Yd.cali +This will produce a separate .cali file with date prefix which looks something +like ``221108-100718_724_ZKrHC68b77Yd.cali`` -Then we'll need to convert this .cali file to JSON records, but first we need to make sure Caliper's python reader is available in the PYTHONPATH, +Then, we need to convert this .cali file to JSON records. But first, we need +to make sure Caliper's python reader is available in the ``PYTHONPATH`` +environment variable ``export PYTHONPATH=caliper-source-dir/python/caliper-reader`` -then run cali2traceevent.py. Example: +then run ``cali2traceevent.py``. For example, ``python3 ~/workspace/Caliper/python/cali2traceevent.py 221108-102406_956_9WkZo6xvetnu.cali RAJAPerf.trace.json`` -You can then load the resulting JSON file either in Chrome by going to chrome://tracing or in Perfetto. +You can then load the resulting JSON file either in Chrome by going to +``chrome://tracing`` or in ``Perfetto``. -For CUDA, assuming you built Caliper with CUDA support, you can collect and combine trace information for memcpy, kernel launch, synchronization, and kernels; with example: +For CUDA, assuming you built Caliper with CUDA support, you can collect and +combine trace information for memcpy, kernel launch, synchronization, and +kernels. For example, ``CALI_CONFIG="event-trace(event.timestamps,trace.cuda=true,cuda.activities)" ./raja-perf.exe -v RAJA_CUDA Base_CUDA -k Algorithm_REDUCE_SUM -sp`` -However, when you run cali2traceevent.py you need to add --sort option before the filenames. +However, when you run ``cali2traceevent.py`` you need to add the ``--sort`` +option before the filenames, such as ``~/workspace/Caliper/python/cali2traceevent.py --sort file.cali file.json`` -For HIP substitute rocm.activities vs. cuda.activities; note currently there is no analog trace.rocm. +For HIP, substitute ``rocm.activities`` for ``cuda.activities``. + +.. note:: Currently there is no analog ``trace.rocm``. From 1954dd849cd6c0469e7050b566a57a8dbb927e65 Mon Sep 17 00:00:00 2001 From: holger Date: Mon, 1 May 2023 11:43:55 -0700 Subject: [PATCH 173/174] move sweep relate scripts into their own directory --- scripts/{ => sweep}/argparse_sweep_graph.py | 0 scripts/{ => sweep}/data_classes_sweep_graph.py | 0 scripts/{ => sweep}/sweep_graph.py | 0 scripts/{ => sweep}/sweep_size.sh | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename scripts/{ => sweep}/argparse_sweep_graph.py (100%) rename scripts/{ => sweep}/data_classes_sweep_graph.py (100%) rename scripts/{ => sweep}/sweep_graph.py (100%) rename scripts/{ => sweep}/sweep_size.sh (100%) diff --git a/scripts/argparse_sweep_graph.py b/scripts/sweep/argparse_sweep_graph.py similarity index 100% rename from scripts/argparse_sweep_graph.py rename to scripts/sweep/argparse_sweep_graph.py diff --git a/scripts/data_classes_sweep_graph.py b/scripts/sweep/data_classes_sweep_graph.py similarity index 100% rename from scripts/data_classes_sweep_graph.py rename to scripts/sweep/data_classes_sweep_graph.py diff --git a/scripts/sweep_graph.py b/scripts/sweep/sweep_graph.py similarity index 100% rename from scripts/sweep_graph.py rename to scripts/sweep/sweep_graph.py diff --git a/scripts/sweep_size.sh b/scripts/sweep/sweep_size.sh similarity index 100% rename from scripts/sweep_size.sh rename to scripts/sweep/sweep_size.sh From c5bc6883abc44fd181131406df039ffbec38d1ae Mon Sep 17 00:00:00 2001 From: holger Date: Wed, 10 May 2023 12:52:39 -0700 Subject: [PATCH 174/174] finesse docs wrt to several python script examples, either by removing from doc and referring to file with function, or note indicating dependency version --- docs/sphinx/user_guide/build.rst | 9 +++++--- docs/sphinx/user_guide/output.rst | 8 ++++++++ docs/sphinx/user_guide/run.rst | 33 ++++-------------------------- scripts/gitlab/hatchet-analysis.py | 32 +++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/docs/sphinx/user_guide/build.rst b/docs/sphinx/user_guide/build.rst index 346ffdda8..d44ef0a3b 100644 --- a/docs/sphinx/user_guide/build.rst +++ b/docs/sphinx/user_guide/build.rst @@ -218,8 +218,10 @@ RAJAPerf Suite may also use Caliper instrumentation, with per variant output int Spot/Hatchet .cali files. Original timing is nested within Caliper annotations and so is not impacted when Caliper support is turned on. While Caliper is low-overhead it is not zero, so it will add a small amount of timing skew in its data as -compared to the original. For much more on Caliper, read it's documentation here: -[Caliper] (http://software.llnl.gov/Caliper/) +compared to the original. For much more on Caliper and Hatchet, read their documentation here: + | - `Caliper Documentation `_ + | - `Hatchet User Guide `_ + Caliper *annotation* is in the following tree structure @@ -250,4 +252,5 @@ If you intend on passing nvtx or roctx annotation to Nvidia or AMD profiling too build Caliper with +cuda cuda_arch=XX or +rocm respectively. Then you can specify an additional Caliper service for nvtx or roctx like so: roctx example: -CALI_SERVICES_ENABLE=roctx rocprof --roctx-trace --hip-trace raja-perf.exe \ No newline at end of file +CALI_SERVICES_ENABLE=roctx rocprof --roctx-trace --hip-trace raja-perf.exe + diff --git a/docs/sphinx/user_guide/output.rst b/docs/sphinx/user_guide/output.rst index da5aee421..7ffc9eae8 100644 --- a/docs/sphinx/user_guide/output.rst +++ b/docs/sphinx/user_guide/output.rst @@ -208,6 +208,14 @@ For example print out the OpenMP Max Threads value recorded at runtime:: or the variant represented in this file:: print('Variant: ' + r.globals['variant']) + + +.. note:: The script above was written using caliper-reader 0.3.0, + but is fairly generic. Other version usage notes may be + found at the link below + +`caliper-reader `_ + 3: Using the *Hatchet* Python module:: diff --git a/docs/sphinx/user_guide/run.rst b/docs/sphinx/user_guide/run.rst index 5f22ad4b7..d8ddb8cfe 100644 --- a/docs/sphinx/user_guide/run.rst +++ b/docs/sphinx/user_guide/run.rst @@ -191,35 +191,10 @@ starting weights (sum to 1.0) which include: ``-atsc topdown-counters.all`` A Hatchet-based snippet to fetch ``topdown.toplevel`` metric values at the leaf -(Kernel.Tuning) nodes across several files using ``-atsc topdown.toplevel``:: - - def load_toplevel(cr): - md = {} - metric = [] - metric.append('any#any#topdown.retiring') - metric.append('any#any#topdown.backend_bound') - metric.append('any#any#topdown.frontend_bound') - metric.append('any#any#topdown.bad_speculation') - values = np.zeros((3, 4)) - files = sorted(glob.glob('data/*topleve*.cali')) - findex = 0 - for f in files: - print(f) - gf = cr.GraphFrame.from_caliperreader(f) - tt = gf.graph.roots[0].traverse(order="pre") - for nn in tt: - # test if leaf node - if not nn.children: - for mindex in range(0, 4): - values[findex, mindex] = gf.dataframe.loc[nn, metric[mindex]] - findex += 1 - for mindex in range(0,len(metric)): - md[metric[mindex]] = np.average(values[:,mindex]) - return values,md - -.. note:: Caveat for the code snippet above. If you run - ``-atsc topdown.toplevel,profile.mpi`` then the MPI Barrier routine - will be nested at the leaf node vs. expected Kernel.Tuning +(Kernel.Tuning) nodes across several files can be found in the source tree at: + | scripts/gitlab/hatchet-analysis.py + | def load_toplevel(ht) + .. note:: Other caveats: Raw counter values are often noisy and require a lot of accommodation to collect accurate data including: diff --git a/scripts/gitlab/hatchet-analysis.py b/scripts/gitlab/hatchet-analysis.py index 0c7e075df..10d9194e2 100755 --- a/scripts/gitlab/hatchet-analysis.py +++ b/scripts/gitlab/hatchet-analysis.py @@ -23,6 +23,38 @@ import hatchet as ht +# Free function example to extract PAPI topdown.toplevel metric values at the +# Kernel.Tuning nodes +# For the case when you run -atsc topdown.toplevel +# +# Caveat for the code snippet below. Avoid running +# -atsc topdown.toplevel,profile.mpi`` since the MPI Barrier routine +# will be nested at the leaf node vs. expected Kernel.Tuning +def load_toplevel(ht): + md = {} + metric = [] + metric.append('any#any#topdown.retiring') + metric.append('any#any#topdown.backend_bound') + metric.append('any#any#topdown.frontend_bound') + metric.append('any#any#topdown.bad_speculation') + values = np.zeros((3, 4)) + files = sorted(glob.glob('data/*topleve*.cali')) + findex = 0 + for f in files: + print(f) + gf = cr.GraphFrame.from_caliperreader(f) + tt = gf.graph.roots[0].traverse(order="pre") + for nn in tt: + # test if leaf node + if not nn.children: + for mindex in range(0, 4): + values[findex, mindex] = gf.dataframe.loc[nn, metric[mindex]] + findex += 1 + for mindex in range(0,len(metric)): + md[metric[mindex]] = np.average(values[:,mindex]) + return values,md + + # This class turns an existing GraphFrame into a "generic" one by renaming # the root node into a generic node. We can then compare 2 "generic" graph # frame. In practice we use it to allow Hatchet to compare performance trees