Files
TheRock/rocm-libraries/projects/composablekernel/dispatcher/library/CMakeLists.txt
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

143 lines
5.6 KiB
CMake

# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
#
# Dispatcher instance OBJECT libraries for CK Tile grouped convolution.
#
# Defines ck_add_dispatcher_conv_instances() and creates targets:
# ck_dispatcher_grouped_conv_fwd
# ck_dispatcher_grouped_conv_bwd_weight
# ck_dispatcher_grouped_conv_bwd_data
#
# Each target is an OBJECT library compiled from codegen-generated kernel sources.
# Include via add_subdirectory() from a parent that has already called find_package(Python3).
# ---- Configuration (inherits from parent scope) ----
set(DISPATCHER_DIR "${PROJECT_SOURCE_DIR}/dispatcher")
set(DISPATCHER_RULE_SET "tests" CACHE STRING "Dispatcher rule set: profiler, tests, full, full-tests, tiny, or default")
# Extract first GPU target for codegen
string(REPLACE ";" " " _GPU_TARGETS_SPACE "${GPU_TARGETS}")
string(REPLACE " " ";" _GPU_TARGETS_LIST "${_GPU_TARGETS_SPACE}")
list(GET _GPU_TARGETS_LIST 0 _GPU_TARGET)
# ---- Variant-to-path mapping tables ----
set(_DISP_GEN_SCRIPT "generate_profiler_kernels.py")
set(_DISP_HEADER_PREFIX_fwd "grouped_conv_fwd_")
set(_DISP_HEADER_PREFIX_bwd_weight "grouped_conv_bwd_weight_")
set(_DISP_HEADER_PREFIX_bwd_data "grouped_conv_bwd_data_")
# =============================================================================
# ck_add_dispatcher_conv_instances(<variant>)
#
# Creates an OBJECT library target: ck_dispatcher_grouped_conv_<variant>
# and a convenience target: dispatcher_<variant>_lib
#
# <variant> must be one of: fwd, bwd_weight, bwd_data
# =============================================================================
function(ck_add_dispatcher_conv_instances VARIANT)
# Look up variant-specific paths
set(HEADER_PREFIX "${_DISP_HEADER_PREFIX_${VARIANT}}")
if(NOT HEADER_PREFIX)
message(FATAL_ERROR "Unknown dispatcher variant: ${VARIANT}")
endif()
set(SCRIPT_PATH "${DISPATCHER_DIR}/scripts/${_DISP_GEN_SCRIPT}")
set(KERNEL_DIR "${CMAKE_CURRENT_BINARY_DIR}/dispatcher_${VARIANT}_kernels")
set(TARGET_NAME "ck_dispatcher_grouped_conv_${VARIANT}")
# --- Step 1: Run Python codegen at configure time ---
# Always regenerate: DISPATCHER_RULE_SET is a CACHE variable, so changing it
# triggers a full reconfigure. Wipe the kernel dir first to remove stale files.
file(REMOVE_RECURSE ${KERNEL_DIR})
file(MAKE_DIRECTORY ${KERNEL_DIR})
execute_process(
COMMAND ${Python3_EXECUTABLE} ${SCRIPT_PATH}
--variant ${VARIANT}
--output-dir ${KERNEL_DIR}
--arch ${_GPU_TARGET}
--rule-set ${DISPATCHER_RULE_SET}
RESULT_VARIABLE ret
OUTPUT_VARIABLE output
ERROR_VARIABLE error
WORKING_DIRECTORY ${DISPATCHER_DIR}/codegen
)
if(NOT ret EQUAL 0)
message(FATAL_ERROR "Dispatcher ${VARIANT} kernel generation failed.\nReturn: ${ret}\nOutput: ${output}\nError: ${error}")
endif()
message(STATUS "Dispatcher ${VARIANT} kernels generated (rule set: ${DISPATCHER_RULE_SET}): ${output}")
# --- Step 2: Create .cpp wrappers for each generated kernel header ---
file(GLOB _KERNEL_HEADERS "${KERNEL_DIR}/${HEADER_PREFIX}*.hpp")
set(_KERNEL_SOURCES "")
foreach(HEADER ${_KERNEL_HEADERS})
get_filename_component(STEM ${HEADER} NAME_WE)
set(WRAPPER_CPP "${KERNEL_DIR}/${STEM}.cpp")
if(NOT EXISTS ${WRAPPER_CPP})
file(WRITE ${WRAPPER_CPP} "// Auto-generated wrapper\n#include \"${STEM}.hpp\"\n")
endif()
list(APPEND _KERNEL_SOURCES ${WRAPPER_CPP})
endforeach()
if(NOT _KERNEL_SOURCES)
message(WARNING "Dispatcher ${VARIANT}: no kernel sources generated, skipping target creation")
return()
endif()
# --- Step 3: Add chunked registration .cpp files ---
file(GLOB _REG_CPPS "${KERNEL_DIR}/register_*.cpp")
foreach(REG_CPP ${_REG_CPPS})
list(APPEND _KERNEL_SOURCES "${REG_CPP}")
set_source_files_properties("${REG_CPP}" PROPERTIES
COMPILE_OPTIONS "-Wno-ctad-maybe-unsupported;-Wno-old-style-cast"
)
endforeach()
# --- Step 4: Create OBJECT library ---
add_library(${TARGET_NAME} OBJECT ${_KERNEL_SOURCES})
target_include_directories(${TARGET_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/dispatcher/include
${KERNEL_DIR}
)
target_compile_options(${TARGET_NAME} PRIVATE
-DCK_TILE_FLOAT_TO_BFLOAT16_DEFAULT=0
-DCK_TILE_EXPERIMENTAL_USE_BUFFER_LOAD_OOB_CHECK_OFFSET_TRICK=1
-Wno-undefined-func-template
-Wno-float-equal
-Wno-header-hygiene
-Wno-unused-parameter
-Wno-missing-variable-declarations
# New clang -Weverything suggestion firing on builder-pattern setters that
# return *this in the shared dispatcher headers; not a real defect.
-Wno-lifetime-safety-intra-tu-suggestions
)
if(NOT WIN32 AND ${hip_VERSION_FLAT} GREATER 600241132)
target_compile_options(${TARGET_NAME} PRIVATE --offload-compress)
endif()
set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
# Progress monitoring
list(LENGTH _KERNEL_SOURCES _TOTAL_COUNT)
math(EXPR _KERNEL_COUNT "${_TOTAL_COUNT} - 1")
message(STATUS "Dispatcher ${VARIANT}: ${_TOTAL_COUNT} compilation units (${_KERNEL_COUNT} kernels + registration)")
# Convenience ninja target: ninja dispatcher_<variant>_lib
add_custom_target(dispatcher_${VARIANT}_lib
DEPENDS ${TARGET_NAME}
COMMENT "All ${_TOTAL_COUNT} dispatcher ${VARIANT} instances compiled."
)
endfunction()
# =============================================================================
# Create all three dispatcher instance libraries
# =============================================================================
ck_add_dispatcher_conv_instances(fwd)
ck_add_dispatcher_conv_instances(bwd_weight)
ck_add_dispatcher_conv_instances(bwd_data)