diff --git a/.github/workflows/rocprofiler-systems-debian.yml b/.github/workflows/rocprofiler-systems-debian.yml index 0e31ccf318..2ef0c5fe8b 100644 --- a/.github/workflows/rocprofiler-systems-debian.yml +++ b/.github/workflows/rocprofiler-systems-debian.yml @@ -127,7 +127,7 @@ jobs: -DROCPROFSYS_PYTHON_PREFIX=/opt/conda/envs \ -DROCPROFSYS_PYTHON_ENVS="py3.8;py3.9;py3.10;py3.11;py3.12;py3.13" \ -DROCPROFSYS_MAX_THREADS=64 \ - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target" \ + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv-offload" \ -DROCPROFSYS_BUILD_NUMBER=1 \ -DUSE_CLANG_OMP=OFF \ $CMAKE_PREFIX_PATH_ARG \ diff --git a/.github/workflows/rocprofiler-systems-opensuse.yml b/.github/workflows/rocprofiler-systems-opensuse.yml index d3d7fb32e3..49ec20af97 100644 --- a/.github/workflows/rocprofiler-systems-opensuse.yml +++ b/.github/workflows/rocprofiler-systems-opensuse.yml @@ -110,7 +110,7 @@ jobs: -DROCPROFSYS_PYTHON_ENVS="py3.6;py3.7;py3.8;py3.9;py3.10;py3.11" -DROCPROFSYS_CI_MPI_RUN_AS_ROOT=ON -DROCPROFSYS_MAX_THREADS=64 - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;videodecode;jpegdecode" + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv-offload;videodecode;jpegdecode" -DROCPROFSYS_BUILD_NUMBER=${{ github.run_attempt }} -- -LE "transpose|rccl|videodecode|jpegdecode|network|mpi" diff --git a/.github/workflows/rocprofiler-systems-redhat.yml b/.github/workflows/rocprofiler-systems-redhat.yml index 63b490e052..26bf510089 100644 --- a/.github/workflows/rocprofiler-systems-redhat.yml +++ b/.github/workflows/rocprofiler-systems-redhat.yml @@ -128,7 +128,7 @@ jobs: -DROCPROFSYS_INSTALL_PERFETTO_TOOLS=OFF -DROCPROFSYS_PYTHON_PREFIX=/opt/conda/envs -DROCPROFSYS_PYTHON_ENVS="py3.6;py3.7;py3.8;py3.9;py3.10;py3.11" - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target" + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv-offload" -DROCPROFSYS_BUILD_NUMBER=${{ github.run_attempt }} -- -LE "transpose|rccl|videodecode|jpegdecode|network" diff --git a/.github/workflows/rocprofiler-systems-ubuntu-jammy.yml b/.github/workflows/rocprofiler-systems-ubuntu-jammy.yml index 2222b383ed..a444f313d8 100644 --- a/.github/workflows/rocprofiler-systems-ubuntu-jammy.yml +++ b/.github/workflows/rocprofiler-systems-ubuntu-jammy.yml @@ -132,7 +132,7 @@ jobs: -DROCPROFSYS_PYTHON_ENVS="py3.7;py3.8;py3.9;py3.10;py3.11" \ -DROCPROFSYS_STRIP_LIBRARIES=${{ matrix.strip }} \ -DROCPROFSYS_MAX_THREADS=64 \ - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target" \ + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv" \ -DROCPROFSYS_BUILD_NUMBER=${{ github.run_attempt }} \ -DUSE_CLANG_OMP=OFF \ -- \ @@ -311,7 +311,7 @@ jobs: -DROCPROFSYS_PYTHON_ENVS="py3.7;py3.8;py3.9;py3.10;py3.11" \ -DROCPROFSYS_STRIP_LIBRARIES=${{ matrix.strip }} \ -DROCPROFSYS_MAX_THREADS=64 \ - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target" \ + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv" \ -DROCPROFSYS_BUILD_NUMBER=${{ github.run_attempt }} \ -DUSE_CLANG_OMP=OFF \ -- \ diff --git a/.github/workflows/rocprofiler-systems-ubuntu-noble.yml b/.github/workflows/rocprofiler-systems-ubuntu-noble.yml index 898207a7b9..7d83ebbdac 100644 --- a/.github/workflows/rocprofiler-systems-ubuntu-noble.yml +++ b/.github/workflows/rocprofiler-systems-ubuntu-noble.yml @@ -126,7 +126,7 @@ jobs: -DROCPROFSYS_PYTHON_PREFIX=/opt/conda/envs \ -DROCPROFSYS_PYTHON_ENVS="py3.8;py3.9;py3.10;py3.11;py3.12;py3.13" \ -DROCPROFSYS_MAX_THREADS=64 \ - -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;lulesh" \ + -DROCPROFSYS_DISABLE_EXAMPLES="transpose;rccl;openmp-target;openmp-vv-offload;lulesh" \ -DROCPROFSYS_BUILD_NUMBER=1 \ -DUSE_CLANG_OMP=OFF \ $CMAKE_PREFIX_PATH_ARG \ diff --git a/.gitmodules b/.gitmodules index 9f839ea327..fae0dc770e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -76,3 +76,6 @@ [submodule "projects/rocprofiler-systems/external/pybind11"] path = projects/rocprofiler-systems/external/pybind11 url = https://github.com/jrmadsen/pybind11.git +[submodule "projects/rocprofiler-systems/examples/openmp/external/ompvv"] + path = projects/rocprofiler-systems/examples/openmp/external/ompvv + url = https://github.com/OpenMP-Validation-and-Verification/OpenMP_VV.git diff --git a/projects/rocprofiler-systems/examples/openmp/CMakeLists.txt b/projects/rocprofiler-systems/examples/openmp/CMakeLists.txt index f143d1eb2a..79d167d07e 100644 --- a/projects/rocprofiler-systems/examples/openmp/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/openmp/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (c) Advanced Micro Devices, Inc. +# SPDX-License-Identifier: MIT + cmake_minimum_required(VERSION 3.21 FATAL_ERROR) project(rocprofiler-systems-openmp LANGUAGES CXX) @@ -90,6 +93,33 @@ if(ROCPROFSYS_INSTALL_EXAMPLES) ) endif() +set(DEFAULT_GPU_TARGETS + "gfx900" + "gfx906" + "gfx908" + "gfx90a" + "gfx940" + "gfx941" + "gfx942" + "gfx950" + "gfx1030" + "gfx1010" + "gfx1100" + "gfx1101" + "gfx1102" +) + +set(GPU_TARGETS "${DEFAULT_GPU_TARGETS}" CACHE STRING "GPU targets to compile for") + +if(ROCPROFSYS_USE_ROCM) + add_subdirectory(external) +else() + rocprofiler_systems_message( + WARNING + "ROCPROFSYS OMPVV CTests requires ROCm to be installed. Disabling OMPVV CTests..." + ) +endif() + if(ROCPROFSYS_DISABLE_EXAMPLES) if(NOT "openmp-target" IN_LIST ROCPROFSYS_DISABLE_EXAMPLES) add_subdirectory(target) diff --git a/projects/rocprofiler-systems/examples/openmp/external/CMakeLists.txt b/projects/rocprofiler-systems/examples/openmp/external/CMakeLists.txt new file mode 100644 index 0000000000..dad3ece0a9 --- /dev/null +++ b/projects/rocprofiler-systems/examples/openmp/external/CMakeLists.txt @@ -0,0 +1,325 @@ +# Copyright (c) Advanced Micro Devices, Inc. +# SPDX-License-Identifier: MIT + +# ----------------------------------------------------------------------------------------# +# +# OMPVV (OpenMP Validation and Verification) submodule +# +# * Currently, GNU's libgomp cannot be used to capture traces. Only LLVM's +# LIBOMP can be used for trace capture +# * amdflang uses LIBOMP 201611 (5.0), but not all OpenMP 5.0 features are +# implemented. Only a subset of tests can be compiled. +# ----------------------------------------------------------------------------------------# + +set(OMPVV_USE_OFFLOAD_TESTS FALSE) +if(ROCPROFSYS_DISABLE_EXAMPLES) + if("openmp-vv" IN_LIST ROCPROFSYS_DISABLE_EXAMPLES) + return() + endif() + if(NOT "openmp-vv-offload" IN_LIST ROCPROFSYS_DISABLE_EXAMPLES) + set(OMPVV_USE_OFFLOAD_TESTS TRUE) + endif() +else() + set(OMPVV_USE_OFFLOAD_TESTS TRUE) +endif() + +rocprofiler_systems_message(STATUS "Configuring OMPVV...") + +# Master branch contains stable releases +rocprofiler_systems_checkout_git_submodule( + RELATIVE_PATH + external/ompvv + WORKING_DIRECTORY + ${PROJECT_SOURCE_DIR} + TEST_FILE + Makefile + REPO_URL + https://github.com/OpenMP-Validation-and-Verification/OpenMP_VV.git + REPO_BRANCH + "master" +) + +set(ROCPROFSYS_OMPVV_SUBMODULE_DIR "${PROJECT_SOURCE_DIR}/external/ompvv") +set(ROCPROFSYS_OMPVV_SOURCE_DIR "${CMAKE_BINARY_DIR}/examples/openmp/external/ompvv") +set(OMPVV_MAKEDEF_FILE "sys/make/make.def") + +# ---------------------------------------------------------------------------------------# +# Helper functions +# ---------------------------------------------------------------------------------------# + +# Updates the make.def FOFFLOADING flag +function(update_make_def_foffloading FOFFLOADING_FLAGS) + file(READ ${ROCPROFSYS_OMPVV_SOURCE_DIR}/${OMPVV_MAKEDEF_FILE} MAKE_DEF_CONTENT) + + string( + REGEX REPLACE + "FOFFLOADING[ \t]*=[ \t]*-fopenmp[^\n\r]*" + "FOFFLOADING = ${FOFFLOADING_FLAGS}" + MAKE_DEF_CONTENT + "${MAKE_DEF_CONTENT}" + ) + + file(WRITE ${ROCPROFSYS_OMPVV_SOURCE_DIR}/${OMPVV_MAKEDEF_FILE} "${MAKE_DEF_CONTENT}") +endfunction() + +# Individually compiles a given list of tests +function(compile_ompvv_tests TEST_LIST_VAR) + # OMPVV doesn't support building subsets of test folders + foreach(test IN LISTS ${TEST_LIST_VAR}) + rocprofiler_systems_message(STATUS "Compiling OMPVV test: ${test}") + + execute_process( + COMMAND + make FC=${OMPVV_FC} DEVICE_TYPE=amd OMP_VERSION=${OMPVV_OPENMP_VERSION} + NUM_THREADS_HOST=${OMPVV_NUM_THREADS_HOST} + NUM_THREADS_DEVICE=${OMPVV_NUM_THREADS_DEVICE} + NUM_TEAMS_DEVICE=${OMPVV_NUM_TEAMS_DEVICE} "SOURCES=${test}" compile + WORKING_DIRECTORY ${ROCPROFSYS_OMPVV_SOURCE_DIR} + RESULT_VARIABLE OMPVV_BUILD_RESULT + OUTPUT_VARIABLE OMPVV_BUILD_OUTPUT + ERROR_VARIABLE OMPVV_BUILD_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + + if(NOT OMPVV_BUILD_RESULT EQUAL 0) + rocprofiler_systems_message( + FATAL_ERROR "OMPVV build failed for ${test}: ${OMPVV_BUILD_ERROR}" + ) + endif() + endforeach() +endfunction() + +# ---------------------------------------------------------------------------------------# +# Copy OMPVV to build folder +# ---------------------------------------------------------------------------------------# + +if(NOT EXISTS "${ROCPROFSYS_OMPVV_SOURCE_DIR}") + execute_process( + COMMAND + ${CMAKE_COMMAND} -E copy_directory ${ROCPROFSYS_OMPVV_SUBMODULE_DIR} + ${ROCPROFSYS_OMPVV_SOURCE_DIR} + ) +endif() + +# ---------------------------------------------------------------------------------------# +# Compiler setup +# ---------------------------------------------------------------------------------------# + +# OMPVV requires amdclang++ +find_program( + amdclangpp_EXECUTABLE + NAMES amdclang++ + HINTS ${ROCM_PATH} + ENV ROCM_PATH + /opt/rocm + PATHS ${ROCM_PATH} + ENV ROCM_PATH + /opt/rocm + PATH_SUFFIXES bin llvm/bin +) +mark_as_advanced(amdclangpp_EXECUTABLE) + +if(NOT amdclangpp_EXECUTABLE) + rocprofiler_systems_message( + FATAL_ERROR + "Could not find amdclang++. This is required for the OMPVV tests." + ) +endif() + +find_program( + amdflang_EXECUTABLE + NAMES amdflang + HINTS ${ROCM_PATH} + ENV ROCM_PATH + /opt/rocm + PATHS ${ROCM_PATH} + ENV ROCM_PATH + /opt/rocm + PATH_SUFFIXES bin llvm/bin +) +mark_as_advanced(amdflang_EXECUTABLE) + +if(NOT amdflang_EXECUTABLE) + rocprofiler_systems_message( + FATAL_ERROR + "Could not find amdflang. This is required for the OMPVV tests." + ) +endif() + +set(OMPVV_COMPILER + "${amdflang_EXECUTABLE}" + CACHE FILEPATH + "Fortran compiler used for OMPVV tests" +) +set(OMPVV_FC "amdflang") + +execute_process( + COMMAND ${amdflang_EXECUTABLE} --version + OUTPUT_VARIABLE AMDFLANG_VERSION_CMD_OUTPUT + RESULT_VARIABLE AMDFLANG_VERSION_CMD_RESULT +) + +set(AMDFLANG_FULL_VERSION "") + +if(AMDFLANG_VERSION_CMD_RESULT EQUAL 0) + string( + REGEX MATCH + "version ([0-9]+)\\.([0-9]+)\\.([0-9]+)" + VERSION_MATCH + "${AMDFLANG_VERSION_CMD_OUTPUT}" + ) + if(VERSION_MATCH) + set(AMDFLANG_VERSION_MAJOR "${CMAKE_MATCH_1}") + set(AMDFLANG_VERSION_MINOR "${CMAKE_MATCH_2}") + set(AMDFLANG_VERSION_PATCH "${CMAKE_MATCH_3}") + set(AMDFLANG_FULL_VERSION + "${AMDFLANG_VERSION_MAJOR}.${AMDFLANG_VERSION_MINOR}.${AMDFLANG_VERSION_PATCH}" + ) + rocprofiler_systems_message(STATUS "Detected amdflang version: ${AMDFLANG_FULL_VERSION}") + endif() +endif() + +if(NOT AMDFLANG_FULL_VERSION) + rocprofiler_systems_message(FATAL_ERROR "Failed to detect amdflang version.") +endif() + +# ---------------------------------------------------------------------------------------# +# Variables +# ---------------------------------------------------------------------------------------# + +set(OMPVV_OPENMP_VERSION 5.0) +set(OMPVV_TDIR "tests/${OMPVV_OPENMP_VERSION}") +set(OMPVV_NUM_THREADS_HOST ${ROCPROFSYS_THREAD_COUNT}) +set(OMPVV_NUM_TEAMS_DEVICE 8) # default used by ompvv +set(OMPVV_NUM_THREADS_DEVICE 8) # default used by ompvv + +# Files listed below are OpenMP 5.0 tests that compile for +# amdflang 20.0, 19.0 and 18.0. +# Set of host only tests to be compiled +set(OMPVV_HOST_TESTS_TO_COMPILE + "${OMPVV_TDIR}/teams/test_team_default_shared.F90" + "${OMPVV_TDIR}/parallel_for_simd/test_parallel_for_simd_atomic.F90" +) + +# Set of offloading tests to be compiled (excluding reduction and simd_atomic +# tests due to OMPVV test failure) +set(OMPVV_OFFLOAD_TESTS_TO_COMPILE "") +if(OMPVV_USE_OFFLOAD_TESTS) + set(OMPVV_OFFLOAD_TESTS_TO_COMPILE + "${OMPVV_TDIR}/target_simd/test_target_simd_if.F90" + "${OMPVV_TDIR}/target_teams_distribute_parallel_for/test_target_teams_distribute_parallel_for_collapse.F90" + ) +endif() + +# if(AMDFLANG_VERSION_MAJOR EQUAL 20) +# list(APPEND OMPVV_HOST_TESTS_TO_COMPILE +# "${OMPVV_TDIR}/task/test_task_detach.F90" +# ) +# endif() + +# ---------------------------------------------------------------------------------------# +# Compile tests +# ---------------------------------------------------------------------------------------# + +# Remove all -O3 flags to prevent function inlining +file(READ ${ROCPROFSYS_OMPVV_SOURCE_DIR}/${OMPVV_MAKEDEF_FILE} MAKE_DEF_CONTENT) +string(REGEX REPLACE "-O3[ \t]*" "" MAKE_DEF_CONTENT "${MAKE_DEF_CONTENT}") +file(WRITE ${ROCPROFSYS_OMPVV_SOURCE_DIR}/${OMPVV_MAKEDEF_FILE} "${MAKE_DEF_CONTENT}") + +# OMPVV makefile option NO_OFFLOADING not supported for amdflang, +# must manually do it +set(OMPVV_HOST_FOFFLOADING_FLAGS "-fopenmp --offload-host-only") +update_make_def_foffloading("${OMPVV_HOST_FOFFLOADING_FLAGS}") +compile_ompvv_tests(OMPVV_HOST_TESTS_TO_COMPILE) + +if(OMPVV_USE_OFFLOAD_TESTS) + set(OMPVV_OFFLOAD_FOFFLOADING_FLAGS "-fopenmp") + foreach(arch IN LISTS DEFAULT_GPU_TARGETS) + set(OMPVV_OFFLOAD_FOFFLOADING_FLAGS + "${OMPVV_OFFLOAD_FOFFLOADING_FLAGS} --offload-arch=${arch}" + ) + endforeach() + update_make_def_foffloading("${OMPVV_OFFLOAD_FOFFLOADING_FLAGS}") + compile_ompvv_tests(OMPVV_OFFLOAD_TESTS_TO_COMPILE) +endif() + +# ---------------------------------------------------------------------------------------# +# Copy generated binaries to top level of build folder +# ---------------------------------------------------------------------------------------# + +set(OMPVV_BIN_SOURCE "${ROCPROFSYS_OMPVV_SOURCE_DIR}/bin") +set(OMPVV_BIN_DEST "${CMAKE_BINARY_DIR}") + +set(ROCPROFSYS_OMPVV_HOST_TESTS "") +set(ROCPROFSYS_OMPVV_OFFLOAD_TESTS "") + +file(GLOB OMPVV_BINARIES "${OMPVV_BIN_SOURCE}/*") + +foreach(OMPVV_BIN ${OMPVV_BINARIES}) + get_filename_component(BIN_NAME ${OMPVV_BIN} NAME_WE) + + # Determine type of test + set(IS_HOST_TEST FALSE) + set(IS_OFFLOAD_TEST FALSE) + foreach(host_test IN LISTS OMPVV_HOST_TESTS_TO_COMPILE) + get_filename_component(HOST_TEST_NAME ${host_test} NAME_WE) + if(BIN_NAME STREQUAL HOST_TEST_NAME) + set(IS_HOST_TEST TRUE) + break() + endif() + endforeach() + + if(NOT IS_HOST_TEST AND OMPVV_USE_OFFLOAD_TESTS) + foreach(offload_test IN LISTS OMPVV_OFFLOAD_TESTS_TO_COMPILE) + get_filename_component(OFFLOAD_TEST_NAME ${offload_test} NAME_WE) + if(BIN_NAME STREQUAL OFFLOAD_TEST_NAME) + set(IS_OFFLOAD_TEST TRUE) + break() + endif() + endforeach() + endif() + + if(NOT IS_HOST_TEST AND NOT IS_OFFLOAD_TEST) + continue() + endif() + + # For consistent naming with other tests + string(REGEX REPLACE "\\.F90$" "" NEW_BIN_NAME ${BIN_NAME}) + string(REPLACE "_" "-" NEW_BIN_NAME ${NEW_BIN_NAME}) + + file(COPY "${OMPVV_BIN}" DESTINATION "${OMPVV_BIN_DEST}") + + if(IS_HOST_TEST) + set(TARGET_NAME "openmp-vv-host-${NEW_BIN_NAME}") + list(APPEND ROCPROFSYS_OMPVV_HOST_TESTS ${TARGET_NAME}) + elseif(IS_OFFLOAD_TEST) + set(TARGET_NAME "openmp-vv-offload-${NEW_BIN_NAME}") + list(APPEND ROCPROFSYS_OMPVV_OFFLOAD_TESTS ${TARGET_NAME}) + endif() + + file(RENAME "${OMPVV_BIN_DEST}/${BIN_NAME}.F90.o" "${OMPVV_BIN_DEST}/${TARGET_NAME}") + add_executable(${TARGET_NAME} IMPORTED GLOBAL) + set_target_properties( + ${TARGET_NAME} + PROPERTIES IMPORTED_LOCATION "${OMPVV_BIN_DEST}/${TARGET_NAME}" + ) +endforeach() + +set(ROCPROFSYS_OMPVV_HOST_TESTS + "${ROCPROFSYS_OMPVV_HOST_TESTS}" + CACHE STRING + "Internal variable used to generate OMPVV Host CTests" + FORCE +) + +set(ROCPROFSYS_OMPVV_OFFLOAD_TESTS + "${ROCPROFSYS_OMPVV_OFFLOAD_TESTS}" + CACHE STRING + "Internal variable used to generate OMPVV Offload CTests" + FORCE +) + +rocprofiler_systems_message(STATUS + "Successfully built and compiled OMPVV tests" +) diff --git a/projects/rocprofiler-systems/examples/openmp/external/ompvv b/projects/rocprofiler-systems/examples/openmp/external/ompvv new file mode 160000 index 0000000000..2d06fc22ac --- /dev/null +++ b/projects/rocprofiler-systems/examples/openmp/external/ompvv @@ -0,0 +1 @@ +Subproject commit 2d06fc22ac62f418cb02c435f08b7e46bb8f3c5b diff --git a/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt b/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt index 225a64e233..138f565d77 100644 --- a/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (c) Advanced Micro Devices, Inc. +# SPDX-License-Identifier: MIT + cmake_minimum_required(VERSION 3.21 FATAL_ERROR) if(NOT OMP_TARGET_COMPILER) @@ -30,24 +33,6 @@ project(rocprofiler-systems-example-openmp-target-lib LANGUAGES CXX) set(CMAKE_BUILD_TYPE "RelWithDebInfo") -set(DEFAULT_GPU_TARGETS - "gfx900" - "gfx906" - "gfx908" - "gfx90a" - "gfx940" - "gfx941" - "gfx942" - "gfx950" - "gfx1030" - "gfx1010" - "gfx1100" - "gfx1101" - "gfx1102" -) - -set(GPU_TARGETS "${DEFAULT_GPU_TARGETS}" CACHE STRING "GPU targets to compile for") - find_package(Threads REQUIRED) function(add_offload_flags tgt) diff --git a/projects/rocprofiler-systems/tests/rocprof-sys-openmp-tests.cmake b/projects/rocprofiler-systems/tests/rocprof-sys-openmp-tests.cmake index 2391d1ac81..eeaf422fa7 100644 --- a/projects/rocprofiler-systems/tests/rocprof-sys-openmp-tests.cmake +++ b/projects/rocprofiler-systems/tests/rocprof-sys-openmp-tests.cmake @@ -1,30 +1,11 @@ -# MIT License -# -# Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# Copyright (c) Advanced Micro Devices, Inc. +# SPDX-License-Identifier: MIT -# -------------------------------------------------------------------------------------- # +# ----------------------------------------------------------------------------- # # # openmp tests # -# -------------------------------------------------------------------------------------- # +# ----------------------------------------------------------------------------- # if(ROCmVersion_DIR) set(_rocm_root "${ROCmVersion_DIR}") @@ -52,8 +33,10 @@ endif() if(ROCPROFSYS_OPENMP_USING_LIBOMP_LIBRARY AND ROCPROFSYS_USE_OMPT) set(_OMPT_PASS_REGEX "\\|_omp_") + set(_OMPVV_TARGET_PASS_REGEX "_+omp_offloading") else() set(_OMPT_PASS_REGEX "") + set(_OMPVV_OFFLOAD_PASS_REGEX "") endif() rocprofiler_systems_add_test( @@ -65,7 +48,7 @@ rocprofiler_systems_add_test( REWRITE_TIMEOUT 180 RUNTIME_TIMEOUT 360 ENVIRONMENT - "${_ompt_environment};ROCPROFSYS_USE_SAMPLING=OFF;ROCPROFSYS_COUT_OUTPUT=ON" + "${_ompt_environment};ROCPROFSYS_USE_SAMPLING=OFF;ROCPROFSYS_COUT_OUTPUT=ON" REWRITE_RUN_PASS_REGEX "${_OMPT_PASS_REGEX}" RUNTIME_PASS_REGEX "${_OMPT_PASS_REGEX}" REWRITE_FAIL_REGEX "0 instrumented loops in procedure" @@ -81,7 +64,7 @@ rocprofiler_systems_add_test( REWRITE_TIMEOUT 180 RUNTIME_TIMEOUT 360 ENVIRONMENT - "${_ompt_environment};ROCPROFSYS_USE_SAMPLING=ON;ROCPROFSYS_SAMPLING_FREQ=50;ROCPROFSYS_COUT_OUTPUT=ON" + "${_ompt_environment};ROCPROFSYS_USE_SAMPLING=ON;ROCPROFSYS_SAMPLING_FREQ=50;ROCPROFSYS_COUT_OUTPUT=ON" REWRITE_RUN_PASS_REGEX "${_OMPT_PASS_REGEX}" REWRITE_FAIL_REGEX "0 instrumented loops in procedure" ) @@ -93,7 +76,7 @@ rocprofiler_systems_add_test( GPU ON LABELS "openmp;openmp-target" ENVIRONMENT - "${_ompt_environment};${_rocm_ld_env};ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,kernel_dispatch" + "${_ompt_environment};${_rocm_ld_env};ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,kernel_dispatch" ) rocprofiler_systems_add_validation_test( @@ -102,21 +85,62 @@ rocprofiler_systems_add_validation_test( PERFETTO_FILE "perfetto-trace.proto" LABELS "openmp;openmp-target" ENVIRONMENT "${_rocm_ld_env}" - ARGS --label-substrings - Z4vmulIiEvPT_S1_S1_i_l51.kd - Z4vmulIfEvPT_S1_S1_i_l51.kd - Z4vmulIdEvPT_S1_S1_i_l51.kd - -c - 4 - 4 - 4 - -d - 0 - 0 - 0 - -p + ARGS + --label-substrings + Z4vmulIiEvPT_S1_S1_i_l51.kd + Z4vmulIfEvPT_S1_S1_i_l51.kd + Z4vmulIdEvPT_S1_S1_i_l51.kd + -c 4 4 4 + -d 0 0 0 + -p ) +# OpenMP tests generated using OMPVV binaries +if(ROCPROFSYS_OMPVV_HOST_TESTS) + foreach(HOST_TEST_NAME ${ROCPROFSYS_OMPVV_HOST_TESTS}) + rocprofiler_systems_add_test( + SKIP_RUNTIME + NAME ${HOST_TEST_NAME} + TARGET ${HOST_TEST_NAME} + LABELS "openmp;ompvv" + REWRITE_ARGS + -e -v 2 --instrument-loops + RUNTIME_ARGS + -e -v 1 --label return args -E ^GOMP + REWRITE_TIMEOUT 180 + RUNTIME_TIMEOUT 360 + ENVIRONMENT + "${_ompt_environment};ROCPROFSYS_USE_SAMPLING=ON;ROCPROFSYS_SAMPLING_FREQ=50;ROCPROFSYS_COUT_OUTPUT=ON" + REWRITE_RUN_PASS_REGEX "${_OMPT_PASS_REGEX}" + REWRITE_FAIL_REGEX "0 instrumented loops in procedure" + ) + endforeach() + + set(_ompvv_offload_environment + "${_ompt_environment}" + "${_rocm_ld_env}" + "ROCPROFSYS_USE_SAMPLING=ON" + "ROCPROFSYS_SAMPLING_FREQ=50" + "ROCPROFSYS_COUT_OUTPUT=ON" + "ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,marker_api,kernel_dispatch,memory_copy,scratch_memory,hsa_api" + ) + + foreach(OFFLOAD_TEST_NAME ${ROCPROFSYS_OMPVV_OFFLOAD_TESTS}) + rocprofiler_systems_add_test( + SKIP_RUNTIME + NAME ${OFFLOAD_TEST_NAME} + TARGET ${OFFLOAD_TEST_NAME} + GPU ON + LABELS "openmp;ompvv;openmp-target" + REWRITE_ARGS -e -v 2 + ENVIRONMENT + "${_ompvv_offload_environment}" + REWRITE_RUN_PASS_REGEX + "${_OMPVV_OFFLOAD_PASS_REGEX}" + ) + endforeach() +endif() + set(_ompt_sampling_environ "${_ompt_environment}" "ROCPROFSYS_VERBOSE=2"