[rocprofiler-systems] Add Fortran OpenMP CTests (#874)
* Added Fortran (amdflang) openmp tests using the openmp-vv project --------- Signed-off-by: David Galiffi <David.Galiffi@amd.com> Co-authored-by: David Galiffi <David.Galiffi@amd.com>
このコミットが含まれているのは:
@@ -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 \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 \
|
||||
-- \
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
+1
サブモジュール projects/rocprofiler-systems/examples/openmp/external/ompvv が 2d06fc22ac で追加されました
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする