CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
276 lines
11 KiB
CMake
276 lines
11 KiB
CMake
#
|
|
# Decoder test
|
|
#
|
|
cmake_minimum_required(VERSION 3.16.0)
|
|
|
|
project(
|
|
att-decoder-tests
|
|
LANGUAGES CXX
|
|
VERSION 0.0.0)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
|
|
option(UNIT_TESTS "Build unit tests" ON)
|
|
option(BUILD_INTEGRATION_TESTS "Build integration tests" ON)
|
|
option(DISABLE_COMGR "Disable dependency on disassembly" OFF)
|
|
|
|
if(NOT DEFINED TTD_PROJECT_SOURCE_DIR)
|
|
set(TTD_PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
|
endif()
|
|
|
|
# Allow parent CMakeLists.txt to disable unit tests via BUILD_UNIT_TESTS
|
|
if(DEFINED BUILD_UNIT_TESTS AND NOT BUILD_UNIT_TESTS)
|
|
set(UNIT_TESTS OFF)
|
|
endif()
|
|
|
|
# Standalone build: if test/ is the top-level project, build the library from source/
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
set(BUILD_TESTS
|
|
ON
|
|
CACHE BOOL "" FORCE)
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../source ${CMAKE_CURRENT_BINARY_DIR}/source)
|
|
endif()
|
|
|
|
if(DISABLE_COMGR)
|
|
set(APPLE True)
|
|
endif()
|
|
|
|
enable_testing()
|
|
|
|
# Build unit tests
|
|
if(UNIT_TESTS)
|
|
add_subdirectory(unit)
|
|
endif()
|
|
|
|
if(BUILD_MARKERS)
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT TARGET SQTTInstrumentPass)
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../markers ${CMAKE_CURRENT_BINARY_DIR}/markers)
|
|
endif()
|
|
|
|
find_program(
|
|
HIPCC_EXECUTABLE
|
|
NAMES hipcc
|
|
HINTS /opt/rocm/bin)
|
|
if(HIPCC_EXECUTABLE AND TARGET SQTTInstrumentPass)
|
|
add_test(NAME markers-python COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/markers/run_tests.py)
|
|
set_tests_properties(
|
|
markers-python
|
|
PROPERTIES
|
|
TIMEOUT
|
|
300
|
|
LABELS
|
|
"markers;integration-tests"
|
|
WORKING_DIRECTORY
|
|
${TTD_PROJECT_SOURCE_DIR}
|
|
ENVIRONMENT
|
|
"HIPCC=${HIPCC_EXECUTABLE};SQTT_BUILD_DIR=${CMAKE_BINARY_DIR};SQTT_PASS_PLUGIN=$<TARGET_FILE:SQTTInstrumentPass>"
|
|
)
|
|
elseif(NOT TARGET SQTTInstrumentPass)
|
|
message(WARNING "SQTTInstrumentPass target not found; skipping SQTT marker Python tests")
|
|
else()
|
|
message(WARNING "hipcc not found; skipping SQTT marker Python tests")
|
|
endif()
|
|
endif()
|
|
|
|
if(BUILD_INTEGRATION_TESTS)
|
|
set(Python3_FIND_UNVERSIONED_NAMES LAST)
|
|
find_package(
|
|
Python3 3.8
|
|
COMPONENTS Interpreter
|
|
REQUIRED)
|
|
execute_process(
|
|
COMMAND ${Python3_EXECUTABLE} -c "import elftools"
|
|
RESULT_VARIABLE PYELFTOOLS_IMPORT_RESULT
|
|
OUTPUT_QUIET ERROR_QUIET)
|
|
if(NOT PYELFTOOLS_IMPORT_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "Python module pyelftools is required for ATT integration tests. "
|
|
"Install pyelftools or configure with -DBUILD_INTEGRATION_TESTS=OFF.")
|
|
endif()
|
|
|
|
configure_file(unpack.sh unpack.sh COPYONLY USE_SOURCE_PERMISSIONS)
|
|
configure_file(diff.sh diff.sh COPYONLY USE_SOURCE_PERMISSIONS)
|
|
file(COPY "control" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
|
|
|
|
set(TEST_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set(GFX10_DATA navi2_fifo)
|
|
set(GFX11_DATA navi3_float strix strix_barrier)
|
|
set(GFX12_DATA navi4_sdata navi4_fifo navi4_float navi4_cwsr navi4_setpc navi4_barriernop)
|
|
set(MI300_DATA
|
|
mi300_shaderdata
|
|
mi300_gemmv2
|
|
mi300_sgemm
|
|
mi300_template_attention
|
|
mi300_perf
|
|
mi300_pcs
|
|
mi300_pc2
|
|
mi300_cwsr)
|
|
set(MI350_DATA mi350_histo0 mi350_scale)
|
|
|
|
set(DATA_DIR ${GFX10_DATA} ${GFX11_DATA} ${GFX12_DATA} ${MI300_DATA} ${MI350_DATA})
|
|
|
|
set(CSV_PY ${CMAKE_CURRENT_SOURCE_DIR}/csv_test.py)
|
|
set(ATT_TOOL_PY ${CMAKE_CURRENT_SOURCE_DIR}/../python/att_tool.py)
|
|
set(PYTHON_API_PY ${CMAKE_CURRENT_SOURCE_DIR}/python_api_test.py)
|
|
set(CODEGEN_TEST_PY ${CMAKE_CURRENT_SOURCE_DIR}/codegen_test.py)
|
|
set(ATT_TOOL_TEST_PY ${CMAKE_CURRENT_SOURCE_DIR}/att_tool_test.py)
|
|
|
|
set(LIB_PATH ${CMAKE_BINARY_DIR}/lib/librocprof-trace-decoder${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
set(SANITIZED_LIB_PATH ${CMAKE_BINARY_DIR}/lib/librocprof-trace-decoder-sanitized${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
set(PYTHON_API_DEP_LIBRARY_PATH)
|
|
if(COMGR_LIB)
|
|
get_filename_component(COMGR_LIB_DIR "${COMGR_LIB}" DIRECTORY)
|
|
list(APPEND PYTHON_API_DEP_LIBRARY_PATH "${COMGR_LIB_DIR}")
|
|
endif()
|
|
list(JOIN PYTHON_API_DEP_LIBRARY_PATH ":" PYTHON_API_DEP_LIBRARY_PATH)
|
|
set(PYTHON_API_LD_LIBRARY_PATH "${CMAKE_BINARY_DIR}/lib")
|
|
if(PYTHON_API_DEP_LIBRARY_PATH)
|
|
set(PYTHON_API_LD_LIBRARY_PATH "${PYTHON_API_LD_LIBRARY_PATH}:${PYTHON_API_DEP_LIBRARY_PATH}")
|
|
endif()
|
|
|
|
add_test(NAME csv-launch COMMAND ${Python3_EXECUTABLE} ${CSV_PY} --lib ${LIB_PATH})
|
|
set_tests_properties(csv-launch PROPERTIES TIMEOUT 30 LABELS "integration-tests" WORKING_DIRECTORY ${TEST_BIN_DIR})
|
|
|
|
add_test(NAME python-api-launch COMMAND ${Python3_EXECUTABLE} ${PYTHON_API_PY} --lib ${LIB_PATH})
|
|
set(PYTHON_API_TEST_ENV
|
|
"PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python"
|
|
"LD_LIBRARY_PATH=${PYTHON_API_LD_LIBRARY_PATH}:$ENV{LD_LIBRARY_PATH}" "ROCM_PATH=${CMAKE_INSTALL_PREFIX}")
|
|
set_tests_properties(
|
|
python-api-launch
|
|
PROPERTIES TIMEOUT
|
|
120
|
|
LABELS
|
|
"integration-tests"
|
|
WORKING_DIRECTORY
|
|
${TEST_BIN_DIR}
|
|
ENVIRONMENT
|
|
"${PYTHON_API_TEST_ENV}")
|
|
|
|
add_test(NAME codegen-funcmap-metadata COMMAND ${Python3_EXECUTABLE} ${CODEGEN_TEST_PY})
|
|
set_tests_properties(codegen-funcmap-metadata PROPERTIES TIMEOUT 30 LABELS "integration-tests" ENVIRONMENT
|
|
"PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python")
|
|
|
|
add_test(NAME att-marker-clock-correction COMMAND ${Python3_EXECUTABLE} ${ATT_TOOL_TEST_PY})
|
|
set_tests_properties(att-marker-clock-correction PROPERTIES TIMEOUT 30 LABELS "integration-tests" ENVIRONMENT
|
|
"PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python")
|
|
|
|
if(DEFINED ROCPROF_TRACE_DECODER_PYTHON_INSTALL_DIR)
|
|
configure_file(python_api_install_test.cmake.in python_api_install_test.cmake @ONLY)
|
|
add_test(NAME python-api-install COMMAND ${CMAKE_COMMAND} -P
|
|
${CMAKE_CURRENT_BINARY_DIR}/python_api_install_test.cmake)
|
|
set_tests_properties(python-api-install PROPERTIES TIMEOUT 300 LABELS "integration-tests" DEPENDS
|
|
python-api-launch)
|
|
endif()
|
|
|
|
add_test(NAME att-launch COMMAND ${Python3_EXECUTABLE} ${ATT_TOOL_PY} --help)
|
|
set_tests_properties(att-launch PROPERTIES TIMEOUT 30 LABELS "integration-tests" WORKING_DIRECTORY ${TEST_BIN_DIR})
|
|
|
|
add_test(NAME decompress COMMAND ${TEST_BIN_DIR}/unpack.sh)
|
|
set_tests_properties(
|
|
decompress
|
|
PROPERTIES TIMEOUT
|
|
60
|
|
LABELS
|
|
"decompress"
|
|
WORKING_DIRECTORY
|
|
${TEST_BIN_DIR}
|
|
FIXTURES_SETUP
|
|
unpack_data
|
|
DEPENDS
|
|
${DATA}_execute)
|
|
|
|
set(FAIL_EXP "\\.h|\\.cpp|arning|Error|bort|egmentation|xception")
|
|
|
|
# Preload the sanitized library so ASan is active from process start. On macOS, the sanitized dylib carries ASan
|
|
# statically (clang). On Linux (GCC), libasan.so must come first in LD_PRELOAD.
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
set(SANITIZER_ENV "DYLD_INSERT_LIBRARIES=${SANITIZED_LIB_PATH}")
|
|
else()
|
|
execute_process(
|
|
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libasan.so
|
|
OUTPUT_VARIABLE ASAN_RUNTIME
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
set(SANITIZER_ENV "LD_PRELOAD=${ASAN_RUNTIME}:${SANITIZED_LIB_PATH}")
|
|
endif()
|
|
|
|
foreach(DATA ${DATA_DIR})
|
|
string(FIND ${DATA} "_cwsr" IS_CWSR)
|
|
string(FIND ${DATA} "mi300_pcs" IS_PCS)
|
|
if(${DATA} STREQUAL "mi350_histo0")
|
|
set(WENV "SKIP_OCCUPANCY=1")
|
|
elseif(${DATA} STREQUAL "navi4_sdata")
|
|
set(WENV "CHECK_SDATA=1")
|
|
elseif(IS_CWSR EQUAL -1 AND IS_PCS EQUAL -1)
|
|
set(WENV "")
|
|
else()
|
|
set(WENV "ATT_SUPPRESS_WARNING=1")
|
|
endif()
|
|
|
|
configure_file("data/${DATA}.tar.gz" "data/${DATA}.tar.gz" COPYONLY USE_SOURCE_PERMISSIONS)
|
|
configure_file("diff.py" "diff.py" COPYONLY USE_SOURCE_PERMISSIONS)
|
|
|
|
add_test(NAME ${DATA}_csv COMMAND ${Python3_EXECUTABLE} ${CSV_PY} --lib ${LIB_PATH}
|
|
"${TEST_BIN_DIR}/${DATA}/*.att" "${TEST_BIN_DIR}/control/${DATA}/*.csv")
|
|
set_tests_properties(${DATA}_csv PROPERTIES WORKING_DIRECTORY ${TEST_BIN_DIR} FIXTURES_REQUIRED unpack_data)
|
|
|
|
# Sanitized test: always use csv_test.py with the sanitized library
|
|
add_test(NAME ${DATA}_sanitize COMMAND ${Python3_EXECUTABLE} ${CSV_PY} --lib ${SANITIZED_LIB_PATH}
|
|
"${TEST_BIN_DIR}/${DATA}/*.att" "${TEST_BIN_DIR}/control/${DATA}/*.csv")
|
|
set_tests_properties(
|
|
${DATA}_sanitize
|
|
PROPERTIES WORKING_DIRECTORY
|
|
${TEST_BIN_DIR}
|
|
TIMEOUT
|
|
300
|
|
ENVIRONMENT
|
|
"${SANITIZER_ENV};ASAN_OPTIONS=detect_leaks=0"
|
|
FIXTURES_REQUIRED
|
|
unpack_data)
|
|
|
|
set(USES_VCMPX FALSE)
|
|
if(${DATA} STREQUAL "mi300_pcs"
|
|
OR ${DATA} STREQUAL "mi300_gemmv2"
|
|
OR ${DATA} STREQUAL "mi300_sgemm"
|
|
OR ${DATA} STREQUAL "mi300_perf")
|
|
set(USES_VCMPX TRUE)
|
|
endif()
|
|
|
|
if(NOT USES_VCMPX)
|
|
add_test(NAME ${DATA}_execute COMMAND ${Python3_EXECUTABLE} ${ATT_TOOL_PY} --lib ${LIB_PATH} --base-name
|
|
1_results ${TEST_BIN_DIR}/${DATA})
|
|
set_tests_properties(
|
|
${DATA}_execute
|
|
PROPERTIES TIMEOUT
|
|
300
|
|
LABELS
|
|
"integration-tests"
|
|
FAIL_REGULAR_EXPRESSION
|
|
${FAIL_EXP}
|
|
ENVIRONMENT
|
|
"${WENV}"
|
|
WORKING_DIRECTORY
|
|
${TEST_BIN_DIR}
|
|
FIXTURES_REQUIRED
|
|
unpack_data)
|
|
|
|
add_test(NAME ${DATA}_validate COMMAND ${TEST_BIN_DIR}/diff.sh ${DATA})
|
|
set_tests_properties(
|
|
${DATA}_validate
|
|
PROPERTIES TIMEOUT
|
|
60
|
|
LABELS
|
|
"integration-tests"
|
|
FAIL_REGULAR_EXPRESSION
|
|
".+"
|
|
WORKING_DIRECTORY
|
|
${TEST_BIN_DIR}
|
|
FIXTURES_REQUIRED
|
|
unpack_data
|
|
DEPENDS
|
|
${DATA}_execute)
|
|
endif()
|
|
endforeach(DATA)
|
|
endif()
|