diff --git a/.gitignore b/.gitignore index 9716a03a1e4..cea70f8ab5f 100644 --- a/.gitignore +++ b/.gitignore @@ -109,11 +109,6 @@ test_data/* # The experimental/builder directory should be tracked despite matching build* !experimental/builder !experimental/builder/** -experimental/grouped_convolution_tile_instances/instances/* -!experimental/grouped_convolution_tile_instances/instances/*.in -!experimental/grouped_convolution_tile_instances/instances/*.inc -!experimental/grouped_convolution_tile_instances/instances/*.hpp -experimental/grouped_convolution_tile_instances/*.inc # Heuristics: benchmark data (never in git) dispatcher/heuristics/data/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index daf3c258d9d..bb802731021 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,6 +26,16 @@ repos: verbose: false language: script types_or: [c++, python, shell, cmake] + - id: ascii-only-checker + name: Check for non-ASCII characters in C/C++ sources + entry: projects/composablekernel/script/check_ascii_only.sh + language: script + types_or: [c++, inc] + - id: crlf-checker + name: Check for CRLF line endings in C/C++ sources + entry: projects/composablekernel/script/check_no_crlf.sh + language: script + types_or: [c++, inc] - id: remove-exec-bit name: Remove executable bit from non-executable files entry: projects/composablekernel/script/remove_exec_bit.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index f6812a8520f..af318904f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ Documentation for Composable Kernel available at [https://rocm.docs.amd.com/projects/composable_kernel/en/latest/](https://rocm.docs.amd.com/projects/composable_kernel/en/latest/). -## (Unreleased) Composable Kernel 1.3.0 +## Composable Kernel 1.2.0 for ROCm 7.13 ### Added + * Added overload of load_tile_transpose that takes reference to output tensor as output parameter * Use data type from LDS tensor view when determining tile distribution for transpose in the GEMM pipeline * Added eightwarps support for abquant mode in blockscale GEMM. diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ce054255cc..c01d2ad553a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,6 +136,87 @@ else() set(CK_ENABLE_BF8 "ON") endif() +# --------------------------------------------------------------------------- +# Map GPU target strings to hex amdgcn_target_id values (arch.hpp). +# Builds a -DCK_CMAKE_GPU_TARGET_IDS=0xHHHH,... definition that host-side +# test code can consume without launching a device kernel. +# --------------------------------------------------------------------------- +function(_ck_gpu_target_string_to_id TARGET_STR OUT_VAR) + string(TOLOWER "${TARGET_STR}" _tgt) + string(REGEX REPLACE ":.*" "" _tgt "${_tgt}") + # GFX9 + if(_tgt STREQUAL "gfx908") + set(${OUT_VAR} "0x0908" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx90a") + set(${OUT_VAR} "0x090A" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx942") + set(${OUT_VAR} "0x0942" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx950") + set(${OUT_VAR} "0x0950" PARENT_SCOPE) + # GFX10.3 + elseif(_tgt STREQUAL "gfx1030") + set(${OUT_VAR} "0x1030" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1031") + set(${OUT_VAR} "0x1031" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1032") + set(${OUT_VAR} "0x1032" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1033") + set(${OUT_VAR} "0x1033" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1034") + set(${OUT_VAR} "0x1034" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1035") + set(${OUT_VAR} "0x1035" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1036") + set(${OUT_VAR} "0x1036" PARENT_SCOPE) + elseif(_tgt MATCHES "^gfx10-3-generic$") + set(${OUT_VAR} "0x103F" PARENT_SCOPE) + # GFX11 + elseif(_tgt STREQUAL "gfx1100") + set(${OUT_VAR} "0x1100" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1101") + set(${OUT_VAR} "0x1101" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1102") + set(${OUT_VAR} "0x1102" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1103") + set(${OUT_VAR} "0x1103" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1150") + set(${OUT_VAR} "0x1150" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1151") + set(${OUT_VAR} "0x1151" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1152") + set(${OUT_VAR} "0x1152" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1153") + set(${OUT_VAR} "0x1153" PARENT_SCOPE) + elseif(_tgt MATCHES "^gfx11-generic$") + set(${OUT_VAR} "0x11FF" PARENT_SCOPE) + # GFX12 + elseif(_tgt STREQUAL "gfx1200") + set(${OUT_VAR} "0x1200" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1201") + set(${OUT_VAR} "0x1201" PARENT_SCOPE) + elseif(_tgt MATCHES "^gfx12-generic$") + set(${OUT_VAR} "0x12FF" PARENT_SCOPE) + elseif(_tgt STREQUAL "gfx1250") + set(${OUT_VAR} "0x1250" PARENT_SCOPE) + else() + message(WARNING "_ck_gpu_target_string_to_id: unknown GPU target '${TARGET_STR}', skipping") + set(${OUT_VAR} "" PARENT_SCOPE) + endif() +endfunction() + +# Inject a macro CK_CMAKE_GPU_TARGET_IDS containing all configure-level GPU targets into all source files. +set(_ck_hex_ids) +foreach(_tgt IN LISTS GPU_TARGETS) + _ck_gpu_target_string_to_id("${_tgt}" _ck_hex) + if(_ck_hex AND NOT _ck_hex STREQUAL "0x0000") + list(APPEND _ck_hex_ids "${_ck_hex}") + endif() +endforeach() +list(JOIN _ck_hex_ids "," _ck_hex_str) +if(_ck_hex_str) + add_compile_definitions(CK_CMAKE_GPU_TARGET_IDS=${_ck_hex_str}) +endif() + #for f8/bf8_t type add_compile_options(-Wno-bit-int-extension) add_compile_options(-Wno-pass-failed) @@ -164,6 +245,8 @@ if(NOT DISABLE_DL_KERNELS AND GPU_TARGETS MATCHES "gfx101|gfx103|gfx10-1|gfx10-3 set(DL_KERNELS "ON") set(CK_ENABLE_DL_KERNELS "ON") endif() +message(STATUS "Disabling DPP kernels by default") +option(DISABLE_DPP_KERNELS "Disable DPP kernels by default" ON) if(NOT DISABLE_DPP_KERNELS) add_definitions(-DDPP_KERNELS) set(DPP_KERNELS "ON") @@ -741,6 +824,10 @@ SET(BUILD_DEV ON CACHE BOOL "BUILD_DEV") if(BUILD_DEV) add_compile_options(-Werror) add_compile_options(-Weverything) + add_compile_options(-Wno-lifetime-safety-intra-tu-suggestions) + add_compile_options(-Wno-lifetime-safety-cross-tu-suggestions) + add_compile_options(-Wno-lifetime-safety-lifetimebound-violation) + add_compile_options(-Wno-unknown-warning-option) endif() message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") @@ -761,8 +848,6 @@ if(NOT MIOPEN_REQ_LIBS_ONLY AND NOT HIPTENSOR_REQ_LIBS_ONLY) endif() -option(MIOPEN_REQ_LIBS_ONLY "Build only the MIOpen required libraries" OFF) -option(HIPTENSOR_REQ_LIBS_ONLY "Build only the HipTensor required libraries" OFF) option(DISABLE_OFFLOAD_COMPRESS "Disable offload compress compiler flag when building instances" OFF) option(BUILD_MHA_LIB "Build the static library for flash attention" OFF) option(BUILD_CK_DEVICE_INSTANCES "Build device operation instances in library/" ON) @@ -822,7 +907,6 @@ endif() if (CK_EXPERIMENTAL_BUILDER) add_subdirectory(experimental/builder) - add_subdirectory(experimental/grouped_convolution_tile_instances) endif() if(NOT GPU_ARCHS AND USER_GPU_TARGETS AND NOT MIOPEN_REQ_LIBS_ONLY AND NOT HIPTENSOR_REQ_LIBS_ONLY) diff --git a/Dockerfile b/Dockerfile index 7c0da210d34..cfbbe1bfe40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ ENV HIP_PLATFORM=amd # Add rocm repository RUN set -xe && \ - apt-get update && apt-get install -y --allow-unauthenticated apt-utils wget gnupg2 curl cmake git vim nano zip + apt-get update && apt-get install -y apt-utils wget gnupg2 curl cmake git vim nano zip RUN if [ "$compiler_version" = "therock" ]; then \ rm -rf /opt/rocm && mkdir /opt/rocm && \ @@ -60,7 +60,7 @@ RUN set -x && \ tar -xzf sccache.tar.gz --strip-components=1 -C ${SCCACHE_INSTALL_LOCATION} && \ chmod +x ${SCCACHE_INSTALL_LOCATION}/sccache && \ # Install dependencies - DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ build-essential \ jq \ libelf-dev \ diff --git a/Jenkinsfile b/Jenkinsfile index 03475924055..4b493134460 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,1229 +21,18 @@ // - Forces full build if dependency cache stale (>7 days) // - Manual override: set DISABLE_SMART_BUILD=true // -// Benefits: PR builds 5h → 30min (typical), nightly builds unchanged +// Benefits: PR builds 5h -> 30min (typical), nightly builds unchanged // See: script/dependency-parser/README.md for details // - -@NonCPS -String getGitHubCommitHash(def build) -{ - def scmAction = build?.actions.find { action -> - action instanceof jenkins.scm.api.SCMRevisionAction - } - if (scmAction?.revision instanceof org.jenkinsci.plugins.github_branch_source.PullRequestSCMRevision) - { - return scmAction.revision.pullHash - } - else if (scmAction?.revision instanceof jenkins.plugins.git.AbstractGitSCMSource$SCMRevisionImpl) - { - return scmAction.revision.hash - } - return null -} - def rocmnode(name) { return '(rocmtest || miopen) && (' + name + ')' } -def show_node_info() { - sh """ - echo "NODE_NAME = \$NODE_NAME" - hostname - lsb_release -sd - uname -r - cat /sys/module/amdgpu/version - ls /opt/ -la - """ -} - -def setGithubStatus(String context, String state, String description) { - def sha = env.GIT_COMMIT - def targetUrl = env.RUN_DISPLAY_URL ?: env.BUILD_URL - def statusUrl = "https://api.github.com/repos/ROCm/rocm-libraries/statuses/${sha}" - withCredentials([usernamePassword(credentialsId: 'github-app-miopen', usernameVariable: 'GITHUB_APP', passwordVariable: 'GITHUB_TOKEN')]) { - def code = '0' - try { - retry(3) { - code = sh(returnStdout: true, script: """ - curl -s -w "%{http_code}" -o /dev/null -X POST '${statusUrl}' \\ - -H "Authorization: token \$GITHUB_TOKEN" \\ - -H 'Content-Type: application/json' \\ - -d '{"state":"${state}","context":"${context}","description":"${description}","target_url":"${targetUrl}"}' - """).trim() - if (!code.startsWith('2')) { - error("GitHub status POST returned ${code}") - } - } - } catch (Exception e) { - echo "WARNING: GitHub status POST failed after retries (context=${context}, state=${state}, code=${code})" - } - } -} - -def cloneUpdateRefRepo() { - def refRepoPath = "/var/jenkins/ref-repo/rocm-libraries" - def lockLabel = "git ref repo lock - ${env.NODE_NAME}" - def folderExists = sh( - script: "test -d ${refRepoPath}/refs", - returnStatus: true - ) == 0 - - if (!folderExists) { - echo "rocm-libraries repo does not exist at ${refRepoPath}, creating mirror clone..." - echo "locking on label: ${lockLabel}" - lock(lockLabel) { - def cloneCommand = """ - set -ex - rm -rf ${refRepoPath} && mkdir -p ${refRepoPath} - git clone --mirror https://github.com/ROCm/rocm-libraries.git ${refRepoPath} - """ - sh(script: cloneCommand, label: "clone ref repo") - } - echo "Completed git clone, lock released" - } - echo "rocm-libraries repo exists at ${refRepoPath}, performing git remote update..." - echo "locking on label: ${lockLabel}" - lock(lockLabel) { - def fetchCommand = """ - set -ex - cd ${refRepoPath} - git remote prune origin - git remote update - """ - sh(script: fetchCommand, label: "update ref repo") - } - echo "Completed git ref repo fetch, lock released" -} - -def checkoutComposableKernel() -{ - //update ref repo - cloneUpdateRefRepo() - // checkout project - def scmVars = checkout scm - // getGitHubCommitHash reads SCMRevisionAction recorded before any local merge, - // giving the true PR branch tip (pullHash) or branch HEAD (hash). - // Falls back to ORIG_HEAD (pre-merge HEAD set by git merge) when SCMRevisionAction - // is unavailable, then to HEAD for branch builds where no merge occurred. - env.GIT_COMMIT = getGitHubCommitHash(currentBuild.rawBuild) ?: sh(returnStdout: true, script: ''' - git rev-parse ORIG_HEAD 2>/dev/null || git rev-parse HEAD - ''').trim() -} - -def generateAndArchiveBuildTraceVisualization(String buildTraceFileName) { - try { - checkoutComposableKernel() - - // Retrieve the build trace artifact - def traceFileExists = false - try { - copyArtifacts( - projectName: env.JOB_NAME, - selector: specific(env.BUILD_NUMBER), - filter: buildTraceFileName - ) - traceFileExists = fileExists(buildTraceFileName) - } catch (Exception e) { - echo "Could not copy build trace artifact: ${e.getMessage()}" - traceFileExists = false - return - } - - sh """ - echo "post artifact download:" - ls -la - """ - - // Pull image - def image = "ghcr.io/puppeteer/puppeteer:24.30.0" - echo "Pulling image: ${image}" - def retimage = docker.image("${image}") - retimage.pull() - - // Create a temporary workspace - sh """#!/bin/bash - ls -la - mkdir -p workspace - cp ./projects/composablekernel/script/infra_helper/capture_build_trace.js ./workspace - cp ${buildTraceFileName} ./workspace/${buildTraceFileName} - chmod 777 ./workspace - ls -la ./workspace - """ - - // Run container to get snapshot - def dockerOpts = "--cap-add=SYS_ADMIN -v \"\$(pwd)/workspace:/workspace\" -e NODE_PATH=/home/pptruser/node_modules -e BUILD_TRACE_FILE=${buildTraceFileName}" - // Create unique image name by sanitizing job name - def sanitizedJobName = env.JOB_NAME.replaceAll(/[\/\\:*?"<>| ]/, '_').replaceAll('%2F', '_') - def architectureName = (buildTraceFileName =~ /(gfx[0-9a-zA-Z]+)/)[0][1] - def imageName = "perfetto_snapshot_${sanitizedJobName}_build_${env.BUILD_NUMBER}_${architectureName}.png" - sh """ - docker run --rm ${dockerOpts} ${image} node /workspace/capture_build_trace.js - mv ./workspace/perfetto_snapshot_build.png ./workspace/${imageName} - """ - - // Archive the snapshot - sh """ - mv ./workspace/${imageName} ${imageName} - """ - archiveArtifacts "${imageName}" - - // Notify the channel - withCredentials([string(credentialsId: 'ck_ci_build_perf_webhook_url', variable: 'WEBHOOK_URL')]) { - sh ''' - # Create build trace filename with build number based on the original filename - BUILD_TRACE_WITH_NUMBER=$(echo "''' + buildTraceFileName + '''" | sed 's/.json/_''' + sanitizedJobName + '''_''' + env.BUILD_NUMBER + '''_''' + architectureName + '''.json/') - - # Convert image to base64 - echo "Converting image to base64..." - IMAGE_BASE64=$(base64 -w 0 ''' + imageName + ''') - echo "Image base64 length: ${#IMAGE_BASE64}" - - # Convert build trace to base64 - echo "Converting build trace to base64..." - BUILD_TRACE_BASE64=$(base64 -w 0 ''' + buildTraceFileName + ''') - echo "Build trace base64 length: ${#BUILD_TRACE_BASE64}" - - # Create JSON payload with base64 data - echo "Creating JSON payload..." - { - printf '{\n' - printf ' "jobName": "%s",\n' "''' + env.JOB_NAME + '''" - printf ' "buildNumber": "%s",\n' "''' + env.BUILD_NUMBER + '''" - printf ' "jobUrl": "%s",\n' "''' + env.RUN_DISPLAY_URL + '''" - printf ' "imageName": "%s",\n' "''' + imageName + '''" - printf ' "architecture": "%s",\n' "''' + architectureName + '''" - printf ' "imageData": "%s",\n' "$IMAGE_BASE64" - printf ' "buildTraceName": "%s",\n' "$BUILD_TRACE_WITH_NUMBER" - printf ' "buildTraceData": "%s"\n' "$BUILD_TRACE_BASE64" - printf '}\n' - } > webhook_payload.json - - echo "JSON payload created, size: $(wc -c < webhook_payload.json) bytes" - - curl -X POST "${WEBHOOK_URL}" \ - -H "Content-Type: application/json" \ - -d @webhook_payload.json - - # Clean up temporary file - rm -f webhook_payload.json - ''' - } - } catch (Exception e) { - echo "Throwing error exception while generating build trace visualization" - echo 'Exception occurred: ' + e.toString() - } -} - -class Version { - int major, minor, patch - @Override - String toString() { - return [major, minor, patch].findAll().join('.') - } -} -def parseVersion(String versionString) { - if (!versionString) return null - int[] tokens = versionString.split(/\./).collect { it as int } // Splits the string by '.' and converts each part to an integer. - return new Version( - major: tokens[0], - minor: tokens.length > 1 ? tokens[1] : null, - patch: tokens.length > 2 ? tokens[2] : null, - ) -} - -def nthreads() { - def nproc = sh(returnStdout: true, script: 'nproc') - echo "Number of cores: ${nproc}" - def n = nproc.toInteger() - if (n > 64){ - n = 64 - } - echo "Number of threads used for building: ${n}" - return n -} - -def runShell(String command){ - def responseCode = sh returnStatus: true, script: "${command} > tmp.txt" - def output = readFile(file: "tmp.txt") - return (output != "") -} - -def shouldRunCICheck() { - // File patterns that should not trigger CI - def skipFilePatterns = [ - /^projects\/composablekernel\/\.github\/.*/, // GitHub workflow files - /^projects\/composablekernel\/docs\/.*/, // Documentation files - /^projects\/composablekernel\/LICENSE$/, // License file - /^projects\/composablekernel\/.*\.gitignore$/, // Git ignore files - /^projects\/composablekernel\/.*\.md$/ // Markdown files - ] - - try { - // Always run if this is a base branch build - def baseBranch = "develop" - def isBaseBranchBuild = (env.CHANGE_ID == null && env.BRANCH_NAME == baseBranch) - - if (isBaseBranchBuild) { - echo "Base branch (${baseBranch}) build detected - always running CI for safety" - return true - } - - // Get the list of changed files (all files touched in any commit, even if reverted) - def changedFiles = sh( - returnStdout: true, - script: ''' - BASE_BRANCH="develop" - - if [ "$CHANGE_ID" != "" ]; then - # For PR builds, get all files touched in any commit - echo "PR build detected, checking all touched files against origin/$CHANGE_TARGET" >&2 - git log --name-only --pretty=format: origin/$CHANGE_TARGET..HEAD -- projects/composablekernel/ | sort -u | grep -v '^$' || true - else - # For feature branch builds, compare against merge-base with base branch - MERGE_BASE=$(git merge-base HEAD origin/$BASE_BRANCH 2>/dev/null || echo "HEAD~1") - echo "Branch build detected, checking all touched files since merge-base: $MERGE_BASE" >&2 - git log --name-only --pretty=format: $MERGE_BASE..HEAD -- projects/composablekernel/ | sort -u | grep -v '^$' || true - fi - ''' - ).trim().split('\n') - - if (changedFiles.size() == 1 && changedFiles[0] == '') { - echo "No changed files detected - this might be a manual trigger or merge commit, running CI for safety" - return true - } - - echo "Changed files: ${changedFiles.join(', ')}" - - // Separate files into those requiring CI and those that can be skipped - def filesRequiringCI = [] - def skippedFiles = [] - - changedFiles.each { file -> - def shouldSkip = skipFilePatterns.any { pattern -> - file ==~ pattern - } - - if (shouldSkip) { - skippedFiles.add(file) - } else { - filesRequiringCI.add(file) - } - } - - // Debug output - if (skippedFiles.size() > 0) { - echo "Files that don't require CI (${skippedFiles.size()}):" - skippedFiles.each { echo " - ${it}" } - } - - if (filesRequiringCI.size() > 0) { - echo "Files that require CI (${filesRequiringCI.size()}):" - filesRequiringCI.each { echo " - ${it}" } - return true - } else { - echo "Only non-relevant files changed, skipping CI" - return false - } - } catch (Exception e) { - echo "Error checking changed files: ${e.getMessage()}, running CI by default" - return true - } -} - -def getBaseDockerImageName(){ - def img - if (params.USE_CUSTOM_DOCKER != ""){ - img = "${params.USE_CUSTOM_DOCKER}" - } - else{ - img = "${env.CK_DOCKERHUB}:ck_ub24.04_rocm${params.ROCMVERSION}" - } - return img -} - -def getDockerImageName(){ - def img - def base_name = getBaseDockerImageName() - if (params.USE_CUSTOM_DOCKER != ""){ - img = "${params.USE_CUSTOM_DOCKER}" - } - else{ - if (params.COMPILER_VERSION == "") { - img = "${base_name}" - } - else{ - if (params.COMPILER_COMMIT == ""){ - img = "${base_name}_${params.COMPILER_VERSION}" - } - else{ - def commit = "${params.COMPILER_COMMIT}"[0..6] - img = "${base_name}_${params.COMPILER_VERSION}_${commit}" - } - } - } - return img -} - -def check_host() { - if ("${env.CK_SCCACHE}" != "null"){ - def SCCACHE_SERVER="${env.CK_SCCACHE.split(':')[0]}" - echo "sccache server: ${SCCACHE_SERVER}" - sh "chmod +w -R ${env.WORKSPACE}" - sh '''ping -c 1 -p 6379 "${SCCACHE_SERVER}" | echo $? > tmp.txt''' - def output = readFile(file: "tmp.txt") - echo "tmp.txt contents: \$output" - return (output != "0") - } - else{ - return 1 - } -} - -def check_arch_name(){ - sh 'rocminfo | tee rocminfo.log' - if ( runShell('grep -n "gfx90a" rocminfo.log') ){ - return "gfx90a" - } - else if ( runShell('grep -n "gfx942" rocminfo.log') ) { - return "gfx942" - } - else if ( runShell('grep -n "gfx101" rocminfo.log') ) { - return "gfx101" - } - else if ( runShell('grep -n "gfx103" rocminfo.log') ) { - return "gfx103" - } - else if ( runShell('grep -n "gfx11" rocminfo.log') ) { - return "gfx11" - } - else if ( runShell('grep -n "gfx120" rocminfo.log') ) { - return "gfx12" - } - else if ( runShell('grep -n "gfx908" rocminfo.log') ) { - return "gfx908" - } - else if ( runShell('grep -n "gfx950" rocminfo.log') ) { - return "gfx950" - } - else { - return "" - } -} - -def getDockerImage(Map conf=[:]){ - def image - if ( conf.get("docker_name", "") != "" ){ - image = conf.get("docker_name", "") - echo "Using special docker: ${image}" - } - else{ - image = getDockerImageName() - echo "Using default docker: ${image}" - } - //Check if image exists - def retimage - try - { - echo "Pulling image: ${image}" - retimage = docker.image("${image}") - withDockerRegistry([ credentialsId: "ck_docker_cred", url: "" ]) { - retimage.pull() - } - } - catch(Exception ex) - { - error "Unable to locate image: ${image}" - } - return [retimage, image] -} - -// Build and push a docker image, capturing its digest into the specified env var. -// If forceBuild is false, will skip building if the image already exists in the registry. -def buildAndPushDockerImage(String install_prefix, String image_name, String dockerExtraArgs, boolean forceBuild){ - show_node_info() - env.DOCKER_BUILDKIT=1 - checkoutComposableKernel() - def dockerArgs = "--build-arg PREFIX=${install_prefix} --build-arg compiler_version='${params.COMPILER_VERSION}' --build-arg compiler_commit='${params.COMPILER_COMMIT}' --build-arg ROCMVERSION='${params.ROCMVERSION}' " - dockerArgs += " " + dockerExtraArgs - - if(!forceBuild){ - try{ - echo "Checking for image: ${image_name}" - sh "docker manifest inspect --insecure ${image_name}" - echo "Image: ${image_name} found! Skipping building image" - return image_name - } - catch(Exception ex){ - echo "Unable to locate image: ${image_name}. Will attempt to build image now." - } - } - - echo "Building image: ${image_name} with args: ${dockerArgs}" - def retimage = docker.build("${image_name}", dockerArgs) - withDockerRegistry([ credentialsId: "ck_docker_cred", url: "" ]) { - retimage.push() - } - def digest = sh(returnStdout: true, script: "docker inspect --format='{{index .RepoDigests 0}}' ${image_name}").trim() - echo "Built image digest: ${digest}" - echo "Pruning dangling Docker images to free disk space on CI agent" - sh "docker image prune -f --filter 'dangling=true' || true" - return digest -} - -def buildDockerBase(install_prefix){ - def image_name = getDockerImageName() - def base_image_name = getBaseDockerImageName() - echo "Building Docker for ${image_name}" - def dockerExtraArgs = " -f projects/composablekernel/Dockerfile . " - if(params.COMPILER_VERSION == "develop" || params.COMPILER_VERSION == "amd-staging" || params.COMPILER_COMMIT != ""){ - dockerExtraArgs = " --no-cache --build-arg BASE_DOCKER='${base_image_name}' -f projects/composablekernel/Dockerfile.compiler . " - } - else if(params.COMPILER_VERSION == "therock"){ - dockerExtraArgs = " --no-cache -f projects/composablekernel/Dockerfile . " - } - env.CK_BASE_IMAGE = buildAndPushDockerImage(install_prefix, image_name, dockerExtraArgs, params.BUILD_DOCKER.toBoolean()) -} - -def buildDockerPytorch(install_prefix){ - def image_name = "${env.CK_DOCKERHUB_PRIVATE}:ck_pytorch" - def dockerExtraArgs = " --no-cache -f projects/composablekernel/Dockerfile.pytorch --build-arg CK_PYTORCH_BRANCH='${params.ck_pytorch_branch}' . " - env.CK_PYTORCH_IMAGE = buildAndPushDockerImage(install_prefix, image_name, dockerExtraArgs, true) -} - -def buildDockerAiter(install_prefix){ - def image_name = "${env.CK_DOCKERHUB_PRIVATE}:ck_aiter" - def dockerExtraArgs = " --no-cache -f projects/composablekernel/Dockerfile.aiter --build-arg AITER_BRANCH='${params.aiter_branch}' --build-arg CK_AITER_BRANCH='${params.ck_aiter_branch}' . " - env.CK_AITER_IMAGE = buildAndPushDockerImage(install_prefix, image_name, dockerExtraArgs, true) -} - -def buildDockerFa(install_prefix){ - def image_name = "${env.CK_DOCKERHUB_PRIVATE}:ck_fa" - def dockerExtraArgs = " --no-cache -f projects/composablekernel/Dockerfile.fa" - dockerExtraArgs += " --build-arg BASE_DOCKER='${params.fa_base_docker}'" - dockerExtraArgs += " --build-arg FA_BRANCH='${params.fa_branch}'" - dockerExtraArgs += " --build-arg CK_FA_BRANCH='${params.ck_fa_branch}'" - dockerExtraArgs += " --build-arg GPU_ARCHS='gfx942;gfx950'" - dockerExtraArgs += " . " - env.CK_FA_IMAGE = buildAndPushDockerImage(install_prefix, image_name, dockerExtraArgs, true) -} - -def buildDocker(install_prefix){ - buildDockerBase(install_prefix) - if (params.RUN_PYTORCH_TESTS.toBoolean()) { - buildDockerPytorch(install_prefix) - } - if (params.RUN_AITER_TESTS.toBoolean()) { - buildDockerAiter(install_prefix) - } - if (params.RUN_FA_TESTS.toBoolean()) { - buildDockerFa(install_prefix) - } -} - -def get_docker_options(){ - def dockerOpts - if ( params.BUILD_INSTANCES_ONLY ){ - dockerOpts = "--network=host --group-add video --group-add render --cap-add=SYS_PTRACE --security-opt seccomp=unconfined" - } - else{ //only add kfd and dri paths if you actually going to run somthing on GPUs - dockerOpts = "--network=host --device=/dev/kfd --device=/dev/dri --group-add video --group-add render --cap-add=SYS_PTRACE --security-opt seccomp=unconfined" - } - if (params.COMPILER_VERSION == "develop" || params.COMPILER_VERSION == "amd-staging" || params.COMPILER_VERSION == "therock" || params.COMPILER_COMMIT != ""){ - // the --env COMPRESSED_BUNDLE_FORMAT_VERSION=2 env variable is required when building code with offload-compress flag with - // newer clang22 compilers and running with older hip runtima libraries - dockerOpts = dockerOpts + " --env HIP_CLANG_PATH='/llvm-project/build/bin' --env COMPRESSED_BUNDLE_FORMAT_VERSION=2 --env HIP_PLATFORM=amd " - } - // on some machines the group ids for video and render groups may not be the same as in the docker image! - def video_id = sh(returnStdout: true, script: 'getent group video | cut -d: -f3') - def render_id = sh(returnStdout: true, script: 'getent group render | cut -d: -f3') - dockerOpts = dockerOpts + " --group-add=${video_id} --group-add=${render_id} -v /var/jenkins/ref-repo/:/var/jenkins/ref-repo/ " - echo "Docker flags: ${dockerOpts}" - return dockerOpts -} - -def build_client_examples(String arch){ - def cmd = """ cd ../client_example && rm -rf build && mkdir build && cd build && \ - cmake -DCMAKE_PREFIX_PATH="${env.WORKSPACE}/projects/composablekernel/install;/opt/rocm" \ - -DGPU_TARGETS="${arch}" \ - -DCMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -DCMAKE_HIP_COMPILER="${params.BUILD_COMPILER}" \ - -DCMAKE_CXX_FLAGS=" -O3 " .. && make -j """ - return cmd -} - -def build_client_examples_and_codegen_tests(String arch){ - def cmd = """ cd ../codegen && rm -rf build && mkdir build && cd build && \ - cmake -DCMAKE_PREFIX_PATH=/opt/rocm -DCMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" .. && \ - make -j64 check && \ - cd ../../client_example && rm -rf build && mkdir build && cd build && \ - cmake -DCMAKE_PREFIX_PATH="${env.WORKSPACE}/projects/composablekernel/install;/opt/rocm" \ - -DGPU_TARGETS="${arch}" \ - -DCMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -DCMAKE_HIP_COMPILER="${params.BUILD_COMPILER}" \ - -DCMAKE_CXX_FLAGS=" -O3 " .. && make -j """ - return cmd -} - -def build_and_run_fmha(String arch){ - def cmd = """ cmake -G Ninja -DCMAKE_PREFIX_PATH="${env.WORKSPACE}/projects/composablekernel/install;/opt/rocm" \ - -DGPU_TARGETS="${arch}" \ - -DCMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -DCMAKE_HIP_COMPILER="${params.BUILD_COMPILER}" .. && \ - ninja -j128 tile_example_fmha_fwd tile_example_fmha_bwd && \ - cd ../ && - example/ck_tile/01_fmha/script/run_full_test.sh "CI_${params.COMPILER_VERSION}" "${env.BRANCH_NAME}" "${NODE_NAME}" "${arch}" """ - return cmd -} - -def cmake_build(Map conf=[:]){ - - def config_targets = conf.get("config_targets","check") - def build_envs = "CTEST_PARALLEL_LEVEL=4 " + conf.get("build_env","") - def prefixpath = conf.get("prefixpath","/opt/rocm") - def setup_args = conf.get("setup_args","") - // make sure all unit tests always run on develop branch - def runAllUnitTests = (env.BRANCH_NAME == "develop") ? true : params.RUN_ALL_UNIT_TESTS - - if (prefixpath != "/usr/local"){ - setup_args = setup_args + " -DCMAKE_PREFIX_PATH=${prefixpath} " - } - - //cmake_env can overwrite default CXX variables. - def cmake_envs - if(!setup_args.contains("gfx1250")){ - cmake_envs = "CXX=${params.BUILD_COMPILER} CXXFLAGS='-Werror' " + conf.get("cmake_ex_env","") - } - else{ //use default compiler for gfx1250 - cmake_envs = "CXX=/opt/rocm/llvm/bin/clang++ CXXFLAGS='-Werror' " + conf.get("cmake_ex_env","") - } - - if(conf.get("build_install","") == "true") - { - config_targets = 'install ' + config_targets - setup_args = ' -DBUILD_DEV=On -DCMAKE_INSTALL_PREFIX=../install' + setup_args - } else{ - setup_args = ' -DBUILD_DEV=On' + setup_args - } - if (params.DISABLE_DL_KERNELS){ - setup_args = setup_args + " -DDISABLE_DL_KERNELS=ON " - } - - setup_args = " -DCMAKE_BUILD_TYPE=release " + setup_args - - def pre_setup_cmd = """ - #!/bin/bash - cd projects/composablekernel - ulimit -c unlimited - rm -rf build - mkdir build - rm -rf install - mkdir install - cd build - """ - def invocation_tag="" - if (setup_args.contains("gfx12")){ - invocation_tag="gfx12" - } - if (setup_args.contains("gfx11")){ - invocation_tag="gfx11" - } - if (setup_args.contains("gfx101")){ - invocation_tag="gfx101" - } - if (setup_args.contains("gfx103")){ - invocation_tag="gfx103" - } - if (setup_args.contains("gfx908")){ - invocation_tag="gfx908" - } - if (setup_args.contains("gfx90a")){ - invocation_tag="gfx90a" - } - if (setup_args.contains("gfx94")){ - invocation_tag="gfx94" - } - if (setup_args.contains("gfx95")){ - invocation_tag="gfx95" - } - echo "invocation tag: ${invocation_tag}" - def redis_pre_setup_cmd = pre_setup_cmd - if(check_host() && params.USE_SCCACHE && "${env.CK_SCCACHE}" != "null" && "${invocation_tag}" != "") { - redis_pre_setup_cmd = pre_setup_cmd + """ - #!/bin/bash - export ROCM_PATH=/opt/rocm - export SCCACHE_ENABLED=true - export SCCACHE_LOG_LEVEL=debug - export SCCACHE_IDLE_TIMEOUT=14400 - export COMPILERS_HASH_DIR=/tmp/.sccache - export SCCACHE_BIN=/usr/local/.cargo/bin/sccache - export SCCACHE_EXTRAFILES=/tmp/.sccache/rocm_compilers_hash_file - export SCCACHE_REDIS="redis://${env.CK_SCCACHE}" - echo "connect = ${env.CK_SCCACHE}" >> ../script/redis-cli.conf - export SCCACHE_C_CUSTOM_CACHE_BUSTER="${invocation_tag}" - echo \$SCCACHE_C_CUSTOM_CACHE_BUSTER - stunnel ../script/redis-cli.conf - ../script/sccache_wrapper.sh --enforce_redis - """ - try { - def cmd1 = conf.get("cmd1", """ - ${redis_pre_setup_cmd} - """) - sh cmd1 - setup_args = " -DCMAKE_HIP_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache " + setup_args - } - catch(Exception err){ - echo "could not connect to redis server: ${err.getMessage()}. will not use sccache." - def cmd2 = conf.get("cmd2", """ - ${pre_setup_cmd} - """) - sh cmd2 - } - } - else{ - def cmd3 = conf.get("cmd3", """ - ${pre_setup_cmd} - """) - sh cmd3 - } - - // reduce parallelism when compiling, clang uses too much memory - def nt = nthreads() - def cmd - def setup_cmd - def build_cmd - def execute_cmd = conf.get("execute_cmd", "") - //check the node gpu architecture - def arch_name = check_arch_name() - if(!setup_args.contains("NO_CK_BUILD")){ - if (params.NINJA_BUILD_TRACE) { - echo "running ninja build trace" - } - if (params.RUN_BUILDER_TESTS && !setup_args.contains("-DCK_CXX_STANDARD=") && !setup_args.contains("gfx10") && !setup_args.contains("gfx11")) { - setup_args = " -D CK_EXPERIMENTAL_BUILDER=ON " + setup_args - } - if (params.RUN_ROCM_CK_TESTS) { - setup_args = " -D CK_ENABLE_ROCM_CK=ON " + setup_args - } - setup_cmd = conf.get( - "setup_cmd", - """${cmake_envs} cmake -G Ninja ${setup_args} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_FLAGS=" -O3 " .. """ - ) - - // Smart-build: Only build if running all tests or forced - // Otherwise, smart-build will determine what to build after cmake configure - if (runAllUnitTests) { - build_cmd = conf.get( - "build_cmd", - "${build_envs} ninja -j${nt} ${config_targets}" - ) - } else { - // Smart-build enabled: skip full build and execute_cmd (client examples) - build_cmd = "" - execute_cmd = "" - } - - cmd = conf.get("cmd", """ - ${setup_cmd} - ${build_cmd} - ${execute_cmd} - """) - } - else{ - cmd = conf.get("cmd", """ - ${execute_cmd} - """) - } - - echo cmd - - dir("projects/composablekernel/build"){ - // Start sccache monitoring - if(check_host() && params.USE_SCCACHE && "${env.CK_SCCACHE}" != "null" && "${invocation_tag}" != "") { - sh """ - chmod +x ../script/monitor_sccache_during_build.sh - mkdir -p logs - export SCCACHE_C_CUSTOM_CACHE_BUSTER="${invocation_tag}" - ../script/monitor_sccache_during_build.sh build_monitor & - MONITOR_PID=\$! - echo "Monitor PID: \$MONITOR_PID" - echo \$MONITOR_PID > monitor.pid - """ - } - try { - //build CK - sh cmd - if (runAllUnitTests){ - // Archive artifacts if they were generated - if (fileExists("ck_build_trace_${arch_name}.json")) { - archiveArtifacts "ck_build_trace_${arch_name}.json" - } - if (fileExists("clang_build_analysis_${arch_name}.log")) { - archiveArtifacts "clang_build_analysis_${arch_name}.log" - } - // Process ninja build trace after full build - if(fileExists(".ninja_log")) { - sh "python3 ../script/ninja_json_converter.py .ninja_log --legacy-format --output ck_build_trace_${arch_name}.json" - archiveArtifacts "ck_build_trace_${arch_name}.json" - sh "python3 ../script/parse_ninja_trace.py ck_build_trace_${arch_name}.json" - } - - if (params.NINJA_FTIME_TRACE) { - echo "running ClangBuildAnalyzer" - sh "/ClangBuildAnalyzer/build/ClangBuildAnalyzer --all . clang_build.log" - sh "/ClangBuildAnalyzer/build/ClangBuildAnalyzer --analyze clang_build.log > clang_build_analysis_${arch_name}.log" - archiveArtifacts "clang_build_analysis_${arch_name}.log" - } - } - } catch (Exception buildError) { - echo "Build failed: ${buildError.getMessage()}" - throw buildError - } finally { - // Stop sccache monitoring - if(check_host() && params.USE_SCCACHE && "${env.CK_SCCACHE}" != "null" && "${invocation_tag}" != "") { - sh """ - # Stop monitoring - if [ -f monitor.pid ]; then - MONITOR_PID=\$(cat monitor.pid) - kill \$MONITOR_PID 2>/dev/null || echo "Monitor already stopped" - rm -f monitor.pid - fi - """ - - // Archive the monitoring logs - try { - archiveArtifacts artifacts: "logs/*monitor*.log", allowEmptyArchive: true - } catch (Exception e) { - echo "Could not archive sccache monitoring logs: ${e.getMessage()}" - } - } - } - - //run tests except when NO_CK_BUILD is set and except on gfx1250 - if(!setup_args.contains("NO_CK_BUILD")){ - // run unit tests unless building library for all targets - // Note: This else block is when NINJA_BUILD_TRACE=false and BUILD_INSTANCES_ONLY=false - // So no ninja trace processing needed here - if (!params.BUILD_INSTANCES_ONLY){ - if (!runAllUnitTests && !setup_args.contains("gfx1250") ){ - // Smart Build: Run smart_build_and_test.sh - sh """ - export WORKSPACE_ROOT=${env.WORKSPACE} - export PARALLEL=32 - export NINJA_JOBS=${nt} - export ARCH_NAME=${arch_name} - export PROCESS_NINJA_TRACE=false - export NINJA_FTIME_TRACE=false - bash ../script/dependency-parser/smart_build_and_test.sh - """ - } - else{ //run all tests - if(!setup_args.contains("gfx1250")){ - echo "Full test suite requested (RUN_ALL_UNIT_TESTS=true or develop branch)" - sh "ninja -j${nt} check" - } - else{ //do not run tests on gfx1250, just build everything - echo "Building for gfx1250" - sh "ninja -j${nt}" - } - if (params.RUN_ROCM_CK_TESTS) { - sh 'ninja check-rocm-ck' - } - if(params.BUILD_PACKAGES || params.BUILD_INSTANCES_ONLY){ - echo "Build ckProfiler packages" - sh 'ninja -j64 package' - sh "mv composablekernel-ckprofiler_*.deb composablekernel-ckprofiler_1.2.0_amd64_${arch_name}.deb" - stash includes: "composablekernel-ckprofiler**.deb", name: "profiler_package_${arch_name}" - } - } - if (params.RUN_BUILDER_TESTS && !setup_args.contains("-DCK_CXX_STANDARD=") && !setup_args.contains("gfx10") && !setup_args.contains("gfx11")) { - sh 'ninja check-builder' - } - } - } - } - - if (params.RUN_CK_TILE_FMHA_TESTS){ - try{ - dir("projects/composablekernel"){ - archiveArtifacts "perf_fmha_*.log" - stash includes: "perf_fmha_**.log", name: "perf_fmha_log_${arch_name}" - } - } - catch(Exception err){ - echo "could not locate the requested artifacts: ${err.getMessage()}. will skip the stashing." - } - } -} - -def buildHipClangJob(Map conf=[:]){ - show_node_info() - checkoutComposableKernel() - def prefixpath = conf.get("prefixpath", "/opt/rocm") - def dockerOpts = get_docker_options() - def image - def retimage - (retimage, image) = getDockerImage(conf) - - setGithubStatus("${env.STAGE_NAME}", 'pending', "Starting ${env.STAGE_NAME}") - try { - withDockerContainer(image: image, args: dockerOpts) { - timeout(time: 20, unit: 'HOURS') - { - cmake_build(conf) - } - } - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - return retimage -} - -def buildHipClangJobAndReboot(Map conf=[:]){ - try{ - buildHipClangJob(conf) - } - catch(e){ - echo "throwing error exception for the stage" - echo 'Exception occurred: ' + e.toString() - throw e - } -} - -def Build_CK(Map conf=[:]){ - show_node_info() - checkoutComposableKernel() - def prefixpath = conf.get("prefixpath", "/opt/rocm") - def dockerOpts=get_docker_options() - def image - def retimage - - setGithubStatus("${env.STAGE_NAME}", 'pending', "Starting ${env.STAGE_NAME}") - try { - try { - (retimage, image) = getDockerImage(conf) - withDockerContainer(image: image, args: dockerOpts) { - timeout(time: 2, unit: 'MINUTES'){ - sh 'rocminfo | tee rocminfo.log' - if ( !runShell('grep -n "gfx" rocminfo.log') ){ - throw new Exception ("GPU not found") - } - else{ - echo "GPU is OK" - } - } - } - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - echo "The job was cancelled or aborted" - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - withDockerContainer(image: image, args: dockerOpts) { - timeout(time: 20, unit: 'HOURS') - { - //check whether to run performance tests on this node - def arch = check_arch_name() - cmake_build(conf) - if ( params.RUN_INDUCTOR_TESTS && arch == "gfx90a" ){ - echo "Run inductor codegen tests" - sh "projects/composablekernel/script/run_inductor_tests.sh" - } - // run performance tests, stash the logs, results will be processed on the master node - dir("projects/composablekernel/script"){ - if (params.RUN_PERFORMANCE_TESTS){ - if (params.RUN_FULL_QA && (arch == "gfx90a" || arch == "gfx942")){ - // run full tests on gfx90a or gfx942 - echo "Run full performance tests" - sh "./run_full_performance_tests.sh 0 QA_${params.COMPILER_VERSION} ${env.BRANCH_NAME} ${NODE_NAME} ${arch}" - archiveArtifacts "perf_*.log" - stash includes: "perf_**.log", name: "perf_log_${arch}" - } - else if (!params.RUN_FULL_QA && (arch == "gfx90a" || arch == "gfx942")){ - // run standard tests on gfx90a or gfx942 - echo "Run performance tests" - sh "./run_performance_tests.sh 0 CI_${params.COMPILER_VERSION} ${env.BRANCH_NAME} ${NODE_NAME} ${arch}" - archiveArtifacts "perf_*.log" - stash includes: "perf_**.log", name: "perf_log_${arch}" - } - else if ( arch != "gfx10"){ - // run basic tests on gfx11/gfx12/gfx908/gfx950, but not on gfx10, it takes too long - echo "Run gemm performance tests" - sh "./run_gemm_performance_tests.sh 0 CI_${params.COMPILER_VERSION} ${env.BRANCH_NAME} ${NODE_NAME} ${arch}" - archiveArtifacts "perf_onnx_gemm_*.log" - stash includes: "perf_onnx_gemm_**.log", name: "perf_log_${arch}" - } - } - } - if (params.hipTensor_test && arch == "gfx90a" ){ - // build and test hipTensor on gfx90a node - sh """#!/bin/bash - rm -rf rocm-libraries - git clone --no-checkout --filter=blob:none https://github.com/ROCm/rocm-libraries.git - cd rocm-libraries - git sparse-checkout init --cone - git sparse-checkout set projects/hiptensor - git checkout "${params.hipTensor_branch}" - """ - dir("rocm-libraries/projects/hiptensor"){ - sh """#!/bin/bash - mkdir -p build - ls -ltr - CC=hipcc CXX=hipcc cmake -Bbuild . -D CMAKE_PREFIX_PATH="${env.WORKSPACE}/install" - cmake --build build -- -j - ctest --test-dir build - """ - } - } - } - } - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - return retimage -} - -def Build_CK_and_Reboot(Map conf=[:]){ - try{ - Build_CK(conf) - } - catch(e){ - echo "throwing error exception while building CK" - echo 'Exception occurred: ' + e.toString() - throw e - } -} - -def process_results(Map conf=[:]){ - checkoutComposableKernel() - //use older image that has user jenkins - def image = "${env.CK_DOCKERHUB}:ck_ub22.04_rocm6.3" - - setGithubStatus("${env.STAGE_NAME}", 'pending', 'Processing results...') - try { - try - { - echo "Pulling image: ${image}" - def retimage = docker.image("${image}") - withDockerRegistry([ credentialsId: "ck_docker_cred", url: "" ]) { - retimage.pull() - } - } - catch(Exception ex) - { - error "Unable to locate image: ${image}" - } - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - - withDockerContainer(image: image, args: '--cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v=/var/jenkins/:/var/jenkins') { - timeout(time: 15, unit: 'MINUTES'){ - try{ - dir("projects/composablekernel/script"){ - if (params.RUN_CK_TILE_FMHA_TESTS){ - try{ - unstash "perf_fmha_log_gfx942" - } - catch(Exception err){ - echo "could not locate the FMHA performance logs for gfx942: ${err.getMessage()}." - } - try{ - unstash "perf_fmha_log_gfx90a" - } - catch(Exception err){ - echo "could not locate the FMHA performance logs for gfx90a: ${err.getMessage()}." - } - try{ - unstash "perf_fmha_log_gfx950" - } - catch(Exception err){ - echo "could not locate the FMHA performance logs for gfx950: ${err.getMessage()}." - } - - } - if (params.BUILD_INSTANCES_ONLY){ - // unstash deb packages - try{ - unstash "lib_package" - sh "sshpass -p ${env.ck_deb_pw} scp -o StrictHostKeyChecking=no composablekernel-*.deb ${env.ck_deb_user}@${env.ck_deb_ip}:/var/www/html/composable_kernel/" - } - catch(Exception err){ - echo "could not locate lib_package." - } - } - if (params.BUILD_PACKAGES){ - // unstash deb packages - try{ - unstash "profiler_package_gfx90a" - sh "sshpass -p ${env.ck_deb_pw} scp -o StrictHostKeyChecking=no composablekernel-ckprofiler*.deb ${env.ck_deb_user}@${env.ck_deb_ip}:/var/www/html/composable_kernel/" - } - catch(Exception err){ - echo "could not locate profiler_package_gfx90a." - } - try{ - unstash "profiler_package_gfx942" - sh "sshpass -p ${env.ck_deb_pw} scp -o StrictHostKeyChecking=no composablekernel-ckprofiler*.deb ${env.ck_deb_user}@${env.ck_deb_ip}:/var/www/html/composable_kernel/" - } - catch(Exception err){ - echo "could not locate profiler_package_gfx942." - } - try{ - unstash "profiler_package_gfx950" - sh "sshpass -p ${env.ck_deb_pw} scp -o StrictHostKeyChecking=no composablekernel-ckprofiler*.deb ${env.ck_deb_user}@${env.ck_deb_ip}:/var/www/html/composable_kernel/" - } - catch(Exception err){ - echo "could not locate profiler_package_gfx950." - } - try{ - unstash "profiler_package_gfx12" - sh "sshpass -p ${env.ck_deb_pw} scp -o StrictHostKeyChecking=no composablekernel-ckprofiler*.deb ${env.ck_deb_user}@${env.ck_deb_ip}:/var/www/html/composable_kernel/" - } - catch(Exception err){ - echo "could not locate profiler_package_gfx12." - } - } - else{ - // unstash perf files to master - try{ - unstash "perf_log_gfx90a" - } - catch(Exception err){ - echo "could not locate the gfx90a performance logs: ${err.getMessage()}." - } - try{ - unstash "perf_log_gfx942" - } - catch(Exception err){ - echo "could not locate the gfx942 performance logs: ${err.getMessage()}." - } - try{ - unstash "perf_log_gfx950" - } - catch(Exception err){ - echo "could not locate the gfx950 performance logs: ${err.getMessage()}." - } - try{ - unstash "perf_log_gfx908" - } - catch(Exception err){ - echo "could not locate the gfx908 performance logs: ${err.getMessage()}." - } - try{ - unstash "perf_log_gfx11" - } - catch(Exception err){ - echo "could not locate the gfx11 performance logs: ${err.getMessage()}." - } - try{ - - unstash "perf_log_gfx12" - } - catch(Exception err){ - echo "could not locate the gfx12 performance logs: ${err.getMessage()}." - } - } - // process the logs - sh "./process_perf_data.sh" - } - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - finally{ - echo "Finished processing performance test results" - } - } - } -} - -def run_downstream_tests(Map conf=[:]){ - show_node_info() - checkoutComposableKernel() - def dockerOpts = get_docker_options() + ' --group-add irc ' - - setGithubStatus("${env.STAGE_NAME}", 'pending', "Starting ${env.STAGE_NAME}") - try { - try - { - echo "Pulling image: ${conf.image}" - retimage = docker.image("${conf.image}") - withDockerRegistry([ credentialsId: "ck_docker_cred", url: "" ]) { - retimage.pull() - } - } - catch(Exception ex) - { - error "Unable to locate image: ${conf.image}" - } - } - catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ - setGithubStatus("${env.STAGE_NAME}", 'failure', "Stage ${env.STAGE_NAME} failed") - throw e - } - - withDockerContainer(image: conf.image, args: dockerOpts) { - timeout(time: conf.get("timeoutHours", 2), unit: 'HOURS'){ - try{ - sh "rocminfo" - sh "python3 --version" - for (cmd in conf.execute_cmds) { - sh "${cmd}" - } - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") - } - catch(e){ - echo "Throwing error exception while running ${env.STAGE_NAME}" - echo 'Exception occurred: ' + e.toString() - setGithubStatus("${env.STAGE_NAME}", 'error', "Stage ${env.STAGE_NAME} failed") - throw e - } - finally{ - echo "Finished running ${env.STAGE_NAME}" - } - } - } -} - -def getPytorchTestsCmds() { - return [ - "mkdir pytorch", - "cp -r /var/jenkins/workspace/pytorch/* pytorch/", - "ls -ltr pytorch", - "python3 pytorch/tools/amd_build/build_amd.py", - "cd pytorch && USE_ROCM_CK_SDPA=1 PYTORCH_ROCM_ARCH=gfx942 python3 setup.py develop" - ] -} -def getAiterTestsCmds() { - return [ - "python3 /home/jenkins/workspace/aiter/op_tests/test_gemm_a8w8.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_gemm_a8w8_blockscale.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_mha.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_mha_varlen.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_batch_prefill.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_2stage.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_blockscale.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_ep.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_sorting.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_sorting_mxfp4.py", - "python3 /home/jenkins/workspace/aiter/op_tests/test_moe_tkw1.py" - ] -} -def getFaTestsCmds() { - return [ - "python3 -u -m pytest /home/jenkins/workspace/flash-attention/tests/test_flash_attn_ck.py" - ] +def loadCk() { + def branch = (params.USE_CURRENT_BRANCH_FOR_CK_GROOVY + ? (env.CHANGE_BRANCH ?: env.BRANCH_NAME) + : 'develop') + library("ck@${branch}") } //launch develop branch daily jobs @@ -1463,6 +252,10 @@ pipeline { name: "FORCE_CI", defaultValue: false, description: "Force CI to run even when only non-relevant files are changed (default: OFF)") + booleanParam( + name: 'USE_CURRENT_BRANCH_FOR_CK_GROOVY', + defaultValue: false, + description: 'Load ck.groovy from the current branch instead of develop. Enable when testing pipeline changes (default: OFF).') } environment{ dbuser = "${dbuser}" @@ -1477,12 +270,15 @@ pipeline { } stages{ stage("Determine CI Execution") { - agent{ label rocmnode("nogpu") } + agent none steps { script { - checkoutComposableKernel() - env.SHOULD_RUN_CI = String.valueOf(params.FORCE_CI.toBoolean() || shouldRunCICheck()) - echo "SHOULD_RUN_CI: ${env.SHOULD_RUN_CI}" + loadCk() + ck.runOnHealthyNode(rocmnode("nogpu")) { + ck.checkoutComposableKernel() + env.SHOULD_RUN_CI = String.valueOf(params.FORCE_CI.toBoolean() || ck.shouldRunCICheck()) + echo "SHOULD_RUN_CI: ${env.SHOULD_RUN_CI}" + } } } } @@ -1493,11 +289,16 @@ pipeline { } parallel{ stage('Docker /opt/rocm'){ - agent{ label rocmnode("nogpu") } + agent none steps{ - deleteDir() - buildDocker('/opt/rocm') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("nogpu")) { + deleteDir() + ck.buildDocker('/opt/rocm') + cleanWs() + } + } } } } @@ -1507,48 +308,13 @@ pipeline { beforeAgent true expression { env.SHOULD_RUN_CI.toBoolean() } } - parallel{ - stage('Clang Format and Cppcheck') { - when { - beforeAgent true - expression { params.RUN_CPPCHECK.toBoolean() } - } - agent{ label rocmnode("nogpu") } - environment{ - setup_args = "NO_CK_BUILD" - execute_cmd = """cd .. && \ - find . -type f \\( -name '*.h' -o -name '*.hpp' -o -name '*.cpp' -o -name '*.h.in' -o -name '*.hpp.in' -o -name '*.cpp.in' -o -name '*.cl' \\) \ - -not -path '*/build/*' -not -path '*/include/rapidjson/*' | \ - xargs -P 8 -I{} sh -c 'clang-format-18 -style=file {} | diff -u - {} || (echo "ERROR: {} needs formatting" && exit 1)' && \ - /cppcheck/build/bin/cppcheck ../* -v -j \$(nproc) -I ../include -I ../profiler/include -I ../library/include \ - -D CK_ENABLE_FP64 -D CK_ENABLE_FP32 -D CK_ENABLE_FP16 -D CK_ENABLE_FP8 -D CK_ENABLE_BF16 -D CK_ENABLE_BF8 -D CK_ENABLE_INT8 \ - -D __gfx908__ -D __gfx90a__ -D __gfx942__ -D __gfx1030__ -D __gfx1100__ -D __gfx1101__ -D __gfx1102__ \ - -U __gfx803__ -U __gfx900__ -U __gfx906__ -U CK_EXPERIMENTAL_BIT_INT_EXTENSION_INT4 \ - --file-filter=*.cpp --force --enable=all --output-file=ck_cppcheck.log""" - } - steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, setup_cmd: "", build_cmd: "", execute_cmd: execute_cmd) - archiveArtifacts "build/ck_cppcheck.log" - cleanWs() - } - } - stage('Clang Format') { - when { - beforeAgent true - expression { !params.RUN_CPPCHECK.toBoolean() } - } - agent{ label rocmnode("nogpu") } - environment{ - setup_args = "NO_CK_BUILD" - execute_cmd = """cd .. && \ - find . -type f \\( -name '*.h' -o -name '*.hpp' -o -name '*.cpp' -o -name '*.h.in' -o -name '*.hpp.in' -o -name '*.cpp.in' -o -name '*.cl' \\) \ - -not -path '*/build/*' -not -path '*/include/rapidjson/*' | \ - xargs -P 8 -I{} sh -c 'clang-format-18 -style=file {} | diff -u - {} || (echo "ERROR: {} needs formatting" && exit 1)'""" - } - steps{ + agent none + steps{ + script { + loadCk() + ck.runOnHealthyNode(rocmnode("nogpu")) { deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, setup_cmd: "", build_cmd: "", execute_cmd: execute_cmd) + ck.runStaticChecks() cleanWs() } } @@ -1568,10 +334,15 @@ pipeline { beforeAgent true expression { params.RUN_PYTORCH_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942")} + agent none steps{ - run_downstream_tests(image: "${env.CK_PYTORCH_IMAGE}", timeoutHours: 2, execute_cmds: getPytorchTestsCmds()) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + ck.run_downstream_tests(image: "${env.CK_PYTORCH_IMAGE}", timeoutHours: 2, execute_cmds: ck.getPytorchTestsCmds()) + cleanWs() + } + } } } stage("Run AITER Tests on gfx942") @@ -1580,10 +351,15 @@ pipeline { beforeAgent true expression { params.RUN_AITER_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942")} + agent none steps{ - run_downstream_tests(image: "${env.CK_AITER_IMAGE}", timeoutHours: 5, execute_cmds: getAiterTestsCmds()) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + ck.run_downstream_tests(image: "${env.CK_AITER_IMAGE}", timeoutHours: 5, execute_cmds: ck.getAiterTestsCmds()) + cleanWs() + } + } } } stage("Run AITER Tests on gfx950") @@ -1592,10 +368,15 @@ pipeline { beforeAgent true expression { params.RUN_AITER_TESTS.toBoolean() } } - agent{ label rocmnode("gfx950")} + agent none steps{ - run_downstream_tests(image: "${env.CK_AITER_IMAGE}", timeoutHours: 5, execute_cmds: getAiterTestsCmds()) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx950")) { + ck.run_downstream_tests(image: "${env.CK_AITER_IMAGE}", timeoutHours: 5, execute_cmds: ck.getAiterTestsCmds()) + cleanWs() + } + } } } stage("Run FA Tests on gfx942") @@ -1604,10 +385,15 @@ pipeline { beforeAgent true expression { params.RUN_FA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942")} + agent none steps{ - run_downstream_tests(image: "${env.CK_FA_IMAGE}", timeoutHours: 5, execute_cmds: getFaTestsCmds()) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + ck.run_downstream_tests(image: "${env.CK_FA_IMAGE}", timeoutHours: 5, execute_cmds: ck.getFaTestsCmds()) + cleanWs() + } + } } } stage("Run FA Tests on gfx950") @@ -1616,10 +402,15 @@ pipeline { beforeAgent true expression { params.RUN_FA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx950")} + agent none steps{ - run_downstream_tests(image: "${env.CK_FA_IMAGE}", timeoutHours: 5, execute_cmds: getFaTestsCmds()) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx950")) { + ck.run_downstream_tests(image: "${env.CK_FA_IMAGE}", timeoutHours: 5, execute_cmds: ck.getFaTestsCmds()) + cleanWs() + } + } } } } @@ -1638,19 +429,16 @@ pipeline { beforeAgent true expression { params.RUN_FULL_CONV_TILE_TESTS.toBoolean() } } - agent{ label rocmnode("gfx90a")} - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ python3 ../experimental/grouped_convolution_tile_instances/generate_instances.py --mode=profiler && \ - cmake .. --preset dev-gfx90a -D CK_EXPERIMENTAL_BUILDER=ON && \ - make -j64 test_grouped_convnd_fwd_tile test_grouped_convnd_bwd_weight_tile && \ - ./bin/test_grouped_convnd_bwd_weight_tile && \ - ./bin/test_grouped_convnd_fwd_tile""" - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.runFullGroupedConvTileTests() + cleanWs() + } + } } } } @@ -1669,17 +457,16 @@ pipeline { beforeAgent true expression { params.RUN_GROUPED_CONV_LARGE_CASES_TESTS.toBoolean() } } - agent{ label rocmnode("gfx90a")} - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cmake .. --preset dev-gfx90a && \ - make -j64 test_grouped_convnd_fwd_large_cases test_grouped_convnd_bwd_data_large_cases test_grouped_convnd_fwd_bias_clamp_large_cases && \ - ./bin/test_grouped_convnd_fwd_large_cases && ./bin/test_grouped_convnd_bwd_data_large_cases && ./bin/test_grouped_convnd_fwd_bias_clamp_large_cases""" - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.runGroupedConvLargeCaseTests() + cleanWs() + } + } } } } @@ -1698,29 +485,16 @@ pipeline { beforeAgent true expression { params.RUN_CONV_COMPREHENSIVE_DATASET.toBoolean() } } - agent{ label rocmnode("gfx90a")} - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cd ../build && \ - cmake .. --preset dev-gfx90a && \ - make -j64 test_grouped_convnd_fwd_dataset_xdl && \ - test_grouped_convnd_bwd_data_dataset_xdl \ - test_grouped_convnd_bwd_weight_dataset_xdl && \ - cd ../test_data && \ - # Dataset generation modes: - # - small: ~60 test cases (minimal, quick testing - 3 models, 2 batch sizes, 2 image sizes) - # - half: ~300 test cases (moderate coverage - 16 models, 3 batch sizes, 5 image sizes), ~ 17 hours testing time - # - full: ~600 test cases (comprehensive - 16 models, 5 batch sizes, 9 image sizes), ~ 40 hours testing time - ./generate_test_dataset.sh small && \ - cd ../build && \ - ./bin/test_grouped_convnd_fwd_dataset_xdl && \ - ./bin/test_grouped_convnd_bwd_data_dataset_xdl && \ - ./bin/test_grouped_convnd_bwd_weight_dataset_xdl""" - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.runComprehensiveConvDatasetTests() + cleanWs() + } + } } } } @@ -1739,15 +513,16 @@ pipeline { beforeAgent true expression { params.RUN_CK_TILE_FMHA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx90a") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = build_and_run_fmha("gfx90a") - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.buildAndTest(setup_args: "NO_CK_BUILD", build_type: 'Release', execute_cmd: ck.build_and_run_fmha("gfx90a")) + cleanWs() + } + } } } stage("Run CK_TILE_FMHA Tests on gfx942") @@ -1756,15 +531,16 @@ pipeline { beforeAgent true expression { params.RUN_CK_TILE_FMHA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = build_and_run_fmha("gfx942") - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + deleteDir() + ck.buildAndTest(setup_args: "NO_CK_BUILD", build_type: 'Release', execute_cmd: ck.build_and_run_fmha("gfx942")) + cleanWs() + } + } } } stage("Run CK_TILE_FMHA Tests on gfx950") @@ -1773,15 +549,16 @@ pipeline { beforeAgent true expression { params.RUN_CK_TILE_FMHA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx950") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = build_and_run_fmha("gfx950") - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx950")) { + deleteDir() + ck.buildAndTest(setup_args: "NO_CK_BUILD", build_type: 'Release', execute_cmd: ck.build_and_run_fmha("gfx950")) + cleanWs() + } + } } } stage("Run CK_TILE_FMHA Tests on gfx1201") @@ -1790,15 +567,16 @@ pipeline { beforeAgent true expression { params.RUN_CK_TILE_FMHA_TESTS.toBoolean() } } - agent{ label rocmnode("gfx1201") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = build_and_run_fmha("gfx1201") - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx1201")) { + deleteDir() + ck.buildAndTest(setup_args: "NO_CK_BUILD", build_type: 'Release', execute_cmd: ck.build_and_run_fmha("gfx1201")) + cleanWs() + } + } } } } @@ -1817,32 +595,16 @@ pipeline { beforeAgent true expression { params.RUN_TILE_ENGINE_BASIC_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cmake -G Ninja -D CMAKE_PREFIX_PATH=/opt/rocm \ - -D BUILD_CK_TILE_ENGINE="ON" \ - -D CMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -D CMAKE_BUILD_TYPE=Release \ - -D GPU_TARGETS="gfx942" \ - -D GEMM_UNIVERSAL_DATATYPE="fp8;fp16" \ - -D GEMM_UNIVERSAL_LAYOUT="rcr;rrr;crr;ccr" \ - -D GEMM_UNIVERSAL_CONFIG_FILE="default_ci_config.json" \ - -D GEMM_MULTI_D_DATATYPE="fp16" \ - -D GEMM_MULTI_D_LAYOUT="rcrr;rrrr;crrr;ccrr" \ - -D GEMM_MULTI_D_CONFIG_FILE="default_ci_config.json" \ - -D GEMM_PRESHUFFLE_DATATYPE="fp16;fp8;bf16;bf8" \ - -D GEMM_PRESHUFFLE_LAYOUT="rcr" \ - -D GEMM_PRESHUFFLE_CONFIG_FILE="default_ci_config.json" .. && \ - ninja -j${nthreads()} benchmark_gemm_universal_all benchmark_gemm_preshuffle_all benchmark_gemm_multi_d_all && \ - python3 ../tile_engine/ops/gemm/gemm_universal/gemm_universal_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/gemm_preshuffle/gemm_preshuffle_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/gemm_multi_d/gemm_multi_d_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json """ - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + deleteDir() + ck.runTileEngineBasicTests(params.BUILD_COMPILER) + cleanWs() + } + } } } } @@ -1861,35 +623,16 @@ pipeline { beforeAgent true expression { params.RUN_TILE_ENGINE_GEMM_TESTS.toBoolean() } } - agent{ label rocmnode("gfx942") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cmake -G Ninja -D CMAKE_PREFIX_PATH=/opt/rocm \ - -D BUILD_CK_TILE_ENGINE="ON" \ - -D CMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -D CMAKE_BUILD_TYPE=Release \ - -D GPU_TARGETS="gfx942" \ - -D GEMM_UNIVERSAL_DATATYPE="fp8;fp16;bf8;bf16" \ - -D GEMM_UNIVERSAL_LAYOUT="rcr;rrr;crr;ccr" \ - -D GEMM_STREAMK_DATATYPE="fp8;fp16" \ - -D GEMM_STREAMK_LAYOUT="rcr" \ - -D GEMM_MULTI_D_DATATYPE="fp16" \ - -D GEMM_MULTI_D_LAYOUT="rcrr;rrrr;crrr;ccrr" \ - -D GEMM_PRESHUFFLE_DATATYPE="fp16;fp8;bf16;bf8" \ - -D GEMM_PRESHUFFLE_LAYOUT="rcr" \ - -D GROUPED_GEMM_DATATYPE="fp8;fp16" \ - -D GROUPED_GEMM_LAYOUT="rcr;rrr;crr;ccr" \ - -D TILE_ENGINE_SAMPLING_TIER=daily .. && \ - ninja -j${nthreads()} benchmark_gemm_universal_all benchmark_gemm_preshuffle_all benchmark_gemm_multi_d_all benchmark_gemm_streamk_all benchmark_grouped_gemm_all && \ - python3 ../tile_engine/ops/gemm/gemm_universal/gemm_universal_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json gemm_universal_results.json && \ - python3 ../tile_engine/ops/gemm/gemm_preshuffle/gemm_preshuffle_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/gemm_multi_d/gemm_multi_d_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/grouped_gemm/grouped_gemm_benchmark.py . --problem-sizes "1024,1024,1024" --group-counts 8 --warmup 5 --repeat 5 --verbose --json grouped_gemm_results.json """ - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + deleteDir() + ck.runTileEngineGemmTests("gfx942", params.BUILD_COMPILER) + cleanWs() + } + } } } stage("Run TILE_ENGINE_GEMM Tests on gfx950") @@ -1898,30 +641,16 @@ pipeline { beforeAgent true expression { params.RUN_TILE_ENGINE_GEMM_TESTS.toBoolean() } } - agent{ label rocmnode("gfx950") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cmake -G Ninja -D CMAKE_PREFIX_PATH=/opt/rocm \ - -D BUILD_CK_TILE_ENGINE="ON" \ - -D CMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -D CMAKE_BUILD_TYPE=Release \ - -D GPU_TARGETS="gfx950" \ - -D GEMM_UNIVERSAL_DATATYPE="fp8;fp16" \ - -D GEMM_UNIVERSAL_LAYOUT="rcr;rrr;crr;ccr" \ - -D GEMM_MULTI_D_DATATYPE="fp16" \ - -D GEMM_MULTI_D_LAYOUT="rcrr;rrrr;crrr;ccrr" \ - -D GEMM_PRESHUFFLE_DATATYPE="fp16;fp8;bf16;bf8" \ - -D GEMM_PRESHUFFLE_LAYOUT="rcr" \ - -D TILE_ENGINE_SAMPLING_TIER=daily .. && \ - ninja -j${nthreads()} benchmark_gemm_universal_all benchmark_gemm_preshuffle_all benchmark_gemm_multi_d_all && \ - python3 ../tile_engine/ops/gemm/gemm_universal/gemm_universal_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/gemm_preshuffle/gemm_preshuffle_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json && \ - python3 ../tile_engine/ops/gemm/gemm_multi_d/gemm_multi_d_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json """ - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx950")) { + deleteDir() + ck.runTileEngineGemmTests("gfx950", params.BUILD_COMPILER) + cleanWs() + } + } } } stage("Run TILE_ENGINE_GEMM Tests on gfx1201") @@ -1930,24 +659,16 @@ pipeline { beforeAgent true expression { params.RUN_TILE_ENGINE_GEMM_TESTS.toBoolean() } } - agent{ label rocmnode("gfx1201") } - environment{ - setup_args = "NO_CK_BUILD" - execute_args = """ cmake -G Ninja -D CMAKE_PREFIX_PATH=/opt/rocm \ - -D BUILD_CK_TILE_ENGINE="ON" \ - -D CMAKE_CXX_COMPILER="${params.BUILD_COMPILER}" \ - -D CMAKE_BUILD_TYPE=Release \ - -D GPU_TARGETS="gfx1201" \ - -D GEMM_UNIVERSAL_DATATYPE="fp16" \ - -D GEMM_UNIVERSAL_LAYOUT="rcr;rrr;crr;ccr" \ - -D TILE_ENGINE_SAMPLING_TIER=daily .. && \ - ninja -j${nthreads()} benchmark_gemm_universal_all && \ - python3 ../tile_engine/ops/gemm/gemm_universal/gemm_universal_benchmark.py . --problem-sizes "1024,1024,1024" --warmup 5 --repeat 5 --verbose --json results.json """ - } + agent none steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args:setup_args, build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx1201")) { + deleteDir() + ck.runTileEngineGemmTests("gfx1201", params.BUILD_COMPILER) + cleanWs() + } + } } } } @@ -1967,15 +688,16 @@ pipeline { beforeAgent true expression { (params.BUILD_GFX942.toBoolean() || params.RUN_FULL_QA.toBoolean()) && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx942") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx942" """ - execute_args = build_client_examples("gfx942") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + deleteDir() + ck.runBuildCKAndTests("gfx942") + cleanWs() + } + } } } stage("Build CK and run Tests on gfx950") @@ -1984,15 +706,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX950.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx950") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx950" """ - execute_args = build_client_examples("gfx950") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx950")) { + deleteDir() + ck.runBuildCKAndTests("gfx950") + cleanWs() + } + } } } /* @@ -2003,13 +726,9 @@ pipeline { expression { params.BUILD_GFX908.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } agent{ label rocmnode("gfx908") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx908" """ - execute_args = build_client_examples("gfx908") - } steps{ deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') + script { loadCk(); ck.runBuildCKAndTests("gfx908") } cleanWs() } } @@ -2020,15 +739,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX90A.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx90a") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx90a" -DCK_CXX_STANDARD="17" """ - execute_args = build_client_examples_and_codegen_tests("gfx90a") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.runBuildCKAndTests("gfx90a") + cleanWs() + } + } } } stage("Build CK instances for all supported targets") @@ -2037,7 +757,7 @@ pipeline { beforeAgent true expression { params.BUILD_INSTANCES_ONLY.toBoolean() && !params.RUN_FULL_QA.toBoolean() } } - agent{ label rocmnode("gfx942") } + agent none environment{ setup_args = "NO_CK_BUILD" execute_args = """ cmake -G Ninja -D CMAKE_PREFIX_PATH=/opt/rocm \ @@ -2047,9 +767,14 @@ pipeline { -D CMAKE_BUILD_TYPE=Release .. && ninja -j64 """ } steps{ - deleteDir() - buildHipClangJobAndReboot(setup_args: setup_args, build_cmd: "", build_type: 'Release', execute_cmd: execute_args) - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx942")) { + deleteDir() + ck.runBuildInstancesOnly(params.BUILD_COMPILER) + cleanWs() + } + } } } /* @@ -2060,13 +785,9 @@ pipeline { expression { params.BUILD_GFX101.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } agent{ label rocmnode("gfx1010") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx10-1-generic" """ - execute_args = build_client_examples("gfx10-1-generic") - } steps{ deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') + script { loadCk(); ck.runBuildCKAndTests("gfx10-1-generic") } cleanWs() } } @@ -2077,15 +798,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX103.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx1030") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx10-3-generic" """ - execute_args = build_client_examples("gfx10-3-generic") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx1030")) { + deleteDir() + ck.runBuildCKAndTests("gfx10-3-generic") + cleanWs() + } + } } } stage("Build CK and run Tests on gfx11") @@ -2094,15 +816,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX11.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label 'miopen && (gfx1101 || gfx1100)' } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx11-generic" """ - execute_args = build_client_examples("gfx11-generic") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode('miopen && (gfx1101 || gfx1100)') { + deleteDir() + ck.runBuildCKAndTests("gfx11-generic") + cleanWs() + } + } } } stage("Build CK and run Tests on gfx1201") @@ -2111,15 +834,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX12.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx1201") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx12-generic" """ - execute_args = build_client_examples("gfx12-generic") - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, config_targets: "install", build_type: 'Release', execute_cmd: execute_args, prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx1201")) { + deleteDir() + ck.runBuildCKAndTests("gfx12-generic") + cleanWs() + } + } } } stage("Build CK for gfx1250") @@ -2128,14 +852,16 @@ pipeline { beforeAgent true expression { params.BUILD_GFX1250.toBoolean() && !params.RUN_FULL_QA.toBoolean() && !params.BUILD_INSTANCES_ONLY.toBoolean() } } - agent{ label rocmnode("gfx90a") } - environment{ - setup_args = """ -DCMAKE_INSTALL_PREFIX=../install -DGPU_TARGETS="gfx1250" -DDISABLE_DL_KERNELS="ON" """ - } + agent none steps{ - deleteDir() - Build_CK_and_Reboot(setup_args: setup_args, docker_name: "${env.CK_DOCKERHUB_PRIVATE}:npi-mi450-latest", config_targets: "install", no_reboot:true, build_type: 'Release', prefixpath: '/usr/local') - cleanWs() + script { + loadCk() + ck.runOnHealthyNode(rocmnode("gfx90a")) { + deleteDir() + ck.runBuildCKAndTests("gfx1250") + cleanWs() + } + } } } } @@ -2143,12 +869,13 @@ pipeline { always { node(rocmnode("nogpu")) { script { + loadCk() // Simulate capture - generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx11.json") - generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx12.json") - generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx90a.json") - generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx942.json") - generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx950.json") + ck.generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx11.json") + ck.generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx12.json") + ck.generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx90a.json") + ck.generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx942.json") + ck.generateAndArchiveBuildTraceVisualization("ck_build_trace_gfx950.json") } cleanWs() } @@ -2156,8 +883,9 @@ pipeline { success { script { node(rocmnode("nogpu")) { + loadCk() // Report the parent stage build ck and run tests status - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") + ck.setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") echo "Reporting success status for build ck and run tests" } } @@ -2176,7 +904,10 @@ pipeline { agent { label 'mici' } steps{ deleteDir() - process_results() + script { + loadCk() + ck.process_results() + } cleanWs() } } @@ -2185,8 +916,9 @@ pipeline { success { script { node(rocmnode("nogpu")) { + loadCk() // Report the skipped parent's stage status - setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") + ck.setGithubStatus("${env.STAGE_NAME}", 'success', "Stage ${env.STAGE_NAME} passed") echo "Process Performance Test Results stage skipped." } } @@ -2198,17 +930,17 @@ pipeline { success { script { node(rocmnode("nogpu")) { - setGithubStatus('Math CI Summary', 'success', "Math CI passed") + loadCk() + ck.setGithubStatus('Math CI Summary', 'success', "Math CI passed") } } } failure { script { node(rocmnode("nogpu")) { - setGithubStatus('Math CI Summary', 'failure', "Math CI failed") - script { - checkoutComposableKernel() - } + loadCk() + ck.setGithubStatus('Math CI Summary', 'failure', "Math CI failed") + ck.checkoutComposableKernel() withCredentials([string(credentialsId: 'ck_ci_errors_webhook_url', variable: 'WEBHOOK_URL')]) { sh 'bash projects/composablekernel/script/infra_helper/send_failure_notifications.sh' } diff --git a/README.md b/README.md index d48f7ed6765..9d5affa13a9 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,7 @@ Additional cmake flags can be used to significantly speed-up the build: These instances offer a slightly better performance of fp16 gemms on NAVI2x. But on other architectures faster alternatives are available. * `CK_USE_FP8_ON_UNSUPPORTED_ARCH` (default is OFF) must be set to ON in order to build instances, - such as `gemm_universal`, `gemm_universal_streamk` and `gemm_multiply_multiply` for fp8 data type for GPU targets which do not have native support for fp8 data type, such as gfx908 or gfx90a. These instances are useful on + such as `gemm_universal`, and `gemm_multiply_multiply` for fp8 data type for GPU targets which do not have native support for fp8 data type, such as gfx908 or gfx90a. These instances are useful on architectures like the MI100/MI200 for the functional support only. ## Using sccache for building diff --git a/client_example/01_gemm/README.md b/client_example/01_gemm/README.md index 6ff4958cee2..fd457265f8d 100644 --- a/client_example/01_gemm/README.md +++ b/client_example/01_gemm/README.md @@ -139,8 +139,6 @@ Table of supported cases by instance factory with XDL instruction for Row/Row/Ro * **DeviceGemmMultipleDLayernorm** - GEMM fused with layernorm. * **DeviceGemmMultipleDMultipleR** - GEMM fused with reductions and custom global reductions operators. * **DeviceGemmReduce** - GEMM fused with reduction. -* **DeviceGemm_Streamk_V2** - GEMM stream K implementation. Implementation allows to use reduction instead of AtomicAdd. -* **DeviceGemmStreamK** - GEMM stream K implementation using AtomicAdd. ## How to Run diff --git a/cmake/EnableCompilerWarnings.cmake b/cmake/EnableCompilerWarnings.cmake index 9cc960cc234..2f9a04f4855 100644 --- a/cmake/EnableCompilerWarnings.cmake +++ b/cmake/EnableCompilerWarnings.cmake @@ -50,6 +50,10 @@ else() -Wsign-compare -Wno-extra-semi-stmt -Wno-unused-template + -Wno-lifetime-safety-intra-tu-suggestions + -Wno-lifetime-safety-cross-tu-suggestions + -Wno-lifetime-safety-lifetimebound-violation + -Wno-unknown-warning-option ) if (CMAKE_${COMPILER}_COMPILER_ID MATCHES "Clang") list(APPEND CMAKE_COMPILER_WARNINGS @@ -76,6 +80,10 @@ else() -Wno-unsafe-buffer-usage -Wno-unused-lambda-capture -Wno-nvcc-compat + -Wno-lifetime-safety-intra-tu-suggestions + -Wno-lifetime-safety-cross-tu-suggestions + -Wno-lifetime-safety-lifetimebound-violation + -Wno-unknown-warning-option ) if(CK_CXX_STANDARD GREATER_EQUAL 20) list(APPEND CMAKE_COMPILER_WARNINGS -Wno-c++20-compat) diff --git a/cmake/TestUtilities.cmake b/cmake/TestUtilities.cmake new file mode 100644 index 00000000000..f95570b3984 --- /dev/null +++ b/cmake/TestUtilities.cmake @@ -0,0 +1,30 @@ +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +# Helper function to conditionally link device_conv libraries only if they exist as targets. +# This is useful when device_conv libraries may be filtered out based on GPU targets, +# DTYPES, or build configuration flags. +# +# Usage: +# target_link_device_conv_libraries_if_exist(my_test PRIVATE utility device_conv2d_nhwgc_operations ...) +# +# Only device_conv* libraries are checked with if(TARGET). +# All other libraries (utility, gtest_main, etc.) are always linked. +function(target_link_device_conv_libraries_if_exist TARGET_NAME VISIBILITY) + set(_libs_to_link) + foreach(lib ${ARGN}) + if(lib MATCHES "^device_conv") + # Only add device_conv libraries if they exist + if(TARGET ${lib}) + list(APPEND _libs_to_link ${lib}) + endif() + else() + # Always add non-device_conv libraries + list(APPEND _libs_to_link ${lib}) + endif() + endforeach() + # Single target_link_libraries call with all libraries + if(_libs_to_link) + target_link_libraries(${TARGET_NAME} ${VISIBILITY} ${_libs_to_link}) + endif() +endfunction() diff --git a/cmake/getopt.cmake b/cmake/getopt.cmake index 51aa5994be1..45f74c56a1d 100644 --- a/cmake/getopt.cmake +++ b/cmake/getopt.cmake @@ -9,7 +9,7 @@ if(WIN32) FetchContent_Declare( getopt GIT_REPOSITORY https://github.com/apwojcik/getopt.git - GIT_TAG main + GIT_TAG e8531ed21b44f5a723c1dd700701b2a58ce3ea01 SYSTEM ) @@ -25,4 +25,5 @@ if(WIN32) target_link_libraries(getopt::getopt INTERFACE wingetopt) target_include_directories(getopt::getopt INTERFACE ${getopt_SOURCE_DIR}/src) -endif() \ No newline at end of file +endif() + diff --git a/dispatcher/CMakeLists.txt b/dispatcher/CMakeLists.txt index ed9b20d33c9..79bdde45e87 100644 --- a/dispatcher/CMakeLists.txt +++ b/dispatcher/CMakeLists.txt @@ -59,7 +59,7 @@ endif() # Compiler warnings if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(ck_tile_dispatcher PRIVATE - -Wall -Wextra -Wpedantic + -Wall -Wextra -Wpedantic -Wno-lifetime-safety-intra-tu-suggestions -Wno-lifetime-safety-cross-tu-suggestions -Wno-lifetime-safety-lifetimebound-violation -Wno-unknown-warning-option ) elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(ck_tile_dispatcher PRIVATE diff --git a/dispatcher/README.md b/dispatcher/README.md index 307e6123053..19b97a91bbd 100644 --- a/dispatcher/README.md +++ b/dispatcher/README.md @@ -4,6 +4,8 @@ A unified kernel dispatch system for AMD GPUs with C++ and Python frontends, sup **Validated Platform:** AMD Instinct MI300 series (gfx942) +> **Stream-K GEMM:** see [STREAMK.md](STREAMK.md) for how to generate, build, run, and +> test the Stream-K deep-core path (atomic/linear/tree reductions). --- diff --git a/dispatcher/STREAMK.md b/dispatcher/STREAMK.md new file mode 100644 index 00000000000..4832bca2969 --- /dev/null +++ b/dispatcher/STREAMK.md @@ -0,0 +1,230 @@ +# Stream-K GEMM (Dispatcher Deep-Core Path) + +Stream-K is a single GEMM that splits the **K** dimension across compute units (CUs) +and reduces the partial results, instead of giving each CU a whole output tile. It +keeps every CU busy on shapes where a classic data-parallel tiling would leave some +idle (tall-skinny / large-K problems), at the cost of a reduction step. + +This document explains how to **generate**, **build**, **run**, and **test** the +Stream-K kernels through the CK Tile dispatcher. + +> **Validated platform:** AMD Instinct MI300X (gfx942). See [Known limitations](#known-limitations) +> for gfx950 (MI350) status. + +--- + +## Why Stream-K needs its own path + +A plain GEMM rides `Dispatcher::run(A, B, C, problem)`. Stream-K cannot use that +signature unchanged: it needs a **reduction workspace** and a **reduction strategy**, +so its host args type (`ck_tile::StreamKHostArgs`) is ABI-incompatible with the +regular `GemmHostArgs`. The deep-core path makes Stream-K ride the registry anyway: + +``` +codegen (unified_gemm_codegen.py) + -> generated Stream-K kernel + dispatcher wrapper + -> Registry::register_kernel(GeneratedStreamKKernelInstance) + -> Dispatcher::select_kernel(Problem.streamk + reduction_strategy) + -> GeneratedStreamKKernelInstance::run() (Dispatcher owns the workspace) + -> SelectedKernel::launch(StreamKHostArgs, cfg, workspace) +``` + +### Reduction strategies + +The reduction strategy is a **compile-time** property, so each strategy is a +*distinct kernel*. The registry holds all three side by side and the dispatcher +selects by `Problem::reduction_strategy`: + +| Strategy | Workspace | Identifier suffix | Notes | +|---|---|---|---| +| `atomic` | none | `_streamk` | partials accumulate directly into C via atomics | +| `linear` | yes | `_streamk_linear` | partials reduced through a device workspace, in order | +| `tree` | yes | `_streamk_tree` | tree reduction through a device workspace | + +### Supported datatypes / layouts + +- **Datatypes:** `fp16`, `bf16`, `fp8`, `bf8`. (`fp32`/`fp64` have no MFMA warp tiles; + `int8` Stream-K is out of scope for this path.) +- **Layouts:** `rcr`, `rrr`, `ccr`, `crr` — A/B in either order, **C is row-major** + (the atomic C-reset relies on it). + +--- + +## Prerequisites + +A full ROCm toolchain with HIP headers (`hip/hip_runtime.h`) and `hipcc`. Bare SLURM +compute nodes on the cluster often ship an incomplete ROCm, so build inside the CK +ROCm container, e.g.: + +```bash +# on a GPU node (pyxis/enroot), mounting your home: +srun --jobid= --overlap \ + --container-image=/cluster/images/ck/ck_rocm7.1.1_therock_.sqsh \ + --container-mounts=$HOME:$HOME \ + bash -lc '' +``` + +--- + +> All commands below are run from the dispatcher root +> (`projects/composablekernel/dispatcher`). + +## 1. Generate a Stream-K kernel + +The codegen emits all three reduction-strategy headers from one tile config: + +```bash +python3 codegen/unified_gemm_codegen.py \ + --datatype fp16 --layout rcr \ + --gpu-target gfx942 \ + --variants stream_k \ + --tile-config-json '{ + "tile_config": {"tile_m":[128],"tile_n":[128],"tile_k":[64], + "warp_m":[2],"warp_n":[2],"warp_k":[1], + "warp_tile_m":[32],"warp_tile_n":[32],"warp_tile_k":[16], + "block_size":[256]}, + "trait_config": {"pipeline":["compv3"],"epilogue":["cshuffle"],"scheduler":["intrawave"], + "pad_m":[false],"pad_n":[false],"pad_k":[false],"persistent":[false]}, + "streamk_config": {"reduction_strategy":["atomic","linear","tree"]} + }' \ + --output-dir ./gen_fp16_rcr +``` + +This produces, per strategy, a header named: + +``` +gemm___compv3_cshuffle_intrawave______.hpp +# variant ∈ { streamk, streamk_linear, streamk_tree } +``` + +Each header force-includes into the global namespace: `SelectedKernel`, +`ADataType/BDataType/CDataType/AccDataType`, `ALayout/BLayout/CLayout`, `KERNEL_NAME`. + +Omit `--tile-config-json` to generate the full arch-filtered tile set instead of a +single config. Use `--show-arch-info` to print what a target GPU supports. + +--- + +## 2a. Run via the standalone driver (`03_streamk_gemm_driver.cpp`) + +Calls `SelectedKernel::launch()` **directly** (bypasses the dispatcher). Use this for +apple-to-apple performance measurement against Tile Engine. + +```bash +HDR=gen_fp16_rcr/gemm_fp16_rcr_compv3_cshuffle_intrawave_False_False_False_False_128x128x64_2x2x1_32x32x16_streamk.hpp + +hipcc -std=c++17 --offload-arch=gfx942 -O3 \ + -DCK_TILE_SINGLE_KERNEL_INCLUDE \ + -I ../include -I gen_fp16_rcr \ + -include "$HDR" \ + examples/gemm/cpp/03_streamk_gemm_driver.cpp -o streamk_gemm_driver + +# performance (cold cache, TE-matched defaults): +./streamk_gemm_driver --m 4096 --n 4096 --k 4096 --validate 0 +# correctness (single cold shot so C matches the reference): +./streamk_gemm_driver --m 4096 --n 4096 --k 4096 --validate 1 +``` + +| Option | Default | Meaning | +|---|---|---| +| `--m/--n/--k` | 3840/4096/2048 | GEMM dims | +| `--warmup` | 50 | warmup iterations (timing) | +| `--repeat` | 100 | timed iterations | +| `--validate` | 1 | verify vs `reference_gemm`; forces 1 cold shot, no rotation | +| `--timer` | 1 | use the GPU timer | +| `--flush_cache` | 1 | flush L2 each iter (cold measurement, like Tile Engine) | +| `--rotating_count` | 1000 | rotating input copies to defeat cache (Tile Engine default) | + +> **Methodology:** leaving the cache warm over-reports TFlops and is the entire +> source of spurious "dispatcher vs Tile Engine" perf gaps. Always measure perf with +> the cold-cache defaults (`--validate 0`); run correctness separately (`--validate 1`). + +--- + +## 2b. Run via the registry/dispatcher (`04_streamk_registry_driver.cpp`) + +Exercises the **full deep-core path**: registers the kernel, lets the dispatcher +select it by `Problem::reduction_strategy`, runs it (dispatcher owns the workspace), +and verifies vs the reference with a **split-K-aware tolerance**. + +```bash +HDR=gen_fp16_rcr/gemm_fp16_rcr_compv3_cshuffle_intrawave_False_False_False_False_128x128x64_2x2x1_32x32x16_streamk.hpp + +# core objects (once, no force-include): +hipcc -std=c++17 --offload-arch=gfx942 -O3 -I ../include -I include -c src/dispatcher.cpp -o dispatcher.o +hipcc -std=c++17 --offload-arch=gfx942 -O3 -I ../include -I include -c src/registry.cpp -o registry.o + +# driver (force-include one strategy's header): +hipcc -std=c++17 --offload-arch=gfx942 -O3 \ + -DCK_TILE_SINGLE_KERNEL_INCLUDE -DGFX_ARCH='"gfx942"' \ + -I ../include -I include -I gen_fp16_rcr -include "$HDR" \ + -c examples/gemm/cpp/04_streamk_registry_driver.cpp -o drv04.o +hipcc --offload-arch=gfx942 drv04.o dispatcher.o registry.o -o streamk_registry_driver + +./streamk_registry_driver --m 3840 --n 4096 --k 2048 --strategy atomic --validate 1 +``` + +| Option | Default | Meaning | +|---|---|---| +| `--m/--n/--k` | 3840/4096/2048 | GEMM dims | +| `--strategy` | atomic | `atomic` / `linear` / `tree` (must match the force-included header) | +| `--validate` | 1 | verify vs `reference_gemm` (split-K-aware rtol/atol) | + +> The registry `run()` path is a functional dispatch path; its `Perf:` line is a +> cold-but-**non-rotated** measurement, **not** the calibrated apple-to-apple surface. +> Use the `03` driver (`--validate 0`) for Tile-Engine-comparable numbers. + +--- + +## 3. Test (CTest) + +The deep-core path is guarded by `test_streamk_registry.py`, which generates, builds, +dispatches, and verifies every `datatype × layout × strategy` against two shapes +(the default plus a small-M/large-K shape that stresses the split-K tolerance). It +**SKIPs** (exit 77) when no GPU or `hipcc` is present. + +```bash +# directly: +python3 tests/test_streamk_registry.py --arch gfx942 +python3 tests/test_streamk_registry.py --arch gfx942 --datatypes fp16,bf16 --layouts rcr,ccr + +# via ctest (from your dispatcher build dir): +ctest -R dispatcher_test_streamk_registry --output-on-failure +``` + +--- + +## Verification tolerance (why Stream-K is special) + +Stream-K reduces `kbatch` partial products into each output element, so the +accumulation error is larger than a single-pass GEMM. The drivers use the same +split-K-aware tolerance as Tile Engine (`calculate_rtol_atol`): `kbatch` is taken +from the kernel's own tile partitioner, and the tolerance is +`max(per-split threshold, split-K-reduction threshold)`. Using the plain +`get_relative/absolute_threshold(K)` here spuriously FAILs correct atomic results on +small-M/N, large-K shapes. + +--- + +## Known limitations + +- **gfx950 (MI350) fp8/bf8 not validated.** On CDNA4 the fp8/bf8 host reference/codec + hits an FNUZ-vs-OCP format mismatch; those combos currently fail verification. fp16 + and bf16 are fine on gfx950. Validate/gate before enabling fp8/bf8 there. +- **Tile coverage is narrower than Tile Engine.** The dispatcher emits fewer Stream-K + tiles than TE (e.g. fp16 `rcr` TE=180 vs DISP=73). Numeric+perf parity is validated + per matched tile config, not over the whole TE tile surface. See the coverage note + at the `STREAM_K` variant in `codegen/unified_gemm_codegen.py`. + +--- + +## File map + +| Path | Role | +|---|---| +| `codegen/unified_gemm_codegen.py` | generates Stream-K kernels + dispatcher wrappers (`--variants stream_k`) | +| `include/ck_tile/dispatcher/backends/generated_tile_backend_streamk.hpp` | `GeneratedStreamKKernelInstance` (registry/workspace/launch glue) | +| `include/ck_tile/dispatcher/kernel_key.hpp` | registry key carrying `streamk` + `reduction_strategy` | +| `examples/gemm/cpp/03_streamk_gemm_driver.cpp` | standalone driver (direct `launch`, perf surface) | +| `examples/gemm/cpp/04_streamk_registry_driver.cpp` | deep-core driver (Registry → Dispatcher → verify) | +| `tests/test_streamk_registry.py` | CTest `dispatcher_test_streamk_registry` | diff --git a/dispatcher/bindings/README.md b/dispatcher/bindings/README.md index e460b38b5b1..407ac7b6978 100644 --- a/dispatcher/bindings/README.md +++ b/dispatcher/bindings/README.md @@ -8,6 +8,7 @@ This directory contains language bindings for the CK Tile Dispatcher. bindings/ |---- ctypes/ # Python ctypes bindings (C API) | |---- gemm_ctypes_lib.cpp # GEMM dispatcher C API +| |---- grouped_gemm_ctypes_lib.cpp # Grouped (multi-problem) GEMM bridge C API -- see GROUPED_GEMM_BRIDGE.md | |---- conv_ctypes_lib.cpp # Grouped conv dispatcher C API (fwd + bwd_data) | |---- conv_bwdw_ctypes_lib.cpp # Grouped conv backward weight C API (separate library) | |---- fmha_ctypes_lib.cpp # FMHA dispatcher C API (fwd + bwd) diff --git a/dispatcher/bindings/ctypes/GROUPED_GEMM_BRIDGE.md b/dispatcher/bindings/ctypes/GROUPED_GEMM_BRIDGE.md new file mode 100644 index 00000000000..f6a7780b834 --- /dev/null +++ b/dispatcher/bindings/ctypes/GROUPED_GEMM_BRIDGE.md @@ -0,0 +1,121 @@ + + +# Grouped GEMM: Tile Engine -> Dispatcher Bridge + +This document describes the **grouped_gemm** variant of the Tile Engine (TE) -> +Dispatcher bridge (PR #8130). It is the grouped counterpart of the regular-GEMM +bridge (#8123/#8479), the fp8/bf8/int8 bridge (#8887), and the Stream-K bridge +(#8136). + +## What the bridge is + +In the bridge model the **Dispatcher is the single source of truth** for +codegen, build, and runtime; **Tile Engine only generates configs and +benchmarks** them. TE no longer carries its own kernel-instance build path — +it shells out to the dispatcher codegen and runs the resulting kernel. + +For most variants the dispatcher runs a kernel through its registry/backend. +Grouped GEMM cannot use that path (see below), so the grouped bridge takes the +same approach as Stream-K: a dedicated ctypes library that **bypasses the +registry** and calls the generated `SelectedKernel::launch(...)` directly. + +## Why grouped needs special handling + +Grouped GEMM is **multi-problem**: a single launch runs a *list* of `(M, N, K)` +sub-problems, each with its own A/B/C device pointers. Two consequences: + +1. The single-problem run path (`g_dispatcher->run` / `GemmHostArgs`) cannot + express a list of problems. +2. The generated registry wrapper (`generated_tile_backend.hpp::run()`) + hard-codes the single-problem `SelectedKernel::launch(GemmHostArgs, ...)` + signature and will not compile against a grouped `SelectedKernel`. + +So the grouped kernel header exposes a different launch signature + +```cpp +static float launch(const std::vector>& descs, + const stream_config& stream); +``` + +and the grouped ctypes lib force-includes one generated kernel header +(`-include ..._grouped.hpp` with `CK_TILE_SINGLE_KERNEL_INCLUDE`), calls that +`launch` directly, and reports the kernel name from the compile-time +`KERNEL_NAME` macro. + +## Components + +| Layer | File | Role | +|---|---|---| +| Codegen | `dispatcher/codegen/unified_gemm_codegen.py` | `GemmVariant.GROUPED`; `_launch_function_grouped` (DeviceMem internal workspace, `MakeKargs`, persistent/non-persistent grid). Kept in lockstep with PR #8075. | +| Codegen | `dispatcher/codegen/arch_filter.py` | `GEMM_GROUPED` operator tile constraints. | +| C API | `dispatcher/bindings/ctypes/grouped_gemm_ctypes_lib.cpp` | Multi-problem ABI; per-group device alloc/copy; layout-derived strides; warmup/repeat timing. | +| Python | `dispatcher/python/gemm_utils.py` | `GroupedGemmProblem` / `GroupedGemmResult`, `GpuGroupedGemmRunner`, `run_grouped`, `build_grouped`, dtype/layout codecs. | +| Python | `dispatcher/python/ctypes_utils.py` | Threads the `grouped` variant into the codegen `--variants` flag. | +| TE driver | `tile_engine/ops/gemm/grouped_gemm_full_benchmark.py` | Generates configs, builds `.so`s in parallel, benchmarks in disposable workers. | +| TE worker | `tile_engine/ops/gemm/run_one_grouped_gemm_kernel.py` | Runs one grouped kernel; dtype/layout-aware operand generation. | + +## C ABI + +```c +int dispatcher_init(void); // lightweight no-op (no registry) +int dispatcher_run_grouped_gemm( + int group_count, + const int64_t* Ms, // [group_count] + const int64_t* Ns, // [group_count] + const int64_t* Ks, // [group_count] + const void** A_ptrs, // host A buffers, one per group + const void** B_ptrs, // host B buffers, one per group + void** C_ptrs, // host C out buffers, one per group + float* time_ms); // out: average kernel time +// returns 0 ok, -1 HIP/throw, -2 arguments unsupported by the kernel +``` + +The lib `hipMalloc`s A/B/C per group, copies A and B host->device, memsets C, +builds `std::vector>` with **strides derived from +the compile-time `ALayout`/`BLayout`/`CLayout`** of the `-include`d header +(`std::is_same_v<…, RowMajor>`), launches once, then copies each C back. The ABI +is `void*` + element-size, so it is dtype-agnostic; the Python runner owns the +numpy codecs. + +## Coverage + +The bridge runnable set is exactly the Old-TE grouped_gemm runnable set on +`develop` — no more, no less: + +| Layout \ Dtype | fp16 | bf16 | fp8 (E4M3) | bf8 (E5M2) | +|---|---|---|---|---| +| rcr | ✓ | ✓ | ✓ | ✓ | +| rrr | ✓ | ✓ | ✓ | ✓ | +| ccr | ✓ | ✓ | ✓ | ✓ | +| crr | ✓ | ✓ | ✓ | ✓ | + +- **Matrix C is always row-major** (grouped builder constraint), so the layout + string varies A/B only. +- **Excluded:** `int8` (rejected by the TE grouped builder), `fp32`/`fp64` + (no MFMA warp tiles). These are excluded on both sides. +- fp8/bf8 use the **FNUZ** encoding on gfx942 (matches the regular #8887 path); + the Python codecs require `ml_dtypes`. + +## Building and running + +Generate + build one grouped `.so` and run the A/B parity sweep vs Old-TE: + +```bash +# Codegen smoke (no GPU): one variant/dtype/layout +python3 dispatcher/codegen/unified_gemm_codegen.py \ + --output-dir /tmp/grp --datatype bf16 --layout ccr \ + --variants grouped --config dispatcher/codegen/default_config.json + +# Full TE-driven parity sweep (build + benchmark) +python3 tile_engine/ops/gemm/grouped_gemm_full_benchmark.py \ + --arch gfx942 --dtype fp16 --layout rcr --csv grouped_results.csv +``` + +Timing knobs `CK_TILE_BENCH_WARMUP` (default 50) and `CK_TILE_BENCH_REPEAT` +(default 100) are honored by **both** the grouped ctypes lib and the registry +backend, so bridge-vs-Old-TE A/B comparisons stay matched. For fair parity keep +`flush_cache=false`, `rotating_count=1`, run on a single GPU, and re-measure any +`|gap|>15%` outlier standalone. diff --git a/dispatcher/bindings/ctypes/gemm_ctypes_lib.cpp b/dispatcher/bindings/ctypes/gemm_ctypes_lib.cpp index 85c0c2f2c13..94079990b07 100644 --- a/dispatcher/bindings/ctypes/gemm_ctypes_lib.cpp +++ b/dispatcher/bindings/ctypes/gemm_ctypes_lib.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "ck_tile/dispatcher/dispatcher.hpp" #include "ck_tile/dispatcher/registry.hpp" @@ -65,15 +66,75 @@ int dispatcher_initialize() return 0; // Already initialized } - // Create kernel key from the force-included kernel header + // Create kernel key from the force-included kernel header. + // + // The GEMM_KEY_* macros are emitted by the codegen into the force-included + // header (see unified_gemm_codegen.py, CK_TILE_SINGLE_KERNEL_INCLUDE block). + // Building the key from them makes the registry entry truthful: it reflects + // THIS kernel's real dtypes/layouts/tile/traits instead of a hard-coded + // fp16/rcr/128x128x32 default. Enum fields use the string_to_* helpers from + // kernel_key.hpp, whose accepted strings match the codegen's emitted values + // byte-for-byte. KernelKey key; - key.signature.dtype_a = DataType::FP16; - key.signature.dtype_b = DataType::FP16; - key.signature.dtype_c = DataType::FP16; - key.signature.dtype_acc = DataType::FP32; - key.signature.layout_a = LayoutTag::RowMajor; - key.signature.layout_b = LayoutTag::ColMajor; - key.signature.layout_c = LayoutTag::RowMajor; +#ifdef GEMM_KEY_DTYPE_A + key.signature.dtype_a = string_to_dtype(GEMM_KEY_DTYPE_A); + key.signature.dtype_b = string_to_dtype(GEMM_KEY_DTYPE_B); + key.signature.dtype_c = string_to_dtype(GEMM_KEY_DTYPE_C); + key.signature.dtype_acc = string_to_dtype(GEMM_KEY_DTYPE_ACC); + key.signature.layout_a = string_to_layout(GEMM_KEY_LAYOUT_A); + key.signature.layout_b = string_to_layout(GEMM_KEY_LAYOUT_B); + key.signature.layout_c = string_to_layout(GEMM_KEY_LAYOUT_C); + key.signature.transpose_a = false; + key.signature.transpose_b = false; + key.signature.grouped = (GEMM_KEY_GROUPED != 0); + key.signature.split_k = GEMM_KEY_SPLIT_K; + key.signature.elementwise_op = "PassThrough"; + key.signature.num_d_tensors = 0; + key.signature.structured_sparsity = false; + + key.algorithm.tile_shape = {GEMM_KEY_TILE_M, GEMM_KEY_TILE_N, GEMM_KEY_TILE_K}; + key.algorithm.wave_shape = {GEMM_KEY_WAVE_M, GEMM_KEY_WAVE_N, GEMM_KEY_WAVE_K}; + key.algorithm.warp_tile_shape = { + GEMM_KEY_WARP_TILE_M, GEMM_KEY_WARP_TILE_N, GEMM_KEY_WARP_TILE_K}; + key.algorithm.pipeline = string_to_pipeline(GEMM_KEY_PIPELINE); + key.algorithm.scheduler = string_to_scheduler(GEMM_KEY_SCHEDULER); + key.algorithm.epilogue = string_to_epilogue(GEMM_KEY_EPILOGUE); + key.algorithm.block_size = GEMM_KEY_BLOCK_SIZE; + key.algorithm.double_buffer = (GEMM_KEY_DOUBLE_BUFFER != 0); + key.algorithm.persistent = (GEMM_KEY_PERSISTENT != 0); + key.algorithm.preshuffle = (GEMM_KEY_PRESHUFFLE != 0); + key.algorithm.transpose_c = (GEMM_KEY_TRANSPOSE_C != 0); + key.algorithm.num_wave_groups = GEMM_KEY_NUM_WAVE_GROUPS; + // pad_m/n/k participate in both the key's hash/equality and the kernel + // name, so they must be derived from the codegen macros too -- otherwise a + // kernel built with padding disabled would register under a key claiming + // pad=true and disagree with its own name. + key.algorithm.pad_m = (GEMM_KEY_PAD_M != 0); + key.algorithm.pad_n = (GEMM_KEY_PAD_N != 0); + key.algorithm.pad_k = (GEMM_KEY_PAD_K != 0); + key.gfx_arch = GFX_ARCH; +#else + // Fallback default for headers generated before GEMM_KEY_* macros existed + // (fp16 / rcr / compv4-cshuffle-intrawave, 128x128x32). The macro path + // above is the source of truth for any freshly generated kernel. + key.signature.dtype_a = DataType::FP16; + key.signature.dtype_b = DataType::FP16; + key.signature.dtype_c = DataType::FP16; + key.signature.dtype_acc = DataType::FP32; + // Derive A/B/C layouts from the force-included kernel's own layout types + // instead of hardcoding rcr. The dispatcher's supports() gate is layout-aware + // (it only constrains a dimension that an operand's inner axis maps to), so a + // wrong key layout makes it reject valid problems -- e.g. a crr kernel does not + // gate K, but with a hardcoded rcr key supports() would apply rcr's K-gate and + // reject TileK=192 problems that Old-TE runs. ALayout/BLayout/CLayout are the + // global aliases exported by the kernel header under CK_TILE_SINGLE_KERNEL_INCLUDE. + using RowMajorLayout = ck_tile::tensor_layout::gemm::RowMajor; + key.signature.layout_a = + std::is_same_v ? LayoutTag::RowMajor : LayoutTag::ColMajor; + key.signature.layout_b = + std::is_same_v ? LayoutTag::RowMajor : LayoutTag::ColMajor; + key.signature.layout_c = + std::is_same_v ? LayoutTag::RowMajor : LayoutTag::ColMajor; key.signature.transpose_a = false; key.signature.transpose_b = false; key.signature.grouped = false; @@ -95,6 +156,7 @@ int dispatcher_initialize() key.algorithm.transpose_c = false; key.algorithm.num_wave_groups = 1; key.gfx_arch = GFX_ARCH; +#endif // GEMM_KEY_DTYPE_A // Register kernel using types from force-included header auto kernel = @@ -310,10 +372,40 @@ int dispatcher_run_gemm( } /** - * Get kernel information + * Get kernel information (legacy single-kernel ABI). + * + * Returns the compile-time KERNEL_NAME of the force-included kernel header. + * Kept for backward compatibility with one-kernel-per-.so callers. */ const char* dispatcher_get_kernel_name() { return KERNEL_NAME; } +/** + * Get the name of the kernel at a given registry index (multi-kernel ABI). + * + * Mirrors the conv/fmha ctypes libs: copies the index-th registered kernel's + * name into the caller-provided buffer so one .so can report a whole batch and + * be selected by name at runtime. Returns 0 on success, -1 on bad args or + * out-of-range index. + */ +int dispatcher_get_kernel_name_at(int index, char* buffer, int buffer_size) +{ + if(!buffer || buffer_size <= 0) + { + return -1; + } + + auto kernels = Registry::instance().get_all(); + if(index < 0 || index >= static_cast(kernels.size())) + { + return -1; + } + + std::string name = kernels[index]->get_name(); + std::strncpy(buffer, name.c_str(), static_cast(buffer_size) - 1); + buffer[buffer_size - 1] = '\0'; + return 0; +} + /** * Initialize dispatcher (alias) */ @@ -398,4 +490,4 @@ void dispatcher_cleanup() g_initialized = false; } -} // extern "C" +} // extern "C" \ No newline at end of file diff --git a/dispatcher/bindings/ctypes/grouped_gemm_ctypes_lib.cpp b/dispatcher/bindings/ctypes/grouped_gemm_ctypes_lib.cpp new file mode 100644 index 00000000000..af1dc854afc --- /dev/null +++ b/dispatcher/bindings/ctypes/grouped_gemm_ctypes_lib.cpp @@ -0,0 +1,295 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +/** + * Grouped GEMM Dispatcher ctypes Library + * + * Provides C API for Python ctypes integration for the GROUPED GEMM variant. + * Kernel header included via -include at compile time. + * + * The grouped kernel has a genuinely different ABI from regular GEMM: it takes a + * LIST of (M,N,K) sub-problems plus arrays of A/B/C device pointers, and its + * generated launch() builds the per-group arg workspace internally: + * + * static float launch(const std::vector>& descs, + * const stream_config& stream); + * + * The single-problem dispatcher run path (g_dispatcher->run / GemmHostArgs) cannot + * express this, and the generated_tile_backend wrapper hard-codes the single-problem + * launch signature, so this lib calls SelectedKernel::launch(descs, stream) directly + * and reports the kernel name from the compile-time KERNEL_NAME macro instead of the + * registry. + * + * Usage from Python: + * lib = ctypes.CDLL("libdispatcher_grouped_gemm.so") + * lib.dispatcher_init() + * lib.dispatcher_run_grouped_gemm(...) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Kernel header included via -include compiler flag (with CK_TILE_SINGLE_KERNEL_INCLUDE). +// Defines: ADataType, BDataType, CDataType, AccDataType, SelectedKernel, KERNEL_NAME +// and transitively brings in ck_tile::GroupedGemmHostArgs and ck_tile::stream_config. + +// GPU architecture - can be overridden via -DGFX_ARCH="gfx90a" at compile time +#ifndef GFX_ARCH +#define GFX_ARCH "gfx942" +#endif + +static bool g_initialized = false; + +// Read an integer benchmark knob from the environment, falling back to +// `fallback` when unset or unparseable. Mirrors generated_tile_backend.hpp so +// both bridge sides honor the same CK_TILE_BENCH_* env vars. +static int env_int(const char* name, int fallback) +{ + const char* v = std::getenv(name); + if(v == nullptr || *v == '\0') + return fallback; + char* end = nullptr; + const long out = std::strtol(v, &end, 10); + if(end == v) + return fallback; + return static_cast(out); +} + +extern "C" { + +/** + * Initialize the grouped GEMM library. + * + * The grouped path does not use the dispatcher/registry (it launches the + * force-included kernel directly), so this is a lightweight no-op kept for ABI + * parity with the regular GEMM lib. Returns 0 on success. + */ +int dispatcher_initialize() +{ + g_initialized = true; + return 0; +} + +/** + * Initialize dispatcher (alias) + */ +int dispatcher_init() { return dispatcher_initialize(); } + +/** + * Run grouped GEMM on GPU by launching the force-included kernel directly. + * + * For each group: hipMalloc A/B/C, copy A and B host->device, memset C, then build + * a std::vector> with strides derived from the + * compile-time ALayout/BLayout/CLayout of the -include'd kernel header (k_batch=1) + * and launch. After the launch the per-group C buffers are copied back to the + * caller's host buffers. + * + * Layout contract: A is MxK, B is KxN, C is MxN; leading dimensions follow each + * operand's row/col-major layout (CLayout is always RowMajor for grouped). + * + * Returns: 0 on success, -1 on HIP error / generic throw, -2 if the kernel reports + * the arguments are unsupported. + */ +int dispatcher_run_grouped_gemm(int group_count, + const int64_t* Ms, + const int64_t* Ns, + const int64_t* Ks, + const void** A_ptrs, + const void** B_ptrs, + void** C_ptrs, + float* time_ms) +{ + if(!g_initialized || group_count <= 0 || !Ms || !Ns || !Ks || !A_ptrs || !B_ptrs || !C_ptrs) + { + return -1; + } + + std::vector A_dev(group_count, nullptr); + std::vector B_dev(group_count, nullptr); + std::vector C_dev(group_count, nullptr); + + auto cleanup_gpu_mem = [&]() { + for(int g = 0; g < group_count; ++g) + { + if(A_dev[g]) + (void)hipFree(A_dev[g]); + if(B_dev[g]) + (void)hipFree(B_dev[g]); + if(C_dev[g]) + (void)hipFree(C_dev[g]); + } + }; + + std::vector> descs; + descs.reserve(group_count); + + for(int g = 0; g < group_count; ++g) + { + const int64_t M = Ms[g]; + const int64_t N = Ns[g]; + const int64_t K = Ks[g]; + + if(M <= 0 || N <= 0 || K <= 0 || !A_ptrs[g] || !B_ptrs[g] || !C_ptrs[g]) + { + cleanup_gpu_mem(); + return -1; + } + + if(hipMalloc(&A_dev[g], M * K * sizeof(ADataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMalloc(&B_dev[g], K * N * sizeof(BDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMalloc(&C_dev[g], M * N * sizeof(CDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + + if(hipMemcpy(A_dev[g], A_ptrs[g], M * K * sizeof(ADataType), hipMemcpyHostToDevice) != + hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMemcpy(B_dev[g], B_ptrs[g], K * N * sizeof(BDataType), hipMemcpyHostToDevice) != + hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMemset(C_dev[g], 0, M * N * sizeof(CDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + + // Derive leading dimensions from the compile-time layouts the kernel was + // generated with (ALayout/BLayout/CLayout from the -include'd header), + // matching Old-TE gemm_validation_utils.get_abc_layouts: + // stride_A = ALayout row-major ? K : M + // stride_B = BLayout row-major ? N : K + // stride_E = CLayout row-major ? N : M (CLayout is always RowMajor for grouped) + using RowMajor = ck_tile::tensor_layout::gemm::RowMajor; + const auto stride_A = std::is_same_v ? static_cast(K) + : static_cast(M); + const auto stride_B = std::is_same_v ? static_cast(N) + : static_cast(K); + const auto stride_E = std::is_same_v ? static_cast(N) + : static_cast(M); + // k_batch=1 for numeric parity. + descs.emplace_back(static_cast(A_dev[g]), + static_cast(B_dev[g]), + std::array{}, + static_cast(C_dev[g]), + /*k_batch=*/1, + static_cast(M), + static_cast(N), + static_cast(K), + stride_A, + stride_B, + std::array{}, + stride_E); + } + + ck_tile::stream_config stream_cfg; + stream_cfg.stream_id_ = nullptr; + stream_cfg.time_kernel_ = true; + stream_cfg.log_level_ = 0; + stream_cfg.cold_niters_ = env_int("CK_TILE_BENCH_WARMUP", 50); + stream_cfg.nrepeat_ = env_int("CK_TILE_BENCH_REPEAT", 100); + stream_cfg.is_gpu_timer_ = true; + stream_cfg.flush_cache_ = false; + stream_cfg.rotating_count_ = 1; + + float exec_time = 0.0f; + try + { + exec_time = SelectedKernel::launch(descs, stream_cfg); + } + catch(const std::exception& e) + { + cleanup_gpu_mem(); + if(std::string(e.what()).find("not supported") != std::string::npos) + { + if(time_ms) + { + *time_ms = -1.0f; + } + return -2; // Arguments not supported by this kernel + } + return -1; + } + + // Copy each group's result back to host. + for(int g = 0; g < group_count; ++g) + { + const int64_t M = Ms[g]; + const int64_t N = Ns[g]; + if(hipMemcpy(C_ptrs[g], C_dev[g], M * N * sizeof(CDataType), hipMemcpyDeviceToHost) != + hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + } + + if(time_ms) + { + *time_ms = exec_time; + } + + cleanup_gpu_mem(); + return 0; +} + +/** + * Get kernel information (legacy single-kernel ABI). + * + * Returns the compile-time KERNEL_NAME of the force-included kernel header. + */ +const char* dispatcher_get_kernel_name() { return KERNEL_NAME; } + +/** + * Get the name of the kernel at a given registry index (multi-kernel ABI). + * + * Each grouped .so force-includes exactly one kernel header, so index 0 reports + * KERNEL_NAME and any other index is out of range. Mirrors the regular GEMM lib's + * name ABI so the Python bridge can use the same name-lookup path. + * Returns 0 on success, -1 on bad args or out-of-range index. + */ +int dispatcher_get_kernel_name_at(int index, char* buffer, int buffer_size) +{ + if(!buffer || buffer_size <= 0 || index != 0) + { + return -1; + } + + std::strncpy(buffer, KERNEL_NAME, static_cast(buffer_size) - 1); + buffer[buffer_size - 1] = '\0'; + return 0; +} + +/** + * Get the number of kernels in this .so (always 1 for the grouped single-include lib). + */ +int dispatcher_get_kernel_count() { return 1; } + +/** + * Cleanup library resources (no-op; kept for ABI parity). + */ +void dispatcher_cleanup() { g_initialized = false; } + +} // extern "C" diff --git a/dispatcher/bindings/ctypes/streamk_gemm_ctypes_lib.cpp b/dispatcher/bindings/ctypes/streamk_gemm_ctypes_lib.cpp new file mode 100644 index 00000000000..11b7fc44f00 --- /dev/null +++ b/dispatcher/bindings/ctypes/streamk_gemm_ctypes_lib.cpp @@ -0,0 +1,290 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +/** + * Stream-K GEMM Dispatcher ctypes Library + * + * Provides C API for Python ctypes integration for the STREAM-K GEMM variant. + * Kernel header included via -include at compile time. + * + * Stream-K is a single GEMM (one A/B/C, one M/N/K) like regular GEMM, so this + * lib keeps the exact same C ABI as gemm_ctypes_lib.cpp -- ``dispatcher_run_gemm`` + * takes host A/B/C and M/N/K. The difference is internal: the generated launch + * has a Stream-K-specific signature + * + * static float launch(const ck_tile::StreamKHostArgs& args, const stream_config& stream); + * + * which allocates the reduction workspace internally (DeviceMem) and uses the + * Atomic reduction strategy. The single-problem registry path + * (g_dispatcher->run / GemmHostArgs) and the generated_tile_backend wrapper both + * hard-code the plain GemmHostArgs launch, so this lib bypasses the registry and + * calls SelectedKernel::launch(args, stream) directly, reporting the kernel name + * from the compile-time KERNEL_NAME macro. + * + * Because the C ABI matches the regular lib, the Python side reuses + * GemmDispatcherLib / GpuGemmRunner unchanged -- only the .so internals differ. + * + * Usage from Python: + * lib = ctypes.CDLL("libdispatcher_streamk_gemm.so") + * lib.dispatcher_init() + * lib.dispatcher_run_gemm(...) + */ + +#include +#include +#include +#include +#include +#include +#include + +// Kernel header included via -include compiler flag (with CK_TILE_SINGLE_KERNEL_INCLUDE). +// Defines: ADataType, BDataType, CDataType, AccDataType, SelectedKernel, KERNEL_NAME +// and transitively brings in ck_tile::StreamKHostArgs and ck_tile::stream_config. + +// GPU architecture - can be overridden via -DGFX_ARCH="gfx90a" at compile time +#ifndef GFX_ARCH +#define GFX_ARCH "gfx942" +#endif + +static bool g_initialized = false; + +// Read an integer benchmark knob from the environment, falling back to +// `fallback` when unset or unparseable. +static int env_int(const char* name, int fallback) +{ + const char* v = std::getenv(name); + if(v == nullptr || *v == '\0') + return fallback; + char* end = nullptr; + const long out = std::strtol(v, &end, 10); + if(end == v) + return fallback; + return static_cast(out); +} + +// Read a boolean benchmark knob ("0"/"false"/"off", any case => false, else true). +static bool env_bool(const char* name, bool fallback) +{ + const char* v = std::getenv(name); + if(v == nullptr || *v == '\0') + return fallback; + std::string s(v); + for(char& c : s) + if(c >= 'A' && c <= 'Z') + c = static_cast(c - 'A' + 'a'); + return !(s == "0" || s == "false" || s == "off"); +} + +extern "C" { + +/** + * Initialize the stream-k GEMM library. + * + * The stream-k path does not use the dispatcher/registry (it launches the + * force-included kernel directly), so this is a lightweight no-op kept for ABI + * parity with the regular GEMM lib. Returns 0 on success. + */ +int dispatcher_initialize() +{ + g_initialized = true; + return 0; +} + +/** + * Initialize dispatcher (alias) + */ +int dispatcher_init() { return dispatcher_initialize(); } + +/** + * Run a Stream-K GEMM on GPU by launching the force-included kernel directly. + * + * hipMalloc A/B/C, copy A and B host->device, memset C (the Atomic reduction + * strategy accumulates into C, so it must start zeroed), build a + * ck_tile::StreamKHostArgs whose strides are derived from the kernel's actual + * ALayout/BLayout/CLayout (no layout hardcoding) and launch. The launch + * allocates the reduction workspace internally and resets C between timed + * iterations. C is then copied back. + * + * The host buffers must be laid out to match each operand's layout (the Python + * runner arranges A/B/C as RowMajor=C-contiguous, ColumnMajor=F-contiguous). + * + * Returns: 0 on success, -1 on HIP error / generic throw, -2 if the kernel + * reports the arguments are unsupported. + */ +int dispatcher_run_gemm( + const void* A, const void* B, void* C, int64_t M, int64_t N, int64_t K, float* time_ms) +{ + if(!g_initialized || !A || !B || !C || M <= 0 || N <= 0 || K <= 0) + { + return -1; + } + + const ADataType* A_host = static_cast(A); + const BDataType* B_host = static_cast(B); + CDataType* C_host = static_cast(C); + + ADataType* A_dev = nullptr; + BDataType* B_dev = nullptr; + CDataType* C_dev = nullptr; + + auto cleanup_gpu_mem = [&]() { + if(A_dev) + (void)hipFree(A_dev); + if(B_dev) + (void)hipFree(B_dev); + if(C_dev) + (void)hipFree(C_dev); + }; + + if(hipMalloc(&A_dev, M * K * sizeof(ADataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMalloc(&B_dev, K * N * sizeof(BDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMalloc(&C_dev, M * N * sizeof(CDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + + if(hipMemcpy(A_dev, A_host, M * K * sizeof(ADataType), hipMemcpyHostToDevice) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMemcpy(B_dev, B_host, K * N * sizeof(BDataType), hipMemcpyHostToDevice) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + if(hipMemset(C_dev, 0, M * N * sizeof(CDataType)) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + + // Strides are DERIVED from the kernel's actual layouts (ALayout/BLayout/CLayout + // come from the force-included generated header) -- nothing layout-specific is + // hardcoded, so every layout (rcr/rrr/ccr/crr/...) works. A RowMajor R x C + // matrix has leading dim C; a ColumnMajor one has leading dim R. + // A is M x K, B is K x N, C is M x N. + using RowMajor = ck_tile::tensor_layout::gemm::RowMajor; + const ck_tile::index_t lda = + static_cast(std::is_same_v ? K : M); + const ck_tile::index_t ldb = + static_cast(std::is_same_v ? N : K); + const ck_tile::index_t ldc = + static_cast(std::is_same_v ? N : M); + // k_batch is fixed to 1 inside StreamKHostArgs. + ck_tile::StreamKHostArgs args(static_cast(A_dev), + static_cast(B_dev), + static_cast(C_dev), + static_cast(M), + static_cast(N), + static_cast(K), + /*stride_A=*/lda, + /*stride_B=*/ldb, + /*stride_C=*/ldc); + + // Benchmark parameters. warmup/repeat default to old Tile Engine's values + // (warmup=50, repeat=100); a generous warmup keeps the GPU clock ramped, and + // 100 timed iterations give a stable median. These were the knobs behind the + // regular bridge's spurious "perf gap" (#8123): the old default of warmup=3/ + // repeat=10 measured a cold, un-ramped clock. Each knob is env-overridable so + // a caller can match another harness without recompiling. + // + // Divergence from the regular path (generated_tile_backend.hpp): flush_cache_ + // and rotating_count_ default OFF here. The Stream-K Atomic reduction + // accumulates into C, and the generated launch's launch_kernel_time_mask + // preprocess re-zeros only the original args.e_ptr -- rotating C across + // multiple buffers would leave the rotated copies un-zeroed and corrupt the + // accumulation. Leave rotating_count_=1 unless a caller knows the kernel + // re-zeros every rotated buffer. + ck_tile::stream_config stream_cfg; + stream_cfg.stream_id_ = nullptr; + stream_cfg.time_kernel_ = true; + stream_cfg.log_level_ = 0; + stream_cfg.cold_niters_ = env_int("CK_TILE_BENCH_WARMUP", 50); + stream_cfg.nrepeat_ = env_int("CK_TILE_BENCH_REPEAT", 100); + stream_cfg.is_gpu_timer_ = true; + stream_cfg.flush_cache_ = env_bool("CK_TILE_BENCH_FLUSH", false); + stream_cfg.rotating_count_ = env_int("CK_TILE_BENCH_ROTATING", 1); + + float exec_time = 0.0f; + try + { + exec_time = SelectedKernel::launch(args, stream_cfg); + } + catch(const std::exception& e) + { + cleanup_gpu_mem(); + if(std::string(e.what()).find("not supported") != std::string::npos) + { + if(time_ms) + { + *time_ms = -1.0f; + } + return -2; // Arguments not supported by this kernel + } + return -1; + } + + if(hipMemcpy(C_host, C_dev, M * N * sizeof(CDataType), hipMemcpyDeviceToHost) != hipSuccess) + { + cleanup_gpu_mem(); + return -1; + } + + if(time_ms) + { + *time_ms = exec_time; + } + + cleanup_gpu_mem(); + return 0; +} + +/** + * Get kernel information (legacy single-kernel ABI). + * + * Returns the compile-time KERNEL_NAME of the force-included kernel header. + */ +const char* dispatcher_get_kernel_name() { return KERNEL_NAME; } + +/** + * Get the name of the kernel at a given registry index (multi-kernel ABI). + * + * Each stream-k .so force-includes exactly one kernel header, so index 0 reports + * KERNEL_NAME and any other index is out of range. Mirrors the regular GEMM lib's + * name ABI so the Python bridge can use the same name-lookup path. + * Returns 0 on success, -1 on bad args or out-of-range index. + */ +int dispatcher_get_kernel_name_at(int index, char* buffer, int buffer_size) +{ + if(!buffer || buffer_size <= 0 || index != 0) + { + return -1; + } + + std::strncpy(buffer, KERNEL_NAME, static_cast(buffer_size) - 1); + buffer[buffer_size - 1] = '\0'; + return 0; +} + +/** + * Get the number of kernels in this .so (always 1 for the stream-k single-include lib). + */ +int dispatcher_get_kernel_count() { return 1; } + +/** + * Cleanup library resources (no-op; kept for ABI parity). + */ +void dispatcher_cleanup() { g_initialized = false; } + +} // extern "C" diff --git a/dispatcher/codegen/README.md b/dispatcher/codegen/README.md index 40a9b7b8c12..965abb1213b 100644 --- a/dispatcher/codegen/README.md +++ b/dispatcher/codegen/README.md @@ -77,7 +77,7 @@ results = codegen.generate_all() | `--datatype` | `fp16`, `bf16`, `fp32`, `int8` | Data type | | `--layout` | `rcr`, `rrr`, `crr`, `ccr` | Matrix layouts | | `--gpu-target` | `gfx942`, `gfx90a`, `gfx950` | Target GPU | -| `--variants` | `standard`, `preshuffle`, `multi_d` | Kernel variants | +| `--variants` | `standard`, `preshuffle`, `multi_d`, `grouped` | Kernel variants | | `--preselected` | `fp16_rcr_essential`, etc. | Predefined kernel set | ### Layout Notation @@ -98,6 +98,28 @@ Element-wise fusion: `C = op(A x B + D0 + D1 + ...)` Supported ops: `PassThrough`, `MultiDAdd`, `Relu`, `Gelu`, `Sigmoid`, `Tanh` +### Grouped +Batched GEMM over a list of independently-shaped groups in a single launch +(`ck_tile::GroupedGemmKernel`). Brings the dispatcher to parity with the Tile Engine +`grouped_gemm` op. The per-group argument vector is built with `MakeKargs`, copied to an +internally-allocated `DeviceMem` workspace, and the device pointer + group count are passed +to the kernel (the dispatcher workspace idiom — no external `kargs_ptr`). + +- Datatypes: `fp16`, `bf16`, `fp8`, `bf8` (matches the Tile Engine grouped runnable set; + `fp8`/`bf8` accumulate in `fp32` and emit an `fp16` C output). +- Layouts: `rcr`, `rrr`, `ccr`, `crr` (C is always row-major). + +```bash +python3 unified_gemm_codegen.py \ + --datatype fp16 \ + --layout rcr \ + --variants grouped \ + --gpu-target gfx942 \ + --output-dir generated_kernels +``` + +Build and run end-to-end with [`examples/gemm/cpp/02_grouped_gemm_driver.cpp`](../examples/gemm/cpp/README.md). + ## Output Structure ``` @@ -105,6 +127,7 @@ generated_kernels/ |---- gemm_fp16_rcr_compv4_..._128x128x32_....hpp # GEMM kernels |---- gemm_fp16_rcr_compv4_..._preshuffle.hpp |---- gemm_fp16_rcr_compv4_..._multid_Relu_d1.hpp +|---- gemm_fp16_rcr_compv3_..._128x128x64_..._grouped.hpp # Grouped GEMM kernels |---- grouped_conv_fwd_fp16_nhwgc_..._128x128x32_....hpp # Grouped conv kernels +---- ... ``` diff --git a/dispatcher/codegen/arch_filter.py b/dispatcher/codegen/arch_filter.py index 63dbee2dd76..64fb5b28633 100644 --- a/dispatcher/codegen/arch_filter.py +++ b/dispatcher/codegen/arch_filter.py @@ -50,6 +50,8 @@ class OperatorType(Enum): GEMM = "gemm" GEMM_PRESHUFFLE = "gemm_preshuffle" GEMM_MULTI_D = "gemm_multi_d" + GEMM_GROUPED = "gemm_grouped" + GEMM_STREAMK = "gemm_streamk" CONV_FWD = "conv_fwd" CONV_BWD_DATA = "conv_bwd_data" CONV_BWD_WEIGHT = "conv_bwd_weight" @@ -85,6 +87,28 @@ class OperatorType(Enum): "tile_n_alignment": 16, "tile_k_alignment": 8, }, + OperatorType.GEMM_GROUPED: { + "min_tile_m": 16, + "min_tile_n": 16, + "min_tile_k": 8, + "tile_m_alignment": 16, + "tile_n_alignment": 16, + "tile_k_alignment": 8, + }, + # NOTE: these are copied from plain GEMM and only gate tile *shape* validity. + # They do NOT express Stream-K's real feasibility requirement -- that a problem + # has enough output tiles to partition K-work across the CUs. That gate is + # runtime (StreamKKernel::IsSupportedArgument / the backend supports() check), + # which lets the dispatcher fall back to a non-Stream-K kernel for too-small + # problems instead of rejecting them at codegen time. + OperatorType.GEMM_STREAMK: { + "min_tile_m": 16, + "min_tile_n": 16, + "min_tile_k": 8, + "tile_m_alignment": 16, + "tile_n_alignment": 16, + "tile_k_alignment": 8, + }, OperatorType.CONV_FWD: { "min_tile_m": 1, # N dimension can be 1 "min_tile_n": 16, # K (output channels) should be reasonable diff --git a/dispatcher/codegen/arch_specs.json b/dispatcher/codegen/arch_specs.json index 3072bfd75be..18880762d05 100644 --- a/dispatcher/codegen/arch_specs.json +++ b/dispatcher/codegen/arch_specs.json @@ -18,13 +18,13 @@ [4, 1, 1] ], "warp_tile_combos": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32]], "int8_int8_int32": [[32, 32, 16], [16, 16, 32]] } }, - + "gfx90a": { "family": "cdna2", "target_family": "gfx9", @@ -38,7 +38,7 @@ [4, 1, 1] ], "warp_tile_combos": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32]], @@ -46,7 +46,7 @@ "int8_int8_int32": [[32, 32, 16], [16, 16, 32]] } }, - + "gfx942": { "family": "cdna3", "target_family": "gfx9", @@ -55,12 +55,16 @@ "warp_size": 64, "lds_capacity_kb": 64, "warp_configs": [ + [1, 1, 1], + [1, 2, 1], [1, 4, 1], + [2, 1, 1], + [2, 1, 2], [2, 2, 1], [4, 1, 1] ], "warp_tile_combos": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 32], [16, 16, 64]], @@ -70,7 +74,7 @@ "int8_int8_int32": [[32, 32, 16], [16, 16, 32]] } }, - + "gfx950": { "family": "cdna4", "target_family": "gfx9", @@ -79,14 +83,18 @@ "warp_size": 64, "lds_capacity_kb": 160, "warp_configs": [ + [1, 1, 1], + [1, 2, 1], [1, 4, 1], + [2, 1, 1], + [2, 1, 2], [2, 2, 1], [4, 1, 1], [8, 2, 1], [4, 4, 1] ], "warp_tile_combos": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 32], [16, 16, 64], [16, 16, 128], [32, 32, 64]], diff --git a/dispatcher/codegen/arch_specs_generated.py b/dispatcher/codegen/arch_specs_generated.py index e6ac816e701..c3137cf32b2 100644 --- a/dispatcher/codegen/arch_specs_generated.py +++ b/dispatcher/codegen/arch_specs_generated.py @@ -4,7 +4,7 @@ AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY! Generated from: arch_specs.json -Generated at: 2026-04-10T20:07:11.665064 +Generated at: 2026-06-01T10:50:14.618422 To update this file: 1. Edit arch_specs.json @@ -28,6 +28,7 @@ "gfx1100": "rdna3", "gfx1200": "rdna4", "gfx1201": "rdna4", + "gfx1250": "rdna4", } # Element size in bytes for each data type @@ -37,23 +38,24 @@ WARP_SUPPORTED_COMBINATIONS: Dict[str, List[List[int]]] = { "gfx908": [[1, 4, 1], [2, 2, 1], [4, 1, 1]], "gfx90a": [[1, 4, 1], [2, 2, 1], [4, 1, 1]], - "gfx942": [[1, 4, 1], [2, 2, 1], [4, 1, 1]], - "gfx950": [[1, 4, 1], [2, 2, 1], [4, 1, 1], [8, 2, 1], [4, 4, 1]], + "gfx942": [[1, 1, 1], [1, 2, 1], [1, 4, 1], [2, 1, 1], [2, 1, 2], [2, 2, 1], [4, 1, 1]], + "gfx950": [[1, 1, 1], [1, 2, 1], [1, 4, 1], [2, 1, 1], [2, 1, 2], [2, 2, 1], [4, 1, 1], [8, 2, 1], [4, 4, 1]], "gfx1100": [[2, 4, 1], [1, 8, 1], [8, 1, 1], [4, 2, 1]], "gfx1200": [[2, 4, 1], [1, 8, 1], [8, 1, 1], [4, 2, 1]], "gfx1201": [[2, 4, 1], [1, 8, 1], [8, 1, 1], [4, 2, 1]], + "gfx1250": [[2, 4, 1], [1, 8, 1], [8, 1, 1], [4, 2, 1], [2, 1, 1], [1, 2, 2], [4, 1, 1], [1, 4, 1], [2, 2, 1]], } # Supported warp tile combinations: arch -> dtype_key -> [[warp_tile_m, n, k], ...] WARP_TILE_SUPPORTED_COMBINATIONS: Dict[str, Dict[str, List[List[int]]]] = { "gfx908": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32]], "int8_int8_int32": [[32, 32, 16], [16, 16, 32]], }, "gfx90a": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32]], @@ -61,7 +63,7 @@ "int8_int8_int32": [[32, 32, 16], [16, 16, 32]], }, "gfx942": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 32], [16, 16, 64]], @@ -71,7 +73,7 @@ "int8_int8_int32": [[32, 32, 16], [16, 16, 32]], }, "gfx950": { - "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 16]], + "fp32_fp32_fp32": [[16, 16, 4], [16, 16, 8], [16, 16, 16], [32, 32, 4], [32, 32, 8]], "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [4, 64, 16], [64, 4, 16]], "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 32], [16, 16, 64], [16, 16, 128], [32, 32, 64]], @@ -104,6 +106,10 @@ "bf8_fp8_fp32": [[16, 16, 16]], "int8_int8_int32": [[16, 16, 16]], }, + "gfx1250": { + "fp16_fp16_fp32": [[16, 16, 32]], + "bf16_bf16_fp32": [[16, 16, 32]], + }, } # Preshuffle-specific warp tile combinations (subset of standard GEMM) @@ -122,40 +128,10 @@ "int8_int8_int32": [[16, 16, 32], [32, 32, 16]], }, "gfx950": { - "fp16_fp16_fp32": [ - [32, 32, 8], - [16, 16, 16], - [32, 32, 16], - [16, 16, 32], - [64, 4, 16], - [32, 32, 32], - [16, 16, 64], - ], - "bf16_bf16_fp32": [ - [32, 32, 8], - [16, 16, 16], - [32, 32, 16], - [16, 16, 32], - [64, 4, 16], - [32, 32, 32], - [16, 16, 64], - ], - "fp8_fp8_fp32": [ - [32, 32, 16], - [32, 32, 32], - [16, 16, 32], - [16, 16, 64], - [16, 16, 128], - [32, 32, 64], - ], - "bf8_bf8_fp32": [ - [32, 32, 16], - [32, 32, 32], - [16, 16, 64], - [16, 16, 32], - [16, 16, 128], - [32, 32, 64], - ], + "fp16_fp16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [64, 4, 16], [32, 32, 32], [16, 16, 64]], + "bf16_bf16_fp32": [[32, 32, 8], [16, 16, 16], [32, 32, 16], [16, 16, 32], [64, 4, 16], [32, 32, 32], [16, 16, 64]], + "fp8_fp8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 32], [16, 16, 64], [16, 16, 128], [32, 32, 64]], + "bf8_bf8_fp32": [[32, 32, 16], [32, 32, 32], [16, 16, 64], [16, 16, 32], [16, 16, 128], [32, 32, 64]], }, } diff --git a/dispatcher/codegen/codegen_common.py b/dispatcher/codegen/codegen_common.py index a0486da66d7..a5f022021f8 100644 --- a/dispatcher/codegen/codegen_common.py +++ b/dispatcher/codegen/codegen_common.py @@ -118,6 +118,7 @@ class CommonTypeMappings: "fp8": "fp8_t", "bf8": "bf8_t", "int8": "int8_t", + "int32": "int32_t", } DTYPE_TO_CK_QUALIFIED = { @@ -127,6 +128,7 @@ class CommonTypeMappings: "fp8": "ck_tile::fp8_t", "bf8": "ck_tile::bf8_t", "int8": "int8_t", + "int32": "int32_t", } DTYPE_TO_DISPATCHER = { @@ -136,6 +138,7 @@ class CommonTypeMappings: "fp8": "DataType::FP8", "bf8": "DataType::BF8", "int8": "DataType::INT8", + "int32": "DataType::INT32", } # GEMM-specific layout mappings ("r"/"c" for row/column major). @@ -202,8 +205,26 @@ class CommonTypeMappings: @staticmethod def get_output_dtype(dtype: str) -> str: - """Get output datatype (fp8/bf8 -> fp16).""" - return "fp16" if dtype in ("fp8", "bf8") else dtype + """Get output (C) datatype for an A/B element dtype. + + Low-precision float inputs accumulate into and store as fp16 + (fp8/bf8 -> fp16); int8 stores its int32 accumulator (int8 -> int32). + Everything else stores in its own dtype. + """ + if dtype in ("fp8", "bf8"): + return "fp16" + if dtype == "int8": + return "int32" + return dtype + + @staticmethod + def get_acc_dtype(dtype: str) -> str: + """Get accumulator datatype for an A/B element dtype. + + Integer GEMM accumulates in int32; every float dtype accumulates in + fp32. + """ + return "int32" if dtype == "int8" else "fp32" # ============================================================================ diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_bf16.json deleted file mode 100644 index c3f7455c677..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_bf16.json +++ /dev/null @@ -1,1968 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp16.json deleted file mode 100644 index 001427b8b14..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp16.json +++ /dev/null @@ -1,1968 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp32.json deleted file mode 100644 index 487e8b350d0..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/ndhwgc_fp32.json +++ /dev/null @@ -1,1632 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_bf16.json deleted file mode 100644 index 0c8041e7e1d..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_bf16.json +++ /dev/null @@ -1,1968 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp16.json deleted file mode 100644 index 4f9fffc7487..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp16.json +++ /dev/null @@ -1,1968 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp32.json deleted file mode 100644 index 68bf0ee9cd3..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/profiler/nhwgc_fp32.json +++ /dev/null @@ -1,1632 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_bf16.json deleted file mode 100644 index 7630d57f6c4..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_bf16.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp16.json deleted file mode 100644 index 0da1061946a..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp16.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp32.json deleted file mode 100644 index 0f542880d75..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/ndhwgc_fp32.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_bf16.json deleted file mode 100644 index f43f1126f96..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_bf16.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp16.json deleted file mode 100644 index b64153598ee..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp16.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 16, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp32.json deleted file mode 100644 index ab6f33bda5c..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_data/tests/nhwgc_fp32.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "variant": "bwd_data", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 16, - "tile_k": 32, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_bf16.json deleted file mode 100644 index d15bc2abbeb..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_bf16.json +++ /dev/null @@ -1,4656 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 16, - "tile_n": 256, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 215, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 224, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 228, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 235, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 236, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 238, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 239, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 241, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 242, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 244, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 245, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 247, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 248, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 250, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 251, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 252, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 253, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 254, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 255, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 256, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 257, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp16.json deleted file mode 100644 index df833da75cb..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp16.json +++ /dev/null @@ -1,4656 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 16, - "tile_n": 256, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 228, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 230, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 231, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 237, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 238, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 240, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 241, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 243, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 244, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 246, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 247, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 249, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 250, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 252, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 253, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 254, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 255, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 256, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 257, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 258, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 259, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp32.json deleted file mode 100644 index 3de4dbedcf6..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/ndhwgc_fp32.json +++ /dev/null @@ -1,1688 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 58, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 70, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_bf16.json deleted file mode 100644 index ecabb82f5e1..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_bf16.json +++ /dev/null @@ -1,4852 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 16, - "tile_n": 256, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 224, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 231, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 232, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 233, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 234, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 235, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 236, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 242, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 243, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 245, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 246, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 248, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 249, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 251, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 252, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 254, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 255, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 257, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 258, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 259, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 260, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 261, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 262, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 263, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 264, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp16.json deleted file mode 100644 index 1db3ec1b109..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp16.json +++ /dev/null @@ -1,4936 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 16, - "tile_n": 256, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 145, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 223, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 230, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 231, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 235, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 236, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 237, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 238, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 239, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 240, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 241, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 246, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 247, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 249, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 250, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 252, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 253, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 255, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 256, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 258, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 259, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 261, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 262, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 263, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 264, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 265, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 266, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 267, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 268, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp32.json deleted file mode 100644 index 74e1e96d1cd..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/profiler/nhwgc_fp32.json +++ /dev/null @@ -1,1688 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 58, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 70, - "tile_m": 16, - "tile_n": 16, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": true - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_bf16.json deleted file mode 100644 index 3c82ee6f067..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_bf16.json +++ /dev/null @@ -1,1184 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp16.json deleted file mode 100644 index df840785ff1..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp16.json +++ /dev/null @@ -1,1128 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp32.json deleted file mode 100644 index 54d384ae324..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/ndhwgc_fp32.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_bf16.json deleted file mode 100644 index 51dc2f286db..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_bf16.json +++ /dev/null @@ -1,1184 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp16.json deleted file mode 100644 index 8effe99610f..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp16.json +++ /dev/null @@ -1,1184 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 32, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 16, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 2, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 4, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": true, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": true, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": true, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "basic_async_v1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp32.json deleted file mode 100644 index bdae90101af..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/backward_weight/tests/nhwgc_fp32.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "variant": "bwd_weight", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": true, - "streamk_reduction_strategy": "TREE", - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_bf16.json deleted file mode 100644 index 7da1a0d27da..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_bf16.json +++ /dev/null @@ -1,6700 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 98, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 145, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 146, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 147, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 148, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 149, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 150, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 151, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 152, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 159, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 178, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 179, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 180, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 181, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 182, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 183, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 184, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 186, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 189, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 190, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 191, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 199, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 215, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 223, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 224, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 228, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 230, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 231, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 232, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 233, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 234, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 235, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 236, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 237, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 238, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp16.json deleted file mode 100644 index 8a71378f99e..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp16.json +++ /dev/null @@ -1,6448 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 98, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 145, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 146, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 147, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 148, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 149, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 150, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 151, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 152, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 159, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 178, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 179, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 180, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 181, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 182, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 183, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 184, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 186, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 189, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 190, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 191, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 199, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 215, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 223, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 224, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 228, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 229, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp32.json deleted file mode 100644 index 53cdfab9fea..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ndhwgc_fp32.json +++ /dev/null @@ -1,4936 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 66, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 67, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 98, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 145, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 146, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 147, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 148, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 149, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 150, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 151, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 152, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 159, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_bf16.json deleted file mode 100644 index 76a0cc135cc..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_bf16.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 3, - "tile_h": 28, - "tile_w": 28, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 5, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 6, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 7, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 8, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 9, - "tile_h": 14, - "tile_w": 28, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 10, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 11, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 4, - "out_vec": 4 - }, - { - "id": 12, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 13, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 14, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 15, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 16, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 17, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 18, - "tile_h": 28, - "tile_w": 28, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 19, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp16.json deleted file mode 100644 index a7c5aa22ac1..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp16.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 3, - "tile_h": 28, - "tile_w": 28, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 5, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 6, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 7, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 8, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 9, - "tile_h": 14, - "tile_w": 28, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 10, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 11, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 4, - "out_vec": 4 - }, - { - "id": 12, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 13, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 14, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 15, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 16, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 17, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 18, - "tile_h": 28, - "tile_w": 28, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 19, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp32.json deleted file mode 100644 index cce7d39511e..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/ngchw_fp32.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 3, - "tile_h": 28, - "tile_w": 28, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 5, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 6, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 7, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 8, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 9, - "tile_h": 14, - "tile_w": 28, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 10, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 11, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 4, - "out_vec": 4 - }, - { - "id": 12, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 13, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 14, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 15, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 16, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 17, - "tile_h": 16, - "tile_w": 16, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 18, - "tile_h": 28, - "tile_w": 28, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 8, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 19, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_bf16.json deleted file mode 100644 index 215bea48b34..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_bf16.json +++ /dev/null @@ -1,7176 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 256, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 98, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 64, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 149, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 150, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 151, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 152, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 153, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 154, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 155, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 156, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 159, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 178, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 179, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 180, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 181, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 182, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 183, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 184, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 186, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 189, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 190, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 191, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 199, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 215, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 217, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 218, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 219, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 220, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 221, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 222, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 223, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 224, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 225, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 226, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 227, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 228, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 249, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 250, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 251, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 252, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 253, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 254, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 255, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 256, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 257, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 258, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 259, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 260, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 261, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 262, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 263, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 264, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 265, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 266, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 267, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 268, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 269, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 270, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 271, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 272, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 273, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 274, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 275, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 276, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 277, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 278, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 279, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 280, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 281, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 282, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 283, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 284, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 285, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 286, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 287, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 288, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 289, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 290, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 291, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 292, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 293, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 294, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 295, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 296, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 297, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 298, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 299, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 300, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 301, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 302, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 303, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 304, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 305, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 306, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 307, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 308, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp16.json deleted file mode 100644 index 886ab42848b..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp16.json +++ /dev/null @@ -1,6924 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 256, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 61, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 62, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 63, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 64, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 65, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 2, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 97, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 98, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 99, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 100, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 157, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 158, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 159, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 160, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 161, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 162, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 163, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 164, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 178, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 179, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 180, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 181, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 182, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 183, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 184, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 186, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 189, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 190, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 191, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 199, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 213, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 214, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 215, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 216, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 237, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 238, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 239, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 240, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 241, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 242, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 243, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 244, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 245, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 246, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 247, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 248, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 249, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 250, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 251, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 252, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 253, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 254, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 255, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 256, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 257, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 258, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 259, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 260, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 261, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 262, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 263, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 264, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 265, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 266, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 267, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 268, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 269, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 270, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 271, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 272, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 273, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 274, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 275, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 276, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 277, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 278, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 279, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 280, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 281, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 282, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 283, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 284, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 285, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 286, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 287, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 288, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 289, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 290, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 291, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 292, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 293, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 294, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 295, - "tile_m": 16, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 296, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp32.json deleted file mode 100644 index 4ebc5c28acb..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/profiler/nhwgc_fp32.json +++ /dev/null @@ -1,4936 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 128, - "tile_n": 192, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 68, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 69, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 70, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 71, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 72, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 73, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 74, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 75, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 76, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 77, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 78, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 79, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 80, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 81, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 82, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 83, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 84, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 85, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 86, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 87, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 88, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 89, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 90, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 91, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 92, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 93, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 94, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 95, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 96, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 101, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 102, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 103, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 104, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 105, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 106, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 107, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 108, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 109, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 110, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 111, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 112, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 113, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 114, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 115, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 116, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 117, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 118, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 119, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 120, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 121, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 122, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 123, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 124, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 125, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 126, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 127, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 128, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 129, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 130, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 131, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 132, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 133, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 134, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 135, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 136, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 137, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 138, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 139, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 140, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 141, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 142, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 143, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 144, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 145, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 146, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 147, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 148, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 165, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 166, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 167, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 168, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 169, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 170, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 171, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 172, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 173, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 174, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 175, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 176, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 177, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 178, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 179, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 180, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 181, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 182, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 183, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 184, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 185, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 186, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 187, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 188, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 189, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 190, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 191, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 192, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 193, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 194, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 195, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 196, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 197, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 198, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 199, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 200, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 201, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 202, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 203, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 204, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 205, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 206, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 207, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 208, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 209, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 210, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 211, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 212, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_bf16.json deleted file mode 100644 index 5dc01979532..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_bf16.json +++ /dev/null @@ -1,1324 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 46, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp16.json deleted file mode 100644 index 7e7eeb04748..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp16.json +++ /dev/null @@ -1,1296 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 16, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 256, - "tile_n": 32, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 45, - "tile_m": 32, - "tile_n": 256, - "tile_k": 64, - "warp_m": 1, - "warp_n": 4, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp32.json deleted file mode 100644 index cc2d63f24a4..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ndhwgc_fp32.json +++ /dev/null @@ -1,988 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 3, - "layout": "ndhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_bf16.json deleted file mode 100644 index c6f2d65d656..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_bf16.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 3, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 5, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp16.json deleted file mode 100644 index 0f1767979bf..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp16.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 3, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 5, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp32.json deleted file mode 100644 index 57ea0d787e5..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/ngchw_fp32.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "variant": "forward_depthwise", - "ndim_spatial": 2, - "layout": "ngchw", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_h": 8, - "tile_w": 8, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 8, - "sub_h": 2, - "sub_w": 2, - "in_vec": 2, - "out_vec": 2 - }, - { - "id": 1, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 1, - "str_w": 1, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 2, - "tile_h": 16, - "tile_w": 16, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 2, - "sub_h": 1, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 3, - "tile_h": 32, - "tile_w": 32, - "filt": 3, - "str_h": 2, - "str_w": 2, - "pad_h": 1, - "pad_w": 1, - "nbatch": 1, - "sub_h": 2, - "sub_w": 8, - "in_vec": 8, - "out_vec": 8 - }, - { - "id": 4, - "tile_h": 8, - "tile_w": 8, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 1, - "sub_h": 1, - "sub_w": 1, - "in_vec": 1, - "out_vec": 1 - }, - { - "id": 5, - "tile_h": 32, - "tile_w": 32, - "filt": 5, - "str_h": 1, - "str_w": 1, - "pad_h": 2, - "pad_w": 2, - "nbatch": 4, - "sub_h": 4, - "sub_w": 4, - "in_vec": 8, - "out_vec": 8 - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_bf16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_bf16.json deleted file mode 100644 index f5f9eb84843..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_bf16.json +++ /dev/null @@ -1,1576 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "bf16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 64, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 128, - "tile_n": 64, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 256, - "tile_n": 16, - "tile_k": 64, - "warp_m": 4, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 59, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 60, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp16.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp16.json deleted file mode 100644 index b386a64fdfe..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp16.json +++ /dev/null @@ -1,1548 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp16", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 128, - "tile_n": 64, - "tile_k": 8, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 32, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 64, - "tile_n": 32, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 32, - "tile_n": 128, - "tile_k": 32, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": true, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 128, - "tile_n": 32, - "tile_k": 32, - "warp_m": 2, - "warp_n": 1, - "warp_k": 2, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 224, - "tile_n": 256, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 256, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 256, - "tile_n": 224, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 256, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 256, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 47, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 48, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 49, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 50, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 51, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 52, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 53, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 54, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 55, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 56, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 57, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 16, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 58, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 8, - "vector_size_b": 8, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp32.json b/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp32.json deleted file mode 100644 index 58e35221f8e..00000000000 --- a/dispatcher/codegen/configs/grouped_conv/forward/tests/nhwgc_fp32.json +++ /dev/null @@ -1,1268 +0,0 @@ -{ - "variant": "forward", - "ndim_spatial": 2, - "layout": "nhwgc", - "datatype": "fp32", - "instances": [ - { - "id": 0, - "tile_m": 128, - "tile_n": 256, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 1, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 2, - "tile_m": 64, - "tile_n": 32, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 3, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 4, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 5, - "tile_m": 128, - "tile_n": 32, - "tile_k": 16, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 6, - "tile_m": 64, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 1, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 7, - "tile_m": 128, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 8, - "tile_m": 128, - "tile_n": 64, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 9, - "tile_m": 32, - "tile_n": 64, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 10, - "tile_m": 256, - "tile_n": 128, - "tile_k": 16, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 11, - "tile_m": 64, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 12, - "tile_m": 32, - "tile_n": 128, - "tile_k": 16, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 13, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 2, - "vector_size_b": 1, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 14, - "tile_m": 64, - "tile_n": 64, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 1, - "vector_size_b": 2, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 15, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 8, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 16, - "tile_m": 64, - "tile_n": 16, - "tile_k": 16, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 4, - "vector_size_a": 4, - "vector_size_b": 1, - "vector_size_c": 1, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 32, - "num_wave_groups": 1, - "specialization": "filter3x3", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 17, - "tile_m": 128, - "tile_n": 128, - "tile_k": 32, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv4", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": true, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 18, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv3", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 19, - "tile_m": 128, - "tile_n": 128, - "tile_k": 64, - "warp_m": 2, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "compv6", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 20, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 21, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 22, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 23, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 24, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 25, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 26, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 27, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 28, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 29, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "compv1", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 30, - "tile_m": 128, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 31, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 32, - "tile_m": 32, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "intrawave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 33, - "tile_m": 128, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 34, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 35, - "tile_m": 16, - "tile_n": 128, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 36, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 37, - "tile_m": 32, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 38, - "tile_m": 32, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 8, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 39, - "tile_m": 16, - "tile_n": 16, - "tile_k": 64, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 40, - "tile_m": 64, - "tile_n": 16, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 2, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 41, - "tile_m": 16, - "tile_n": 64, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "filter1x1_stride1_pad0", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 42, - "tile_m": 16, - "tile_n": 16, - "tile_k": 128, - "warp_m": 1, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "compv1", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 43, - "tile_m": 64, - "tile_n": 32, - "tile_k": 64, - "warp_m": 2, - "warp_n": 1, - "warp_k": 1, - "warp_tile_m": 32, - "warp_tile_n": 32, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - }, - { - "id": 44, - "tile_m": 16, - "tile_n": 32, - "tile_k": 64, - "warp_m": 1, - "warp_n": 2, - "warp_k": 1, - "warp_tile_m": 16, - "warp_tile_n": 16, - "warp_tile_k": 8, - "vector_size_a": 4, - "vector_size_b": 4, - "vector_size_c": 4, - "pipeline": "mem", - "scheduler": "interwave", - "epilogue": "cshuffle", - "double_smem_buffer": false, - "num_groups_to_merge": 1, - "num_wave_groups": 1, - "specialization": "default", - "two_stage": false, - "explicit_gemm": false, - "split_image": false, - "streamk_enabled": false, - "streamk_reduction_strategy": null, - "streamk_persistent": false - } - ] -} \ No newline at end of file diff --git a/dispatcher/codegen/fmha/instance_gen.py b/dispatcher/codegen/fmha/instance_gen.py index 20536cabdf0..9286e0bf20b 100644 --- a/dispatcher/codegen/fmha/instance_gen.py +++ b/dispatcher/codegen/fmha/instance_gen.py @@ -2396,6 +2396,12 @@ def _bp_bk1(bm0, bn0, bk0, hq): bp_specs = get_batch_prefill_pipelines(dtype, hq, receipt) for tc in tiles: bk1 = _bp_bk1(tc.bm0, tc.bn0, tc.bk0, hq) + + # qr_async stages K into LDS through a bk1-major descriptor while the gemm0 + # loop reads bk0 chunks, therefore the pipeline requires bk0 == bk1 + if tc.bk0 != bk1: + continue + for spec in bp_specs: mm = _MASK_MAP.get(spec.mask, spec.mask) mb = _BIAS_MAP.get(spec.bias, spec.bias) diff --git a/dispatcher/codegen/grouped_conv/__init__.py b/dispatcher/codegen/grouped_conv/__init__.py new file mode 100644 index 00000000000..1df48571843 --- /dev/null +++ b/dispatcher/codegen/grouped_conv/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT diff --git a/dispatcher/codegen/grouped_conv/grouped_config_rules_builder.py b/dispatcher/codegen/grouped_conv/grouped_config_rules_builder.py new file mode 100644 index 00000000000..2b43d43c50d --- /dev/null +++ b/dispatcher/codegen/grouped_conv/grouped_config_rules_builder.py @@ -0,0 +1,525 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Builder-derived rule sets ("profiler" and "tests") for Grouped Convolution Tile +Configurations. + +Unlike the rule-derived sets, these configs are produced directly from the CK +Builder ``.conf`` configurations in +``experimental/grouped_convolution_tile_instances/configs///``. + +CK Builder instances are parameterized with Seq() thread block cluster lengths +and k0/k1 decompositions that control thread-to-data mappings at a level of +detail the dispatcher codegen does not model. Multiple Builder instances that +differ only in these parameters produce identical dispatcher configurations +(same tile/warp/vector sizes, pipeline, scheduler, specialization). The +conversion therefore deduplicates so each unique dispatcher config appears +exactly once. + +Selected via ``get_default_configs(rule_set="profiler")`` (profiler subset) or +``get_default_configs(rule_set="tests")`` (tests subset). +""" + +import logging +import sys +from enum import Enum +from pathlib import Path +from typing import List + +# --------------------------------------------------------------------------- +# Path setup — allow importing sibling codegen modules and the CK Builder's +# authoritative .conf parser (generate_instances.py). +# --------------------------------------------------------------------------- +_CODEGEN_DIR = Path(__file__).resolve().parent.parent +if str(_CODEGEN_DIR) not in sys.path: + sys.path.insert(0, str(_CODEGEN_DIR)) + +_BUILDER_DIR = ( + _CODEGEN_DIR.parent.parent + / "experimental" + / "grouped_convolution_tile_instances" +) +if str(_BUILDER_DIR) not in sys.path: + sys.path.insert(0, str(_BUILDER_DIR)) + +# CK Builder .conf source directory. +_BUILDER_CONFIGS_DIR = _BUILDER_DIR / "configs" + +from generate_instances import ( + ConvInstanceTemplateParams, + DEPTHWISE_CONFIGS, + fwd_configs, + bwd_data_configs, + bwd_weight_configs, + get_warp_size, + parse_fwd_instances, + parse_depthwise_config, + parse_bwd_weight_instances, + parse_bwd_data_instances, +) + +log = logging.getLogger(__name__) + + +# ============================================================================= +# CK Builder field mapping helpers +# ============================================================================= +def map_pipeline_version(version_str): + """Map CK Builder pipeline version to dispatcher pipeline string.""" + mapping = { + "V1": "compv1", + "V2": "mem", + "V3": "compv3", + "V4": "compv4", + "V5": "compv5", + "V6": "compv6", + "ASYNC_V1": "basic_async_v1", + "ASYNC_V4": "mem", + "WAVELET": "wavelet", + } + mapped = mapping.get(version_str) + if mapped is None: + log.warning( + "Unknown pipeline version %r; falling back to %r", + version_str, version_str.lower(), + ) + return version_str.lower() + return mapped + + +def map_scheduler(scheduler_str): + """Map CK Builder scheduler to dispatcher scheduler string.""" + if "Intrawave" in scheduler_str: + return "intrawave" + elif "Interwave" in scheduler_str: + return "interwave" + return scheduler_str.lower() + + +def map_specialization(spec_str): + """Map CK Builder specialization to dispatcher specialization string.""" + mapping = { + "Default": "default", + "OddC": "default", + "Filter1x1Pad0": "filter1x1_pad0", + "Filter1x1Stride1Pad0": "filter1x1_stride1_pad0", + "Filter3x3": "filter3x3", + } + return mapping.get(spec_str, spec_str.lower()) + + +class Specialization(Enum): + Default = "Default" + StreamK = "Streamk" + Depthwise = "Depthwise" + + +def _conv_depthwise_params_to_dict(p: list, index: int) -> dict: + if len(p) != 12: + raise ValueError(f"Expected 12 parameters for depthwise conv, got {len(p)}: {p}") + return { + "id": index, + "tile_h": p[0], + "tile_w": p[1], + "filt": p[2], + "str_h": p[3], + "str_w": p[4], + "pad_h": p[5], + "pad_w": p[6], + "nbatch": p[7], + "sub_h": p[8], + "sub_w": p[9], + "in_vec": p[10], + "out_vec": p[11], + } + + +def _conv_params_to_dict(p: ConvInstanceTemplateParams) -> dict: + """Convert a ConvInstanceTemplateParams (CK Builder) to a dispatcher dict.""" + return { + "id": p.id, + "tile_m": p.tile_size[0], + "tile_n": p.tile_size[1], + "tile_k": p.tile_size[2], + "warp_m": p.warps[0], + "warp_n": p.warps[1], + "warp_k": p.warps[2], + "warp_tile_m": p.warp_tile[0], + "warp_tile_n": p.warp_tile[1], + "warp_tile_k": p.warp_tile[2], + "vector_size_a": p.scalar_per_vector[0], + "vector_size_b": p.scalar_per_vector[1], + "vector_size_c": p.scalar_per_vector[2], + "pipeline": map_pipeline_version(p.pipeline_version), + "scheduler": map_scheduler(p.scheduler), + "epilogue": "cshuffle", + "double_smem_buffer": p.double_smem_buffer, + "num_groups_to_merge": p.num_groups_to_merge, + "num_wave_groups": p.num_wave_groups, + "specialization": map_specialization(p.specialization), + "two_stage": p.is_two_stage_instance, + "explicit_gemm": p.explicit_gemm, + "split_image": p.split_image, + "streamk_enabled": p.streamk_enabled, + "streamk_reduction_strategy": p.streamk_reduction_strategy, + "streamk_persistent": p.streamk_persistent, + } + + +def _build_data(input_path, variant, layout, datatype, ndim, specialization, warp_size, verbose=False) -> dict: + """Parse a single CK Builder .conf file into an in-memory config dict. + + Equivalent to the old ``convert_config_file`` but returns the dict directly + instead of writing JSON. The dict shape matches what the loaders below + expect: ``{variant, ndim_spatial, layout, datatype, instances}``. + + ``warp_size`` must match the target architecture's warp size (64 for CDNA + gfx9, 32 for RDNA). + """ + with open(input_path, "r", encoding="utf-8") as f: + lines = f.readlines() + + # problem_name is used only for dtype detection (fp32/fp16/bf16 substring match) + problem_name = f"grouped_convolution_{variant}_tile_{layout}_{datatype}" + + if variant == "bwd_weight": + raw = parse_bwd_weight_instances(lines, problem_name, warp_size=warp_size, verbose=verbose) + elif variant == "forward" and specialization == Specialization.Default: + raw = parse_fwd_instances(lines, problem_name, warp_size=warp_size, verbose=verbose) + elif variant == "forward" and specialization == Specialization.Depthwise: + raw = parse_depthwise_config(input_path, verbose=verbose) + elif variant == "bwd_data": + raw = parse_bwd_data_instances(lines, problem_name, warp_size=warp_size, verbose=verbose) + else: + raise RuntimeError( + f"Variant '{variant}' with specialization '{specialization}' is not yet implemented." + ) + + instances = [ + _conv_params_to_dict(p) if isinstance(p, ConvInstanceTemplateParams) + else _conv_depthwise_params_to_dict(p, i) + for (i, p) in enumerate(raw) + ] + + # Deduplicate: Builder instances that differ only in Seq() thread block + # cluster lengths or k0/k1 decomposition produce identical dispatcher + # configs because the conversion discards these parameters. + seen = set() + unique_instances = [] + for inst in instances: + key = tuple(sorted((k, str(v)) for k, v in inst.items() if k != "id")) + if key not in seen: + seen.add(key) + unique_instances.append(inst) + if len(unique_instances) < len(instances): + log.debug( + f"Deduplicated: {len(instances)} -> {len(unique_instances)} " + f"({len(instances) - len(unique_instances)} duplicates removed)" + ) + instances = unique_instances + + output_variant = ( + "forward_depthwise" + if variant == "forward" and specialization == Specialization.Depthwise + else variant + ) + log.debug(f"Parsed {len(instances)} instances from {input_path}") + return { + "variant": output_variant, + "ndim_spatial": ndim, + "layout": layout, + "datatype": datatype, + "instances": instances, + } + + +# ============================================================================= +# Config-name parsing (which .conf files exist, and how to interpret them) +# ============================================================================= +def _parse_config(config: str, variant: str): + """Parse a config name like 'nhwgc_bf16' into its components.""" + parts = config.split("_") + if len(parts) > 3: + raise ValueError(f"Unsupported config: {config}") + layout = parts[0] + datatype = parts[1] + + specialization = Specialization.Default + + if datatype == "depthwise": + datatype = parts[2] + specialization = Specialization.Depthwise + elif len(parts) == 3 and parts[2] == "streamk": + specialization = Specialization.StreamK + + if layout not in ["nhwgc", "ndhwgc"]: + raise ValueError(f"Invalid layout: {layout}") + + if datatype not in ["fp32", "fp16", "bf16"]: + raise ValueError(f"Invalid datatype: {datatype}") + + ndim = 2 if layout == "nhwgc" else 3 + + source_cfg = config + target_cfg = config + if specialization == Specialization.StreamK: + target_cfg = config.replace("_streamk", "") + elif specialization == Specialization.Depthwise: + target_cfg = config.replace("_depthwise", "") + + return variant, source_cfg, target_cfg, layout, datatype, ndim, specialization + + +def _parse_config_depthwise(): + configs = [] + for config in DEPTHWISE_CONFIGS: + parts = config["name"].split("_") + if len(parts) != 3: + raise ValueError(f"Unsupported depthwise config: {config}") + layout = parts[0] + datatype = parts[2] + specialization = Specialization.Depthwise + + if layout not in ["ngchw", "ngcdhw"]: + raise ValueError(f"Invalid layout: {layout}") + + if datatype not in ["fp32", "fp16", "bf16"]: + raise ValueError(f"Invalid datatype: {datatype}") + + ndim = 2 if layout in ("nhwgc", "ngchw") else 3 + + source_cfg = config["conf"].replace(".conf", "") + target_cfg = f"{layout}_{datatype}" + + configs.append(("forward", source_cfg, target_cfg, layout, datatype, ndim, specialization)) + + return configs + + +def _builder_config_list(): + """List every (variant, source_cfg, target_cfg, layout, datatype, ndim, + specialization) tuple known to the CK Builder.""" + config_fwd_depthwise = _parse_config_depthwise() + config_fwd = [_parse_config(cfg, "forward") for cfg in fwd_configs] + config_bwd_weight = [_parse_config(cfg, "bwd_weight") for cfg in bwd_weight_configs] + config_bwd_data = [_parse_config(cfg, "bwd_data") for cfg in bwd_data_configs] + return config_fwd_depthwise + config_fwd + config_bwd_weight + config_bwd_data + + +# ============================================================================= +# In-memory loaders: config dict -> dispatcher config objects +# ============================================================================= +def _load_depthwise_configs(data: dict, arch: str) -> List: + """Build DepthwiseConvKernelConfig objects from an in-memory config dict.""" + from unified_grouped_conv_codegen import DepthwiseConvKernelConfig + + ndim_spatial = data["ndim_spatial"] + layout = data["layout"] + datatype = data["datatype"] + + configs = [] + for inst in data["instances"]: + configs.append(DepthwiseConvKernelConfig( + tile_h=inst["tile_h"], + tile_w=inst["tile_w"], + filt=inst["filt"], + str_h=inst["str_h"], + str_w=inst["str_w"], + pad_h=inst["pad_h"], + pad_w=inst["pad_w"], + nbatch=inst["nbatch"], + sub_h=inst["sub_h"], + sub_w=inst["sub_w"], + in_vec=inst["in_vec"], + out_vec=inst["out_vec"], + ndim_spatial=ndim_spatial, + arch=arch, + layout=layout, + datatype=datatype, + )) + + log.debug(f"Loaded {len(configs)} depthwise configs (layout={layout}, dtype={datatype})") + return configs + + +def _load_gemm_configs(data: dict, arch: str) -> List: + """Build GroupedConvKernelConfig objects from an in-memory config dict.""" + from unified_grouped_conv_codegen import ( + GroupedConvVariant, + GroupedConvTraitConfig, + GroupedConvKernelConfig, + TileConfig, + StreamKConfig, + StreamKReductionStrategy, + ) + + variant_map = { + "forward": GroupedConvVariant.FORWARD, + "fwd": GroupedConvVariant.FORWARD, + "forward_depthwise": GroupedConvVariant.FORWARD_DEPTHWISE, + "bwd_data": GroupedConvVariant.BACKWARD_DATA, + "bwd_weight": GroupedConvVariant.BACKWARD_WEIGHT, + } + variant = variant_map.get(data["variant"]) + if variant is None: + raise ValueError(f"Unknown variant: {data['variant']}") + + ndim_spatial = data["ndim_spatial"] + layout = data["layout"] + datatype = data["datatype"] + + configs = [] + for inst in data["instances"]: + trait = GroupedConvTraitConfig( + pipeline=inst["pipeline"], + scheduler=inst["scheduler"], + epilogue=inst["epilogue"], + pad_m=True, + pad_n=True, + pad_k=True, + double_smem_buffer=inst.get("double_smem_buffer", False), + num_groups_to_merge=inst.get("num_groups_to_merge", 1), + split_image=inst.get("split_image", False), + explicit_gemm=inst.get("explicit_gemm", False), + two_stage=inst.get("two_stage", False), + specialization=inst.get("specialization", "default"), + streamk_config=StreamKConfig( + streamk_enabled=inst.get("streamk_enabled", False), + strategy=StreamKReductionStrategy(inst.get("streamk_reduction_strategy", "TREE")), + streamk_persistent=inst.get("streamk_persistent", False) + ) if inst.get("streamk_enabled", False) else StreamKConfig() + ) + + # compv2/basic_v2 (GemmPipelineAGmemBGmemCRegV2) is not compatible with + # CK Tile's GroupedConvolutionBackwardWeightKernel. The builder maps + # PipelineVersion::V2 to GemmPipelineAgBgCrMem (i.e. "mem"), not to + # GemmPipelineAGmemBGmemCRegV2. Skip if any config somehow has compv2. + if variant == GroupedConvVariant.BACKWARD_WEIGHT and trait.pipeline in ("compv2", "basic_v2"): + log.info(f"Skipping instance {inst['id']}: compv2/basic_v2 pipeline not compatible with CK Tile bwd_weight") + continue + + config = GroupedConvKernelConfig( + tile=TileConfig( + tile_m=inst["tile_m"], + tile_n=inst["tile_n"], + tile_k=inst["tile_k"], + warp_m=inst["warp_m"], + warp_n=inst["warp_n"], + warp_k=inst["warp_k"], + warp_tile_m=inst["warp_tile_m"], + warp_tile_n=inst["warp_tile_n"], + warp_tile_k=inst["warp_tile_k"], + ), + trait=trait, + variant=variant, + ndim_spatial=ndim_spatial, + arch=arch, + layout=layout, + vector_size_a=inst["vector_size_a"], + vector_size_b=inst["vector_size_b"], + vector_size_c=inst["vector_size_c"], + num_wave_groups=inst.get("num_wave_groups", 1), + ) + # Tag each config with its concrete datatype so that generate_all emits + # the kernel only for that datatype (an untagged config is compiled for + # every datatype). + config.datatype = datatype + configs.append(config) + + log.debug( + f"Loaded {len(configs)} configs (variant={data['variant']}, layout={layout}, dtype={datatype})" + ) + return configs + + +# ============================================================================= +# Unified rule-set entry point +# ============================================================================= +def get_configs( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str], + subset: str = "profiler", + verbose: bool = False, +) -> List: + """Build all configs for a builder-derived rule set by parsing the CK + Builder ``.conf`` files in memory. + + ``subset`` selects the on-disk config subset (``"profiler"`` or ``"tests"``). + Each requested (variant, ndim, datatype) is filtered against the Builder's + config list, the matching ``.conf`` file is parsed and converted into + dispatcher config objects, with no intermediate JSON written. + + ``verbose`` controls whether the underlying CK Builder parsers print their + "Skipping instance ..." diagnostics. It defaults to ``False`` so the + dispatcher rule set stays quiet; the standalone CK Builder script keeps + printing them (its own default is ``True``). + """ + from unified_grouped_conv_codegen import GroupedConvVariant + + # Builder variant name -> on-disk variant directory name. + variant_dir_map = { + "forward": "forward", + "bwd_weight": "backward_weight", + "bwd_data": "backward_data", + } + + def to_enum(variant_name, specialization): + if variant_name == "forward": + return (GroupedConvVariant.FORWARD_DEPTHWISE + if specialization == Specialization.Depthwise + else GroupedConvVariant.FORWARD) + if variant_name == "bwd_weight": + return GroupedConvVariant.BACKWARD_WEIGHT + if variant_name == "bwd_data": + return GroupedConvVariant.BACKWARD_DATA + return None + + want_variants = set(variants) + want_ndims = set(ndims) if ndims else None + want_dtypes = set(datatypes) if datatypes else None + + warp_size = get_warp_size(arch) + + configs: List = [] + for (variant_name, source_cfg, target_cfg, layout, datatype, ndim, spec) in _builder_config_list(): + if to_enum(variant_name, spec) not in want_variants: + continue + if want_ndims is not None and ndim not in want_ndims: + continue + if want_dtypes is not None and datatype not in want_dtypes: + continue + + input_path = _BUILDER_CONFIGS_DIR / variant_dir_map[variant_name] / subset / f"{source_cfg}.conf" + if not input_path.exists(): + log.warning(f"Builder config not found: {input_path}") + continue + + data = _build_data(input_path, variant_name, layout, datatype, ndim, spec, warp_size, verbose=verbose) + if data["variant"] == "forward_depthwise": + configs.extend(_load_depthwise_configs(data, arch)) + else: + configs.extend(_load_gemm_configs(data, arch)) + + log.info(f"builder rule set ({subset}): generated {len(configs)} configs") + return configs + +def get_configs_profiler( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str], +) -> List: + return get_configs(arch, variants, ndims, datatypes, subset="profiler") + +def get_configs_tests( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str], +) -> List: + return get_configs(arch, variants, ndims, datatypes, subset="tests") \ No newline at end of file diff --git a/dispatcher/codegen/grouped_config_rules.py b/dispatcher/codegen/grouped_conv/grouped_config_rules_default.py similarity index 67% rename from dispatcher/codegen/grouped_config_rules.py rename to dispatcher/codegen/grouped_conv/grouped_config_rules_default.py index 576c3af1ff1..7b220c0fd9b 100644 --- a/dispatcher/codegen/grouped_config_rules.py +++ b/dispatcher/codegen/grouped_conv/grouped_config_rules_default.py @@ -4,15 +4,12 @@ # SPDX-License-Identifier: MIT """ -Single Source of Truth for Grouped Convolution Tile Configurations +"default" rule set for Grouped Convolution Tile Configurations. -This module defines all valid tile configurations for grouped convolution kernels. -Both codegen and instance_builder import from here to ensure consistency. +This is the original, hand-curated heuristic rule set (small deterministic +per-tile wave/warp/vector maps + hardcoded pipelines). It is preserved here +verbatim and selected via ``get_default_configs(rule_set="default")``. -Architecture: - grouped_conv_tile_configs.py (SOURCE OF TRUTH) - ├── Used by unified_grouped_conv_codegen.py - └── Used by grouped_conv_instance_builder.py """ from typing import Dict, List, Tuple @@ -146,6 +143,8 @@ ("mem", "interwave", 1, 0), ("mem", "interwave", 0, 1), ("mem", "interwave", 1, 1), + # wavelet: intrawave only, single LDS (DoubleSmemBuffer=false hardcoded) + ("wavelet", "intrawave", 0, 0), ] @@ -178,6 +177,7 @@ def iter_pipeline_variants(pipelines: List[str] = None): "compv6", "comp_async", "basic_async_v1", + "wavelet", ], "bwd_data": [ "basic_v1", @@ -188,6 +188,7 @@ def iter_pipeline_variants(pipelines: List[str] = None): "compv6", "comp_async", "basic_async_v1", + "wavelet", ], "bwd_weight": [ "basic_v1", @@ -198,6 +199,7 @@ def iter_pipeline_variants(pipelines: List[str] = None): "compv6", "comp_async", "basic_async_v1", + "wavelet", ], } @@ -263,7 +265,7 @@ def check_vectors(vec_a: int, vec_b: int, vec_c: int) -> bool: def check_warp_coverage( tile_m: int, tile_n: int, tile_k: int, vec_a: int, vec_b: int, - variant: str = "forward", + variant: str = "forward", warp_size: int = 64, ) -> bool: """Check tile dims don't exceed single-warp vector load coverage. @@ -272,9 +274,72 @@ def check_warp_coverage( Backward data: tile_k is the A-tile dim """ a_tile_dim = tile_k if variant == "bwd_data" else tile_m - if a_tile_dim > WARP_SIZE * vec_a: + if a_tile_dim > warp_size * vec_a: return False - if tile_n > WARP_SIZE * vec_b: + if tile_n > warp_size * vec_b: + return False + return True + +def check_tile_coverage( + tile_m: int, tile_n: int, tile_k: int, + vec_a: int, vec_b: int, pipeline_version: str, + block_size: int = 64, +) -> bool: + """Check if each thread has some data to read. + + Return false when there is more threads than data to read. + """ + if pipeline_version == "compv6": + # V6 pipeline computes A/B_Buffer_Load_Inst_Num as integer division; + # if either is 0 the scheduler divides by zero at compile time. + # tile_k=32 compv6 instances are valid as long as both load-instruction counts stay >= 1. + if (tile_m * tile_k) // (block_size * vec_a) < 1: + return False + if (tile_n * tile_k) // (block_size * vec_b) < 1: + return False + return True + + +def get_warp_size(gpu_target: str) -> int: + """Return warp size for the given GPU target. + + Accepts either a family prefix (gfx9, gfx11, gfx12) or a full arch string + (gfx942, gfx950, gfx1201, ...). gfx9xx => 64, everything else => 32. + """ + if gpu_target.startswith("gfx9"): + return 64 + return 32 + + +def check_wmma_instance( + warp_size: int, + k_per_block: int, + k_warp: int, + k_per_xdl: int, + m_per_xdl: int, + dtype: str, +) -> bool: + """Check WMMA-specific constraints for warp_size=32 targets (gfx11/gfx12). + + Returns False (skip instance) when any constraint is violated. + """ + if warp_size != 32: + return True + if k_per_xdl < 32 and dtype != "float": + return False + if k_warp * k_per_xdl > k_per_block: + return False + if m_per_xdl == 32: + return False + return True + + +def check_wmma_native_warp_tile(warp_size: int, streamk_enabled: bool) -> bool: + """Check native instance warp_tile constraints for warp_size=32 targets. + + Returns False (skip instance) when streamk is enabled. + """ + if warp_size == 32 and streamk_enabled: return False return True @@ -282,10 +347,10 @@ def check_warp_coverage( def check_bwd_data_vec_coverage( tile_m: int, tile_n: int, tile_k: int, warp_m: int, warp_n: int, warp_k: int, - vec_a: int, vec_b: int, + vec_a: int, vec_b: int, warp_size: int = 64, ) -> bool: """Bwd_data: vector width must not exceed elements per thread per tile slice.""" - block_size = WARP_SIZE * warp_m * warp_n * warp_k + block_size = warp_size * warp_m * warp_n * warp_k if vec_a > (tile_m * tile_k) // block_size: return False if vec_b > (tile_n * tile_k) // block_size: @@ -386,6 +451,100 @@ def get_tile_full_config(tile_m: int, tile_n: int, tile_k: int) -> dict: # ============================================================================= +def get_configs( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str] = None, +) -> List: + """Build all available configs for the "default" (hand-curated) rule set. + + Unified rule-set entry point used by + ``unified_grouped_conv_codegen.get_default_configs``. Small deterministic + per-tile wave/warp maps + hardcoded pipelines, ported verbatim from the + initial rule-based codegen. Configs are dtype-agnostic (``datatype`` left as + None) so ``generate_all`` compiles each for every requested datatype, + matching the original behavior. ``datatypes`` is accepted for interface + uniformity but not used by this rule set. + """ + from unified_grouped_conv_codegen import ( + GroupedConvVariant, + GroupedConvTraitConfig, + GroupedConvKernelConfig, + TileConfig, + ) + + def _expand(tile_list): + out = [] + for tm, tn, tk in tile_list: + key = (tm, tn, tk) + if key in TILE_TO_WAVE and key in TILE_TO_WARP: + wm, wn, _wk = TILE_TO_WAVE[key] + wtm, wtn, wtk = TILE_TO_WARP[key] + out.append((tm, tn, tk, wm, wn, wtm, wtn, wtk)) + return out + + fwd_bwd_data_tiles = _expand(COMMON_TILES) + bwd_weight_tiles = _expand(BWD_WEIGHT_TILES) + + configs: List = [] + + for variant in variants: + if variant == GroupedConvVariant.BACKWARD_WEIGHT: + tile_configs = bwd_weight_tiles + pipelines = [("compv3", "cshuffle"), ("mem", "default")] + two_stage_flags = [False, True] + elif variant == GroupedConvVariant.BACKWARD_DATA: + tile_configs = fwd_bwd_data_tiles + pipelines = [("compv3", "cshuffle"), ("mem", "default")] + two_stage_flags = [False] + else: + tile_configs = fwd_bwd_data_tiles + pipelines = [("compv3", "cshuffle"), ("compv4", "cshuffle")] + two_stage_flags = [False] + + for ndim in ndims: + for pipeline, epilogue in pipelines: + for (tm, tn, tk, wm, wn, wtm, wtn, wtk) in tile_configs: + if pipeline == "compv4" and (tm, tn, tk) not in COMPV4_COMPATIBLE_TILES: + continue + for two_stage in two_stage_flags: + adj_tk = tk * 2 if pipeline == "compv4" else tk + trait = GroupedConvTraitConfig( + pipeline=pipeline, + scheduler="intrawave", + epilogue=epilogue, + double_smem_buffer=(pipeline == "compv4"), + pad_m=True, + pad_n=True, + pad_k=True, + two_stage=two_stage, + ) + if not trait.is_valid(): + continue + config = GroupedConvKernelConfig( + tile=TileConfig( + tile_m=tm, + tile_n=tn, + tile_k=adj_tk, + warp_m=wm, + warp_n=wn, + warp_k=1, + warp_tile_m=wtm, + warp_tile_n=wtn, + warp_tile_k=wtk, + ), + trait=trait, + variant=variant, + ndim_spatial=ndim, + arch=arch, + ) + if config.is_valid_for_arch(): + configs.append(config) + + return configs + + def print_summary(): """Print summary of available tile configurations.""" print("=" * 80) diff --git a/dispatcher/codegen/grouped_conv/grouped_config_rules_full.py b/dispatcher/codegen/grouped_conv/grouped_config_rules_full.py new file mode 100644 index 00000000000..c5621ccd53c --- /dev/null +++ b/dispatcher/codegen/grouped_conv/grouped_config_rules_full.py @@ -0,0 +1,1793 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Full rule set for Grouped Convolution Tile Configurations. +""" + +import logging +import sys +from dataclasses import dataclass +from enum import Enum +from pathlib import Path +from typing import Dict, List, Optional, Set, Tuple, Union + +# --------------------------------------------------------------------------- +# Path setup — allow importing arch_specs_generated from the codegen directory +# --------------------------------------------------------------------------- +_CODEGEN_DIR = Path(__file__).resolve().parent.parent +if str(_CODEGEN_DIR) not in sys.path: + sys.path.insert(0, str(_CODEGEN_DIR)) + +from arch_specs_generated import WARP_TILE_SUPPORTED_COMBINATIONS + +from .tile_math import ( + get_valid_vec_sizes as _tm_get_valid_vec_sizes, + get_valid_wave_warp_pairs as _tm_get_valid_wave_warp_pairs, +) + +# Dtype string to dtype_key mapping (for tile_math filter functions). +DTYPE_TO_DTYPE_KEY: Dict[str, str] = { + "fp16": "fp16_fp16_fp32", + "bf16": "bf16_bf16_fp32", + "fp32": "fp32_fp32_fp32", +} + +# ============================================================================= +# Tile Lists +# ============================================================================= +# +# ndim + concrete-dtype keyed tile tables +# +# Tiles diverge by both ndim (3D is a subset of 2D) and concrete dtype. +# Keyed by (ndim, dtype) where dtype is the concrete "fp16"/"bf16"/"fp32" string. + +_FWD_TILES: Dict[Tuple[int, str], List[Tuple[int, int, int]]] = { + (2, 'bf16'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (16, 256, 64), (32, 16, 64), (32, 64, 32), (32, 64, 64), (32, 128, 32), (32, 128, 64), (32, 256, 64), (64, 16, 16), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 8), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 32, 64), (128, 64, 8), (128, 64, 16), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 128, 64), (128, 256, 32), (224, 256, 64), (256, 16, 64), (256, 32, 64), (256, 64, 8), (256, 128, 32), (256, 224, 64), (256, 256, 32)], + (2, 'fp16'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (16, 256, 64), (32, 16, 64), (32, 64, 32), (32, 64, 64), (32, 128, 32), (32, 128, 64), (32, 256, 64), (64, 16, 16), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 8), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 32, 64), (128, 64, 8), (128, 64, 16), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 128, 64), (128, 256, 32), (224, 256, 64), (256, 16, 64), (256, 32, 64), (256, 64, 8), (256, 128, 32), (256, 224, 64), (256, 256, 32)], + (2, 'fp32'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (32, 16, 64), (32, 64, 16), (32, 64, 64), (32, 128, 16), (32, 128, 64), (64, 16, 16), (64, 16, 64), (64, 32, 16), (64, 32, 64), (64, 64, 16), (64, 64, 32), (64, 128, 16), (128, 16, 64), (128, 32, 16), (128, 32, 64), (128, 64, 16), (128, 128, 16), (128, 128, 32), (128, 128, 64), (128, 192, 16), (128, 256, 16), (256, 128, 16)], + (3, 'bf16'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (16, 256, 64), (32, 16, 64), (32, 64, 32), (32, 64, 64), (32, 128, 32), (32, 128, 64), (32, 256, 64), (64, 16, 16), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 128, 64), (128, 256, 32), (224, 256, 64), (256, 16, 64), (256, 32, 64), (256, 128, 32), (256, 224, 64), (256, 256, 32)], + (3, 'fp16'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (16, 256, 64), (32, 16, 64), (32, 64, 32), (32, 64, 64), (32, 128, 32), (32, 128, 64), (32, 256, 64), (64, 16, 16), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 128, 64), (128, 256, 32), (224, 256, 64), (256, 16, 64), (256, 32, 64), (256, 128, 32), (256, 224, 64), (256, 256, 32)], + (3, 'fp32'): [(16, 16, 64), (16, 16, 128), (16, 32, 64), (16, 64, 64), (16, 128, 64), (32, 16, 64), (32, 64, 16), (32, 64, 64), (32, 128, 16), (32, 128, 64), (64, 16, 16), (64, 16, 64), (64, 32, 16), (64, 32, 64), (64, 64, 16), (64, 64, 32), (64, 128, 16), (128, 16, 64), (128, 32, 16), (128, 32, 64), (128, 64, 16), (128, 128, 16), (128, 128, 32), (128, 128, 64), (128, 192, 16), (128, 256, 16), (256, 128, 16)], +} + +_BWD_DATA_TILES: Dict[Tuple[int, str], List[Tuple[int, int, int]]] = { + (2, 'bf16'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 64, 64), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 256, 32), (256, 32, 64), (256, 128, 32), (256, 128, 64)], + (2, 'fp16'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 64, 64), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 64, 64), (128, 128, 32), (128, 256, 32), (256, 32, 64), (256, 128, 32), (256, 128, 64)], + (2, 'fp32'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 32, 32), (64, 64, 32), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 256, 32), (256, 128, 32)], + (3, 'bf16'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 128, 32), (128, 256, 32), (256, 128, 32)], + (3, 'fp16'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 32, 64), (128, 64, 32), (128, 128, 32), (128, 256, 32), (256, 128, 32)], + (3, 'fp32'): [(16, 64, 32), (32, 64, 32), (32, 128, 32), (64, 16, 16), (64, 16, 32), (64, 32, 32), (64, 64, 32), (64, 128, 32), (128, 32, 16), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 256, 32), (256, 128, 32)], +} + +_BWD_WEIGHT_TILES: Dict[Tuple[int, str], List[Tuple[int, int, int]]] = { + (2, 'bf16'): [(16, 16, 32), (16, 16, 64), (16, 32, 64), (16, 64, 64), (16, 128, 32), (16, 128, 64), (16, 256, 32), (16, 256, 64), (32, 16, 64), (32, 32, 32), (32, 64, 32), (32, 128, 32), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 128, 64), (128, 256, 32), (256, 16, 64), (256, 32, 64), (256, 128, 32), (256, 256, 32)], + (2, 'fp16'): [(16, 16, 32), (16, 16, 64), (16, 32, 64), (16, 64, 64), (16, 128, 32), (16, 128, 64), (16, 256, 32), (16, 256, 64), (32, 16, 64), (32, 32, 32), (32, 64, 32), (32, 128, 32), (64, 16, 64), (64, 32, 32), (64, 32, 64), (64, 64, 32), (64, 64, 64), (64, 128, 32), (64, 128, 64), (128, 16, 64), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 128, 64), (128, 256, 32), (256, 16, 64), (256, 32, 64), (256, 128, 32), (256, 256, 32)], + (2, 'fp32'): [(16, 16, 32), (16, 32, 64), (32, 16, 64), (32, 64, 16), (32, 128, 16), (64, 16, 64), (64, 32, 16), (64, 64, 16), (64, 64, 64), (64, 128, 16), (128, 32, 16), (128, 32, 32), (128, 64, 16), (128, 128, 16), (128, 256, 16), (256, 128, 16)], + (3, 'bf16'): [(16, 16, 32), (16, 16, 64), (16, 32, 64), (16, 64, 64), (16, 128, 32), (16, 128, 64), (16, 256, 32), (16, 256, 64), (32, 16, 64), (32, 32, 32), (32, 64, 32), (32, 128, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 64, 64), (64, 128, 32), (128, 16, 64), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 128, 64), (128, 256, 32), (256, 16, 64), (256, 128, 32), (256, 256, 32)], + (3, 'fp16'): [(16, 16, 32), (16, 16, 64), (16, 32, 64), (16, 64, 64), (16, 128, 32), (16, 128, 64), (16, 256, 32), (16, 256, 64), (32, 16, 64), (32, 32, 32), (32, 64, 32), (32, 128, 32), (64, 16, 64), (64, 32, 32), (64, 64, 32), (64, 64, 64), (64, 128, 32), (128, 16, 64), (128, 32, 32), (128, 64, 32), (128, 128, 32), (128, 128, 64), (128, 256, 32), (256, 16, 64), (256, 128, 32), (256, 256, 32)], + (3, 'fp32'): [(16, 16, 32), (16, 32, 64), (32, 16, 64), (32, 64, 16), (32, 128, 16), (64, 16, 64), (64, 32, 16), (64, 64, 16), (64, 64, 64), (64, 128, 16), (128, 32, 16), (128, 32, 32), (128, 64, 16), (128, 128, 16), (128, 256, 16), (256, 128, 16)], +} + +_TILES_PER_VARIANT: Dict[str, Dict[Tuple[int, str], List[Tuple[int, int, int]]]] = { + "forward": _FWD_TILES, + "bwd_data": _BWD_DATA_TILES, + "bwd_weight": _BWD_WEIGHT_TILES, +} + +# Override the tile sizes for split-image feature. +_SPLIT_IMAGE_TILES: List[Tuple[int, int, int]] = [ + (64, 64, 16), (64, 64, 32), + (256, 128, 16), (256, 128, 32), +] + +# Tiles that support compv4 pipeline +# compv4 has stricter requirements due to double buffering and LDS constraints +COMPV4_COMPATIBLE_TILES: List[Tuple[int, int, int]] = [ + # warp_tile [16,16,16] - all work with compv4 + (16, 64, 64), + (32, 64, 64), + (64, 64, 64), + # warp_tile [16,16,32] - all work with compv4 + (16, 64, 128), + (32, 64, 128), + (64, 64, 128), +] + +def get_tiles_for_variant(variant: str) -> List[Tuple[int, int, int]]: + """Return all tiles available for the given conv variant. + + Returns the union of tiles across all (ndim, dtype) keys, sorted. + """ + all_tiles: set = set() + for tiles in _TILES_PER_VARIANT.get(variant, {}).values(): + all_tiles.update(tiles) + return sorted(all_tiles) + +def get_tiles(variant: str, ndim: int, dtype: str) -> List[Tuple[int, int, int]]: + """Return tiles for a (variant, ndim, concrete-dtype). + + ``dtype`` is the concrete "fp16"/"bf16"/"fp32" string. Returns the exact + tile list observed in the corresponding profiler JSON, or [] if none. + """ + return list(_TILES_PER_VARIANT.get(variant, {}).get((ndim, dtype), [])) + + +# Warp (m, n) shapes excluded from code generation. +# These are possible shapes, but old CK doesn't +# use them. However, they can potentially be useful. +# (4, 64) / (64, 4) are asymmetric MFMA shapes that only ever appear as +# hand-written native instances; warp_tile_k is no longer part of the key. +_EXCLUDED_WARP_SHAPES: Set[Tuple[int, int]] = { + (4, 64), (64, 4), +} + +# ============================================================================= +# Wave (block-to-wave split) strategies +# ============================================================================= +# +# A macro tile is partitioned among the waves of a thread block along M, N and K. +# The split is described by a WaveStrategy that yields the wave *counts* +# (wave_m, wave_n, wave_k); the per-wave tile is then tile / wave_count. +# +# compute_wave_counts() turns a strategy into the (wave_m, wave_n,wave_k) triple, +# and compute_wave_tile() derives the per-wave tile size from the +# macro tile and strategy. + + +class WaveStrategy(Enum): + """Block-to-wave partitioning strategies for grouped convolution configs. + + Each strategy maps to a (wave_m, wave_n, wave_k) wave-count triple. + """ + SINGLE = "single" # (1, 1, 1) — one wave covers the whole tile + SPLIT_M = "split_m" # (2, 1, 1) — 2 waves along M + SPLIT_N = "split_n" # (1, 2, 1) — 2 waves along N + SPLIT_MN = "split_mn" # (2, 2, 1) — 2x2 waves along M and N + SPLIT_M4 = "split_m4" # (4, 1, 1) — 4 waves along M + SPLIT_N4 = "split_n4" # (1, 4, 1) — 4 waves along N + SPLIT_MK = "split_mk" # (2, 1, 2) — 2 waves along M and 2 along K + + +_WAVE_STRATEGY_COUNTS: Dict[WaveStrategy, Tuple[int, int, int]] = { + WaveStrategy.SINGLE: (1, 1, 1), + WaveStrategy.SPLIT_M: (2, 1, 1), + WaveStrategy.SPLIT_N: (1, 2, 1), + WaveStrategy.SPLIT_MN: (2, 2, 1), + WaveStrategy.SPLIT_M4: (4, 1, 1), + WaveStrategy.SPLIT_N4: (1, 4, 1), + WaveStrategy.SPLIT_MK: (2, 1, 2), +} + + +def compute_wave_counts(strategy: WaveStrategy) -> Tuple[int, int, int]: + """Return the (wave_m, wave_n, wave_k) wave-count triple for a strategy.""" + return _WAVE_STRATEGY_COUNTS[strategy] + + +def compute_wave_tile( + strategy: WaveStrategy, tile_m: int, tile_n: int, tile_k: int, +) -> Tuple[int, int, int]: + """Return the per-wave tile (macro tile / wave counts) for a strategy.""" + wm, wn, wk = compute_wave_counts(strategy) + return (tile_m // wm, tile_n // wn, tile_k // wk) + + +# Curated wave strategies as a shared base table plus small per-variant +# override tables. Most tiles use the same strategy across the variants that +# use them (_BASE_TILE_WAVE_STRATEGIES); the handful that genuinely differ are +# captured in _WAVE_STRATEGY_OVERRIDES. Tiles absent from both fall back to +# [WaveStrategy.SINGLE] in get_wave_strategies(). + +_BASE_TILE_WAVE_STRATEGIES: Dict[Tuple[int, int, int], List[WaveStrategy]] = { + (16, 16, 32): [WaveStrategy.SINGLE], + (16, 16, 64): [WaveStrategy.SINGLE], + (16, 16, 128): [WaveStrategy.SINGLE], + (16, 32, 64): [WaveStrategy.SPLIT_N], + (16, 64, 32): [WaveStrategy.SINGLE], + (16, 64, 64): [WaveStrategy.SPLIT_N], + (16, 128, 32): [WaveStrategy.SINGLE], + (16, 128, 64): [WaveStrategy.SPLIT_N], + (16, 256, 32): [WaveStrategy.SINGLE], + (16, 256, 64): [WaveStrategy.SPLIT_N4], + (32, 16, 64): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MK], + (32, 32, 32): [WaveStrategy.SINGLE], + (32, 64, 16): [WaveStrategy.SINGLE], + (32, 64, 32): [WaveStrategy.SINGLE], + (32, 64, 64): [WaveStrategy.SPLIT_N], + (32, 128, 16): [WaveStrategy.SPLIT_N], + (32, 128, 32): [WaveStrategy.SPLIT_N], + (32, 128, 64): [WaveStrategy.SPLIT_N], + (32, 256, 64): [WaveStrategy.SPLIT_N4], + (64, 16, 16): [WaveStrategy.SINGLE], + (64, 16, 32): [WaveStrategy.SINGLE, WaveStrategy.SPLIT_M4], + (64, 16, 64): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MK], + (64, 32, 16): [WaveStrategy.SINGLE], + (64, 32, 32): [WaveStrategy.SINGLE], + (64, 32, 64): [WaveStrategy.SPLIT_M], + (64, 64, 8): [WaveStrategy.SPLIT_M], + (64, 64, 16): [WaveStrategy.SINGLE], + (64, 64, 32): [WaveStrategy.SINGLE], + (64, 64, 64): [WaveStrategy.SPLIT_MN], + (64, 128, 16): [WaveStrategy.SPLIT_N, WaveStrategy.SPLIT_MN], + (64, 128, 32): [WaveStrategy.SPLIT_N, WaveStrategy.SPLIT_MN], + (64, 128, 64): [WaveStrategy.SPLIT_MN], + (128, 16, 64): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MK], + (128, 32, 16): [WaveStrategy.SPLIT_M], + (128, 32, 32): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MK], + (128, 32, 64): [WaveStrategy.SPLIT_M], + (128, 64, 8): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MN], + (128, 64, 16): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MN], + (128, 64, 32): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_MN], + (128, 64, 64): [WaveStrategy.SPLIT_MN], + (128, 128, 16): [WaveStrategy.SPLIT_N, WaveStrategy.SPLIT_MN], + (128, 128, 32): [WaveStrategy.SPLIT_N, WaveStrategy.SPLIT_MN], + (128, 128, 64): [WaveStrategy.SPLIT_MN], + (128, 192, 16): [WaveStrategy.SPLIT_MN], + (128, 256, 16): [WaveStrategy.SPLIT_MN], + (128, 256, 32): [WaveStrategy.SPLIT_MN], + (224, 256, 64): [WaveStrategy.SPLIT_MN], + (256, 16, 64): [WaveStrategy.SPLIT_M4], + (256, 32, 64): [WaveStrategy.SPLIT_M4], + (256, 64, 8): [WaveStrategy.SPLIT_MN], + (256, 128, 16): [WaveStrategy.SPLIT_MN], + (256, 128, 32): [WaveStrategy.SPLIT_MN], + (256, 128, 64): [WaveStrategy.SPLIT_MN], + (256, 224, 64): [WaveStrategy.SPLIT_MN], + (256, 256, 32): [WaveStrategy.SPLIT_MN], +} + +# Per-variant deviations from _BASE_TILE_WAVE_STRATEGIES. An entry here +# fully replaces the base strategy list for that (variant, tile). Only the +# tiles where a variant genuinely differs appear; bwd_data is the main +# deviator (it prefers SPLIT_M4 over SPLIT_M for several skinny-N tiles). +_WAVE_STRATEGY_OVERRIDES: Dict[str, Dict[Tuple[int, int, int], List[WaveStrategy]]] = { + "forward": { + (64, 64, 32): [WaveStrategy.SINGLE, WaveStrategy.SPLIT_MN], + }, + "bwd_data": { + (64, 16, 16): [WaveStrategy.SPLIT_M4], + (64, 16, 64): [WaveStrategy.SPLIT_M4], + (128, 32, 16): [WaveStrategy.SPLIT_M4], + (128, 32, 32): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_M4], + (128, 32, 64): [WaveStrategy.SPLIT_M4], + }, + "bwd_weight": { + (16, 64, 64): [WaveStrategy.SPLIT_N, WaveStrategy.SPLIT_N4], + (32, 128, 32): [WaveStrategy.SINGLE, WaveStrategy.SPLIT_N], + (64, 32, 64): [WaveStrategy.SPLIT_M, WaveStrategy.SPLIT_N], + (128, 32, 32): [WaveStrategy.SINGLE, WaveStrategy.SPLIT_M], + }, +} + +# Borderline (variant, tile, wave) pairs whose warp (m, n) selection deviates +# from _default_warp_mn(). These are the per-wave-tile == 32x32 cases, where the +# reference data is not consistent with the size threshold: +# - forward (64, 64, 32)/(2,2,1) uses 16x16 despite a 32x32 per-wave tile; +# - forward (256, 256, 32)/(2,2,1) and bwd_weight (64, 64, 64)/(2,2,1) use +# BOTH 16x16 and 32x32. +_WARP_MN_EXCEPTIONS: Dict[ + Tuple[str, Tuple[int, int, int], Tuple[int, int, int]], List[Tuple[int, int]] +] = { + ("forward", (64, 64, 32), (2, 2, 1)): [(16, 16)], + ("forward", (64, 64, 64), (2, 2, 1)): [(16, 16), (32, 32)], + ("forward", (128, 128, 64), (2, 2, 1)): [(16, 16), (32, 32)], + ("forward", (256, 256, 32), (2, 2, 1)): [(16, 16), (32, 32)], + ("bwd_weight", (64, 64, 64), (2, 2, 1)): [(16, 16), (32, 32)], + # bwd_data wavelet tiles: wavelet instances use a 16x16 MFMA + # warp tile (warp_tile_k=32 for half) even though the per-wave tile is 32x32. + ("bwd_data", (64, 64, 64), (2, 2, 1)): [(16, 16)], + ("bwd_data", (128, 64, 64), (2, 2, 1)): [(16, 16)], + ("bwd_data", (256, 32, 64), (4, 1, 1)): [(16, 16)], + ("bwd_data", (256, 128, 32), (2, 2, 1)): [(16, 16), (32, 32)], + ("bwd_data", (256, 128, 64), (2, 2, 1)): [(16, 16)], +} + + +def _default_warp_mn(tile_m: int, tile_n: int, wave_m: int, wave_n: int) -> Tuple[int, int]: + """Return the default warp (m, n) MFMA shape for a (tile, wave). + + A 32x32 warp tile is used when the per-wave tile (tile / wave) is at least + 32 and a multiple of 32 in both M and N; otherwise a 16x16 warp tile is used. + Borderline cases are overridden via _WARP_MN_EXCEPTIONS. + """ + pm, pn = tile_m // wave_m, tile_n // wave_n + if pm >= 32 and pn >= 32 and pm % 32 == 0 and pn % 32 == 0: + return (32, 32) + return (16, 16) + + +def get_warp_mn_candidates( + tile_m: int, tile_n: int, tile_k: int, + wave_m: int, wave_n: int, wave_k: int, + variant: str = "forward", +) -> List[Tuple[int, int]]: + """Return the curated warp (m, n) candidates for a (variant, tile, wave). + + Uses _WARP_MN_EXCEPTIONS when present, otherwise _default_warp_mn(). + """ + key = (variant, (tile_m, tile_n, tile_k), (wave_m, wave_n, wave_k)) + if key in _WARP_MN_EXCEPTIONS: + return list(_WARP_MN_EXCEPTIONS[key]) + return [_default_warp_mn(tile_m, tile_n, wave_m, wave_n)] + + +def get_wave_strategies( + tile_m: int, tile_n: int, tile_k: int, variant: str, +) -> List[WaveStrategy]: + """Return the curated WaveStrategy list for a (variant, macro tile). + + A per-variant override (_WAVE_STRATEGY_OVERRIDES) takes precedence over the + shared base table (_BASE_TILE_WAVE_STRATEGIES). Tiles absent from both fall + back to [WaveStrategy.SINGLE]. + """ + tile = (tile_m, tile_n, tile_k) + override = _WAVE_STRATEGY_OVERRIDES.get(variant, {}).get(tile) + if override is not None: + return list(override) + entry = _BASE_TILE_WAVE_STRATEGIES.get(tile) + if entry is None: + logging.warning( + "No curated wave strategies for variant=%s tile=(%d,%d,%d); " + "falling back to [WaveStrategy.SINGLE]", + variant, tile_m, tile_n, tile_k, + ) + return [WaveStrategy.SINGLE] + return list(entry) + + +def get_wave_configs( + tile_m: int, tile_n: int, tile_k: int, variant: str, +) -> List[Tuple[int, int, int]]: + """Return wave-count configs for a tile+variant. + + Each curated WaveStrategy is turned into its (wave_m, wave_n, wave_k) triple. + Falls back to generic [(1, 1, 1)] for unknown tiles. + """ + return [ + compute_wave_counts(strategy) + for strategy in get_wave_strategies(tile_m, tile_n, tile_k, variant) + ] + + +def get_all_valid_vector_sizes( + tile_m: int, tile_n: int, tile_k: int, + wave_m: int, wave_n: int, wave_k: int, + wt_m: int, wt_n: int, wt_k: int, + dtype_key: str, +) -> Set[Tuple[int, int, int]]: + """Return the set of (vec_a, vec_b, vec_c) triples tile_math considers valid. + + Thin wrapper around tile_math.get_valid_vec_sizes for use as a hard gate: + curated/strategy vec triples are kept only if present in this set. + """ + return set(_tm_get_valid_vec_sizes( + tile_m, tile_n, tile_k, + wave_m, wave_n, wave_k, + wt_m, wt_n, wt_k, + dtype_key, + )) + + +def get_k_mfma(dtype_key: str, m_per_xdl: int) -> int: + """Return the MFMA K dimension for a square warp tile (m_per_xdl == n_per_xdl). + + Single authority mirroring generate_instances.get_k_mfma (the CK Builder). + Arch-independent (reflects the current CDNA4 MFMA shapes): + - half (fp16/bf16): 32x32 -> 16, 16x16 -> 32 + - float (fp32): 32x32 -> 2, 16x16 -> 4 + """ + if dtype_key.startswith("fp32"): + return 2 if m_per_xdl == 32 else 4 + return 16 if m_per_xdl == 32 else 32 + + +def compute_warp_tile_k( + dtype_key: str, warp_tile_m: int, tile_k: int, streamk: bool = False, + use_legacy: bool = False, +) -> int: + """Derive warp_tile_k (the MFMA K) for a config. + + Mirrors the CK Builder formula (generate_instances.py) + k_per_xdl = min(max(k1, get_k_mfma(dtype, m_per_xdl, n_per_xdl)), k_per_block) + where k1 is the per-instance AK1. For half precision get_k_mfma dominates k1, + so warp_tile_k = min(get_k_mfma, tile_k). For fp32, k1 dominates; the reference + instances use k1 = 4 when tile_k <= 16 else 8. + + Hand-written StreamK *native* instances bypass get_k_mfma and carry the legacy + (gfx942) warp_tile_k verbatim: half 32x32 -> 8, 16x16 -> 16, clamped to tile_k + (fp32 native instances clamp to tile_k // 4 instead). + + ``use_legacy`` applies the same legacy formula for non-streamk contexts that + nevertheless use the gfx942 warp_tile_k convention (e.g. some wavelet bwd_weight + instances). + """ + if streamk or use_legacy: + legacy_half_k = 8 if warp_tile_m == 32 else 16 + cap = tile_k // 4 if dtype_key.startswith("fp32") else tile_k + return min(legacy_half_k, cap) + k1 = 4 if tile_k <= 16 else 8 + return min(max(k1, get_k_mfma(dtype_key, warp_tile_m)), tile_k) + + +def get_warp_configs_for_tile_and_wave( + tile_m: int, tile_n: int, tile_k: int, + wave_m: int, wave_n: int, wave_k: int, + dtype_key: str, arch: str = "gfx942", variant: str = "forward", +) -> List[Tuple[int, int]]: + """Return curated (warp_tile_m, warp_tile_n) shapes for a (variant, wave). + + The (warp_tile_m, warp_tile_n) shape is derived by ``get_warp_mn_candidates`` + (a size-threshold function plus a small exception table); warp_tile_k is + derived later by ``compute_warp_tile_k``. + + A (warp_tile_m, warp_tile_n) shape is kept only when it: + - is arch/dtype-supported (WARP_TILE_SUPPORTED_COMBINATIONS[arch][dtype_key]), + - is not in _EXCLUDED_WARP_SHAPES, + - divides the macro tile: tile_m % (wave_m*warp_tile_m) == 0 and + tile_n % (wave_n*warp_tile_n) == 0. + """ + tile = (tile_m, tile_n, tile_k) + wave = (wave_m, wave_n, wave_k) + curated_waves = { + compute_wave_counts(strategy) + for strategy in get_wave_strategies(tile_m, tile_n, tile_k, variant) + } + + if wave not in curated_waves: + raise ValueError(f"No curated warp tiles for variant={variant} tile={tile} wave={wave}") + curated = get_warp_mn_candidates(tile_m, tile_n, tile_k, wave_m, wave_n, wave_k, variant) + + supported_mn = { + (wt[0], wt[1]) + for wt in WARP_TILE_SUPPORTED_COMBINATIONS.get(arch, {}).get(dtype_key, []) + } + + result: List[Tuple[int, int]] = [] + seen: Set[Tuple[int, int]] = set() + for wt in curated: + mn = (wt[0], wt[1]) + if mn in _EXCLUDED_WARP_SHAPES: + continue + if mn not in supported_mn: + continue + if tile_m % (wave_m * mn[0]) != 0 or tile_n % (wave_n * mn[1]) != 0: + continue + if mn not in seen: + seen.add(mn) + result.append(mn) + return result + + +def get_wave_warp_pairs( + tile_m: int, tile_n: int, tile_k: int, + variant: str, dtype_key: str, arch: str = "gfx942", +) -> List[Tuple[Tuple[int, int, int], Tuple[int, int]]]: + """Return (wave, warp_tile_mn) pairs: curated waves x curated warp (m, n) shapes. + + Combines curated wave configs with the curated per-variant wave->warp map + (both from profiler JSON), filtered by arch/dtype support and divisibility. + warp_tile_k is not part of the pair; it is derived later via + ``compute_warp_tile_k``. + + The curated pairs are gated against _tm_get_valid_wave_warp_pairs (imported from + tile_math.py) on the (wave, warp_m, warp_n) granularity, and any curated pair + rejected is dropped with a warning. + """ + tm_pairs = _tm_get_valid_wave_warp_pairs(tile_m, tile_n, tile_k, dtype_key, arch) + tm_pairs_mn = {(wave, (wt[0], wt[1])) for (wave, wt) in tm_pairs} + result = [] + for wave in get_wave_configs(tile_m, tile_n, tile_k, variant): + for mn in get_warp_configs_for_tile_and_wave( + tile_m, tile_n, tile_k, *wave, dtype_key, arch, variant, + ): + if (wave, mn) not in tm_pairs_mn: + logging.warning( + "Dropping curated wave/warp pair %s rejected by tile_math: " + "tile=(%d,%d,%d) variant=%s dtype_key=%s", + (wave, mn), tile_m, tile_n, tile_k, variant, dtype_key, + ) + continue + result.append((wave, mn)) + + # If no curated pairs survived (e.g. for architectures whose supported wave + # combos don't match the CDNA-derived curated strategies, such as rdna4/gfx1250), + # fall back to all tile_math-valid pairs so those arches still get kernels. + if not result and tm_pairs: + for wave, wt in tm_pairs: + result.append((wave, (wt[0], wt[1]))) + + return result + + +# ============================================================================= +# Vector Size Strategies (tile + dtype based, wave/warp independent) +# ============================================================================= +# +# Convolution GEMM tensors vectorize along different logical dimensions: +# Forward: vec_a, vec_b -> C (channels), vec_c -> K (output channels) +# BWD data: vec_a -> K, vec_b, vec_c -> C +# BWD weight: vec_a -> K, vec_b, vec_c -> C +# +# Each strategy produces one (vec_a, vec_b, vec_c) triple from the dtype-determined max. + + +class VecStrategy(Enum): + """Vectorization strategies for grouped convolution GEMM configs. + + Each strategy produces a single (vec_a, vec_b, vec_c) triple derived + from the dtype-determined maximum vector sizes. + """ + GENERIC = "generic" # (1, 1, 1) — minimum fallback + UNIFORM_MAX = "uniform_max" # (max, max, max) — balanced throughput + MAX_AB_HALF_C = "max_ab_half_c" # (max, max, max/2) — fwd (8,8,4) pattern + MAX_A_MIN_BC = "max_a_min_bc" # (max, 1, 1) — bwd (4,1,1)/(8,1,1) pattern + MIN_A_MAX_BC = "min_a_max_bc" # (1, max, max) — bwd (1,4,4)/(1,8,8) pattern + HALF_UNIFORM = "half_uniform" # (max/2, max/2, max/2) — (2,2,2) pattern + QUARTER_AB_MAX_C = "quarter_ab_max_c" # (max/2, max/2, max) — fwd (4,4,8)/(1,1,8) pattern + MAX_AB_QUARTER_C = "max_ab_quarter_c" # (max, max, max/4) — half (8,8,2), fp32 (4,4,1) + MAX_A_QUARTER_BC = "max_a_quarter_bc" # (max, max/4, max/4) — half (8,2,2) + MIN_AB_MAX_C = "min_ab_max_c" # (1, 1, max) — half (1,1,8), fp32 (1,1,4) + MAX_A_HALF_BC = "max_a_half_bc" # (max, max/2, max/2) — fp32 (4,2,2) + MAX_AB_MIN_C = "max_ab_min_c" # (max, max, 1) — half (8,8,1) + MIN_AB_QUARTER_C = "min_ab_quarter_c" # (1, 1, max/4) — half (1,1,2) + MIN_A_MAX_B_HALF_C = "min_a_max_b_half_c" # (1, max, max/2) — half (1,8,4), fp32 (1,4,2) - TODO: Is this valid? + HALF_A_MAX_BC = "half_a_max_bc" # (max/2, max, max) — fp32 (2,4,4) + HALF_A_MIN_BC = "half_a_min_bc" # (max/2, 1, 1) — fp32 (2,1,1) + + +def _max_vec(dtype_class: str) -> int: + """Return the maximum vector width for a dtype class.""" + if dtype_class == "float": + return 4 + elif dtype_class in ("half", "fp16", "bf16"): + return 8 + else: + raise ValueError(f"Unknown dtype class: {dtype_class}") + + +def compute_vector_size( + strategy: VecStrategy, + dtype_class: str, +) -> Tuple[int, int, int]: + """Compute a (vec_a, vec_b, vec_c) triple for a given strategy and dtype. + + Args: + strategy: Which vectorization pattern to use. + dtype_class: "float" (fp32) or "half" (fp16/bf16). + + Returns: + A single (vec_a, vec_b, vec_c) triple. + """ + m = _max_vec(dtype_class) + h = max(1, m // 2) + q = max(1, m // 4) + + if strategy == VecStrategy.GENERIC: + return (1, 1, 1) + elif strategy == VecStrategy.UNIFORM_MAX: + return (m, m, m) + elif strategy == VecStrategy.MAX_AB_HALF_C: + return (m, m, h) + elif strategy == VecStrategy.MAX_A_MIN_BC: + return (m, 1, 1) + elif strategy == VecStrategy.MIN_A_MAX_BC: + return (1, m, m) + elif strategy == VecStrategy.HALF_UNIFORM: + return (h, h, h) + elif strategy == VecStrategy.QUARTER_AB_MAX_C: + return (h, h, m) + elif strategy == VecStrategy.MAX_AB_QUARTER_C: + return (m, m, q) + elif strategy == VecStrategy.MAX_A_QUARTER_BC: + return (m, q, q) + elif strategy == VecStrategy.MIN_AB_MAX_C: + return (1, 1, m) + elif strategy == VecStrategy.MAX_A_HALF_BC: + return (m, h, h) + elif strategy == VecStrategy.MAX_AB_MIN_C: + return (m, m, 1) + elif strategy == VecStrategy.MIN_AB_QUARTER_C: + return (1, 1, q) + elif strategy == VecStrategy.MIN_A_MAX_B_HALF_C: + return (1, m, h) + elif strategy == VecStrategy.HALF_A_MAX_BC: + return (h, m, m) + elif strategy == VecStrategy.HALF_A_MIN_BC: + return (h, 1, 1) + else: + return (1, 1, 1) + + +# ============================================================================= +# Per-Tile VecStrategy Tables +# ============================================================================= +# Per-variant mapping: tile -> {dtype_class -> list[VecStrategy]}. +# Derived per (variant, tile, dtype_class) via greedy set-cover over VecStrategy. +# Tiles not in the table fall back to [GENERIC] (dtype-independent). +# + +_FWD_TILE_STRATEGIES: Dict[Tuple[int, int, int], Dict[str, List[VecStrategy]]] = { + (16, 16, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (16, 16, 128): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (16, 32, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (16, 64, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (16, 128, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (16, 256, 64): {"half": [VecStrategy.MAX_AB_HALF_C]}, + (32, 16, 64): {"half": [VecStrategy.MAX_AB_QUARTER_C], "float": [VecStrategy.MAX_AB_HALF_C]}, + (32, 64, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (32, 64, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (32, 64, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (32, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (32, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (32, 128, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (32, 256, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (64, 16, 16): {"half": [VecStrategy.HALF_A_MIN_BC], "float": [VecStrategy.MAX_A_MIN_BC]}, + (64, 16, 64): {"half": [VecStrategy.MAX_AB_QUARTER_C], "float": [VecStrategy.MAX_AB_HALF_C]}, + (64, 32, 16): {"float": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_AB_QUARTER_C]}, + (64, 32, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C, VecStrategy.MAX_AB_MIN_C]}, + (64, 32, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (64, 64, 8): {"half": [VecStrategy.MIN_AB_MAX_C]}, + (64, 64, 16): {"float": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX]}, + (64, 64, 32): {"half": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX, VecStrategy.HALF_UNIFORM, VecStrategy.MIN_AB_MAX_C], "float": [VecStrategy.UNIFORM_MAX]}, + (64, 64, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (64, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (64, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (64, 128, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 16, 64): {"half": [VecStrategy.MAX_AB_QUARTER_C], "float": [VecStrategy.MAX_AB_HALF_C]}, + (128, 32, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 32, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.HALF_UNIFORM, VecStrategy.MIN_AB_MAX_C]}, + (128, 32, 64): {"half": [VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.UNIFORM_MAX]}, + (128, 64, 8): {"half": [VecStrategy.MIN_AB_MAX_C]}, + (128, 64, 16): {"half": [VecStrategy.MIN_AB_MAX_C], "float": [VecStrategy.UNIFORM_MAX]}, + (128, 64, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (128, 64, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 128, 16): {"float": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (128, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (128, 128, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 192, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 256, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 256, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (224, 256, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (256, 16, 64): {"half": [VecStrategy.MAX_AB_QUARTER_C]}, + (256, 32, 64): {"half": [VecStrategy.MAX_AB_HALF_C]}, + (256, 64, 8): {"half": [VecStrategy.MIN_AB_MAX_C]}, + (256, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (256, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_AB_MAX_C]}, + (256, 224, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (256, 256, 32): {"half": [VecStrategy.UNIFORM_MAX]}, +} + + +_BWD_DATA_TILE_STRATEGIES: Dict[Tuple[int, int, int], Dict[str, List[VecStrategy]]] = { + (16, 64, 32): {"half": [VecStrategy.MAX_AB_HALF_C, VecStrategy.MAX_A_MIN_BC, VecStrategy.MIN_A_MAX_B_HALF_C], "float": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC, VecStrategy.MIN_A_MAX_BC]}, + (32, 64, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (32, 128, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (64, 16, 16): {"half": [VecStrategy.HALF_A_MIN_BC], "float": [VecStrategy.MAX_A_MIN_BC]}, + (64, 16, 32): {"half": [VecStrategy.MAX_AB_HALF_C, VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_QUARTER_BC, VecStrategy.MIN_A_MAX_B_HALF_C], "float": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC, VecStrategy.MIN_A_MAX_BC]}, + (64, 32, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (64, 64, 32): {"half": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX], "float": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX]}, + (64, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_A_MAX_BC], "float": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_A_MAX_BC]}, + (128, 32, 16): {"half": [VecStrategy.HALF_A_MIN_BC], "float": [VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_HALF_BC]}, + (128, 32, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_QUARTER_BC], "float": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC]}, + (128, 64, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (128, 128, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (128, 256, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, + (256, 128, 32): {"half": [VecStrategy.UNIFORM_MAX], "float": [VecStrategy.UNIFORM_MAX]}, +} + + +_BWD_WEIGHT_TILE_STRATEGIES: Dict[Tuple[int, int, int], Dict[str, List[VecStrategy]]] = { + (16, 16, 32): {"half": [VecStrategy.GENERIC, VecStrategy.MIN_AB_QUARTER_C]}, + (16, 16, 64): {"half": [VecStrategy.GENERIC, VecStrategy.HALF_UNIFORM, VecStrategy.HALF_A_MIN_BC]}, + (16, 32, 64): {"half": [VecStrategy.GENERIC, VecStrategy.MAX_AB_HALF_C], "float": [VecStrategy.HALF_A_MAX_BC]}, + (16, 64, 64): {"half": [VecStrategy.GENERIC, VecStrategy.MAX_AB_HALF_C, VecStrategy.MIN_A_MAX_B_HALF_C]}, + (16, 128, 64): {"half": [VecStrategy.MIN_A_MAX_B_HALF_C]}, + (16, 256, 32): {"half": [VecStrategy.MAX_AB_MIN_C]}, + (16, 256, 64): {"half": [VecStrategy.MIN_A_MAX_B_HALF_C]}, + (32, 16, 64): {"half": [VecStrategy.GENERIC, VecStrategy.HALF_A_MIN_BC], "float": [VecStrategy.MAX_A_HALF_BC]}, + (32, 64, 16): {"float": [VecStrategy.UNIFORM_MAX, VecStrategy.MIN_A_MAX_BC]}, + (32, 64, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (32, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (32, 128, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_AB_QUARTER_C, VecStrategy.MAX_AB_MIN_C]}, + (64, 16, 64): {"half": [VecStrategy.GENERIC, VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_QUARTER_BC]}, + (64, 32, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (64, 32, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (64, 64, 16): {"float": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX]}, + (64, 64, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (64, 64, 64): {"half": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX, VecStrategy.MAX_AB_HALF_C, VecStrategy.MAX_AB_QUARTER_C, VecStrategy.HALF_A_MIN_BC], "float": [VecStrategy.GENERIC, VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC, VecStrategy.MIN_A_MAX_BC]}, + (64, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (64, 128, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (64, 128, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 16, 64): {"half": [VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_QUARTER_BC]}, + (128, 32, 16): {"float": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_A_MIN_BC]}, + (128, 32, 32): {"half": [VecStrategy.UNIFORM_MAX, VecStrategy.MAX_AB_QUARTER_C, VecStrategy.MAX_A_QUARTER_BC, VecStrategy.MAX_AB_MIN_C]}, + (128, 64, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 64, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 128, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (128, 128, 64): {"half": [VecStrategy.MAX_AB_HALF_C, VecStrategy.HALF_UNIFORM]}, + (128, 256, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (128, 256, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (256, 16, 64): {"half": [VecStrategy.MAX_A_MIN_BC, VecStrategy.MAX_A_QUARTER_BC]}, + (256, 32, 64): {"half": [VecStrategy.UNIFORM_MAX]}, + (256, 128, 16): {"float": [VecStrategy.UNIFORM_MAX]}, + (256, 128, 32): {"half": [VecStrategy.UNIFORM_MAX]}, + (256, 256, 32): {"half": [VecStrategy.MAX_AB_HALF_C, VecStrategy.HALF_UNIFORM]}, +} + + +def get_vec_strategies( + tile_m: int, tile_n: int, tile_k: int, variant: str, + dtype_class: Optional[str] = None, +) -> List[VecStrategy]: + """Return curated VecStrategy list for a tile+variant (from profiler JSON). + + Tables are dtype-class-keyed. If ``dtype_class`` ("half"/"float") is given, + return only that dtype's strategies. If None, return the union across dtype + classes (preserving order, deduplicated). Falls back to [GENERIC] for tiles + not in the table. + """ + table = { + "forward": _FWD_TILE_STRATEGIES, + "bwd_data": _BWD_DATA_TILE_STRATEGIES, + "bwd_weight": _BWD_WEIGHT_TILE_STRATEGIES, + }.get(variant, {}) + entry = table.get((tile_m, tile_n, tile_k)) + if entry is None: + return [VecStrategy.GENERIC] + if dtype_class is not None: + return entry.get(dtype_class, []) + # Union across dtype classes, deduplicated, order-preserving. + out: List[VecStrategy] = [] + seen = set() + for dc in ("half", "float"): + for s in entry.get(dc, []): + if s not in seen: + seen.add(s) + out.append(s) + return out + + +# ============================================================================= +# Explicit Per-Tile Vec Overrides (don't fit any strategy family) +# ============================================================================= +# A small set of (variant, tile) -> extra vec triples used by the JSON profiler +# configs that no VecStrategy formula produces. These are added on top of the +# strategy-derived vecs (superset semantics). Includes bwd_data's vec_a=16 +# (A vectorizes along K, beyond the dtype-class max) and a handful of +# idiosyncratic per-tile triples. + +_EXTRA_VEC_TRIPLES: Dict[str, Dict[Tuple[int, int, int], Dict[str, List[Tuple[int, int, int]]]]] = { + "forward": { + (32, 64, 64): {"float": [(4, 4, 8)]}, + (32, 128, 64): {"float": [(4, 4, 8)]}, + (64, 64, 32): {"half": [(1, 2, 1), (2, 1, 2)], "float": [(1, 2, 1), (2, 1, 2)]}, + (64, 64, 64): {"half": [(8, 8, 1), (8, 8, 4)]}, + (128, 128, 32): {"float": [(4, 4, 8)]}, + (128, 128, 64): {"half": [(8, 8, 1), (8, 8, 8)], "float": [(4, 4, 8)]}, + (256, 128, 32): {"half": [(2, 2, 2)]}, + }, + "bwd_data": { + (64, 16, 32): {"float": [(8, 1, 1), (8, 2, 2)]}, + (64, 16, 64): {"half": [(16, 1, 1), (16, 2, 2)]}, + (64, 64, 64): {"half": [(8, 8, 4), (8, 8, 8)]}, + (128, 32, 16): {"half": [(4, 2, 2)]}, + (128, 32, 32): {"float": [(8, 1, 1), (8, 2, 2)]}, + (128, 32, 64): {"half": [(16, 1, 1), (16, 2, 2), (16, 8, 8)]}, + (128, 64, 64): {"half": [(8, 8, 8)]}, + (128, 256, 32): {"half": [(8, 4, 8)]}, + (256, 32, 64): {"half": [(8, 8, 8)]}, + (256, 128, 32): {"half": [(4, 8, 8)]}, + (256, 128, 64): {"half": [(8, 8, 4), (8, 8, 8)]}, + }, + "bwd_weight": { + (16, 16, 32): {"float": [(1, 1, 2)]}, + (16, 16, 64): {"half": [(1, 4, 4)]}, + (16, 32, 64): {"half": [(1, 2, 4), (1, 4, 4), (2, 1, 1), (2, 2, 4), (2, 4, 4)]}, + (16, 64, 64): {"half": [(2, 1, 1), (2, 8, 4), (4, 8, 8)]}, + (16, 128, 32): {"half": [(4, 4, 1)]}, + (16, 128, 64): {"half": [(2, 8, 4)]}, + (16, 256, 64): {"half": [(2, 8, 4)]}, + (32, 16, 64): {"half": [(1, 2, 2), (2, 1, 1), (2, 2, 2), (4, 2, 2)]}, + (32, 32, 32): {"half": [(2, 2, 1), (2, 2, 2)]}, + (32, 64, 32): {"half": [(2, 2, 1), (2, 8, 8), (4, 4, 1), (4, 4, 2)]}, + (64, 16, 64): {"half": [(1, 2, 2)], "float": [(8, 2, 2)]}, + (64, 32, 32): {"half": [(4, 4, 1), (4, 4, 2)]}, + (64, 32, 64): {"half": [(8, 8, 8)]}, + (64, 64, 32): {"half": [(2, 2, 2)]}, + (64, 64, 64): {"half": [(1, 4, 4), (2, 2, 2), (2, 2, 4), (4, 8, 8)]}, + (128, 32, 32): {"float": [(8, 2, 2)]}, + }, +} + + +def get_extra_vec_triples( + tile_m: int, tile_n: int, tile_k: int, variant: str, + dtype_class: Optional[str] = None, +) -> List[Tuple[int, int, int]]: + """Return explicit per-tile vec triples not produced by any VecStrategy. + + Dtype-class-keyed. If ``dtype_class`` is given, return only that + dtype's extra triples; if None, return the union across dtype classes. + Empty for tiles whose vecs are fully covered by strategies. + """ + per_dc = _EXTRA_VEC_TRIPLES.get(variant, {}).get((tile_m, tile_n, tile_k)) + if not per_dc: + return [] + if dtype_class is not None: + return per_dc.get(dtype_class, []) + out: List[Tuple[int, int, int]] = [] + seen = set() + for dc in ("half", "float"): + for tr in per_dc.get(dc, []): + if tr not in seen: + seen.add(tr) + out.append(tr) + return out + + +# bwd_weight wavelet tiles that use the legacy gfx942 warp_tile_k formula +# (same as streamk native instances) rather than the new get_k_mfma formula. +# Derived from the CK Builder conf files: these tiles carry warp_tile_k=16 for +# half (warp_tile_m=16) instead of the new formula value of 32. +_BWD_WEIGHT_WAVELET_LEGACY_WARP_K_TILES: Set[Tuple[int, int, int]] = { + (64, 32, 64), + (64, 64, 64), +} + +# ============================================================================= +# Pipeline / Scheduler Rules (per-tile, replaces cross-product) +# ============================================================================= + +_COMPV4_SET: Set[Tuple[int, int, int]] = set(COMPV4_COMPATIBLE_TILES) + + +# ============================================================================= +# Curated per-tile (pipeline, scheduler) map +# ============================================================================= +# Per-variant mapping: tile -> list of (pipeline, scheduler). +# Preferred over the rule-based computation below; tiles absent here fall back to +# the shape-based rules. + +_FWD_TILE_PIPELINES: Dict[Tuple[int, int, int], List[Tuple[str, str]]] = { + (16, 16, 64): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 16, 128): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 32, 64): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 64, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (16, 128, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (16, 256, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (32, 16, 64): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (32, 64, 16): [('compv1', 'intrawave')], + (32, 64, 32): [('compv1', 'intrawave')], + (32, 64, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (32, 128, 16): [('compv1', 'intrawave')], + (32, 128, 32): [('compv1', 'intrawave')], + (32, 128, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (32, 256, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (64, 16, 16): [('compv1', 'intrawave')], + (64, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (64, 32, 16): [('compv1', 'intrawave')], + (64, 32, 32): [('compv1', 'intrawave')], + (64, 32, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (64, 64, 8): [('compv1', 'intrawave')], + (64, 64, 16): [('compv1', 'intrawave')], + (64, 64, 32): [('compv1', 'intrawave')], + (64, 64, 64): [('compv3', 'intrawave')], + (64, 128, 16): [('compv1', 'intrawave')], + (64, 128, 32): [('compv1', 'intrawave')], + (64, 128, 64): [('compv3', 'intrawave')], + (128, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (128, 32, 16): [('compv1', 'intrawave')], + (128, 32, 32): [('compv1', 'interwave'), ('compv1', 'intrawave')], + (128, 32, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (128, 64, 8): [('compv1', 'intrawave')], + (128, 64, 16): [('compv1', 'intrawave')], + (128, 64, 32): [('compv1', 'intrawave')], + (128, 64, 64): [('compv3', 'intrawave')], + (128, 128, 16): [('compv1', 'intrawave')], + (128, 128, 32): [('compv1', 'intrawave'), ('compv4', 'intrawave')], + (128, 128, 64): [('compv1', 'interwave'), ('compv3', 'intrawave'), ('compv4', 'intrawave'), ('compv6', 'intrawave')], + (128, 192, 16): [('compv1', 'intrawave')], + (128, 256, 16): [('compv1', 'intrawave')], + (128, 256, 32): [('compv1', 'interwave'), ('compv1', 'intrawave')], + (224, 256, 64): [('compv3', 'intrawave')], + (256, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (256, 32, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (256, 64, 8): [('compv1', 'intrawave')], + (256, 128, 16): [('compv1', 'intrawave')], + (256, 128, 32): [('compv1', 'interwave'), ('compv1', 'intrawave')], + (256, 224, 64): [('compv3', 'intrawave')], + (256, 256, 32): [('compv3', 'intrawave'), ('compv4', 'intrawave'), ('compv6', 'intrawave')], +} + +_BWD_DATA_TILE_PIPELINES: Dict[Tuple[int, int, int], List[Tuple[str, str]]] = { + (16, 64, 32): [('compv1', 'intrawave')], + (32, 64, 32): [('compv1', 'intrawave')], + (32, 128, 32): [('compv1', 'intrawave')], + (64, 16, 16): [('compv1', 'intrawave')], + (64, 16, 32): [('compv1', 'intrawave')], + (64, 16, 64): [('compv1', 'intrawave')], + (64, 32, 32): [('compv1', 'intrawave')], + (64, 64, 32): [('compv1', 'intrawave')], + (64, 64, 64): [('wavelet', 'intrawave')], + (64, 128, 32): [('compv1', 'intrawave')], + (128, 32, 16): [('compv1', 'intrawave')], + (128, 32, 32): [('compv1', 'intrawave')], + (128, 32, 64): [('compv1', 'intrawave')], + (128, 64, 32): [('compv1', 'intrawave')], + (128, 64, 64): [('wavelet', 'intrawave')], + (128, 128, 32): [('compv1', 'intrawave')], + (128, 256, 32): [('compv1', 'intrawave')], + (256, 32, 64): [('wavelet', 'intrawave')], + (256, 128, 32): [('compv1', 'intrawave'), ('wavelet', 'intrawave')], + (256, 128, 64): [('wavelet', 'intrawave')], +} + +_BWD_WEIGHT_TILE_PIPELINES: Dict[Tuple[int, int, int], List[Tuple[str, str]]] = { + (16, 16, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (16, 16, 64): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 32, 64): [('basic_async_v1', 'intrawave'), ('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 64, 64): [('basic_async_v1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (16, 128, 32): [('compv1', 'intrawave')], + (16, 128, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (16, 256, 32): [('compv1', 'intrawave')], + (16, 256, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (32, 16, 64): [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], + (32, 32, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (32, 64, 16): [('compv1', 'intrawave')], + (32, 64, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (32, 128, 16): [('compv1', 'intrawave')], + (32, 128, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (64, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (64, 32, 16): [('compv1', 'intrawave')], + (64, 32, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (64, 64, 16): [('compv1', 'intrawave')], + (64, 64, 32): [('compv1', 'intrawave')], + (64, 64, 64): [('basic_async_v1', 'intrawave'), ('compv1', 'intrawave')], + (64, 128, 16): [('compv1', 'intrawave')], + (64, 128, 32): [('compv1', 'intrawave')], + (64, 128, 64): [('basic_async_v1', 'intrawave')], + (128, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (128, 32, 16): [('compv1', 'intrawave')], + (128, 32, 32): [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], + (128, 64, 16): [('compv1', 'intrawave')], + (128, 64, 32): [('compv1', 'intrawave')], + (128, 128, 16): [('compv1', 'intrawave')], + (128, 128, 32): [('compv1', 'intrawave')], + (128, 128, 64): [('compv1', 'interwave'), ('compv3', 'intrawave'), ('compv4', 'intrawave'), ('compv6', 'intrawave')], + (128, 256, 16): [('compv1', 'intrawave')], + (128, 256, 32): [('compv1', 'intrawave')], + (256, 16, 64): [('mem', 'interwave'), ('mem', 'intrawave')], + (256, 32, 64): [('basic_async_v1', 'intrawave')], + (256, 128, 16): [('compv1', 'intrawave')], + (256, 128, 32): [('compv1', 'intrawave')], + (256, 256, 32): [('compv3', 'intrawave'), ('compv4', 'intrawave'), ('compv6', 'intrawave')], +} + + +# Dtype-class-keyed pipeline overrides for tiles whose (pipeline, scheduler) +# set differs between half (bf16/fp16) and float (fp32). Consulted first when a +# dtype_class is provided. Tiles used by only one dtype-class are handled by the +# ndim+dtype tile tables, so only tiles present in BOTH classes appear here. +# half = union(bf16, fp16) pipes; float = fp32 pipes (from profiler JSON). +_BWD_WEIGHT_TILE_PIPELINES_DCLASS: Dict[Tuple[int, int, int], Dict[str, List[Tuple[str, str]]]] = { + (16, 16, 32): {'half': [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], 'float': [('compv6', 'intrawave'), ('mem', 'intrawave')]}, + (16, 32, 64): {'half': [('basic_async_v1', 'intrawave'), ('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], 'float': [('compv1', 'intrawave')]}, + (16, 64, 64): {'half': [('basic_async_v1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave'), ('wavelet', 'intrawave')], 'float': []}, + (32, 16, 64): {'half': [('compv1', 'interwave'), ('compv1', 'intrawave'), ('mem', 'interwave'), ('mem', 'intrawave')], 'float': [('compv1', 'intrawave')]}, + (64, 16, 64): {'half': [('mem', 'interwave'), ('mem', 'intrawave')], 'float': [('mem', 'intrawave')]}, + (64, 32, 64): {'half': [('wavelet', 'intrawave')], 'float': []}, + (64, 64, 64): {'half': [('basic_async_v1', 'intrawave'), ('compv1', 'intrawave'), ('wavelet', 'intrawave')], 'float': [('compv1', 'intrawave')]}, + (128, 32, 32): {'half': [('compv1', 'intrawave'), ('compv6', 'intrawave'), ('mem', 'intrawave')], 'float': [('compv1', 'intrawave')]}, +} + +_FWD_TILE_PIPELINES_DCLASS: Dict[Tuple[int, int, int], Dict[str, List[Tuple[str, str]]]] = { + (64, 64, 64): {'half': [('compv3', 'intrawave'), ('wavelet', 'intrawave')], 'float': [('compv3', 'intrawave')]}, + (128, 128, 32): {'half': [('compv1', 'intrawave'), ('compv4', 'intrawave')], 'float': [('compv4', 'intrawave')]}, + (128, 128, 64): {'half': [('compv1', 'interwave'), ('compv3', 'intrawave'), ('compv4', 'intrawave'), ('compv6', 'intrawave'), ('wavelet', 'intrawave')], 'float': [('compv1', 'interwave'), ('compv3', 'intrawave'), ('compv6', 'intrawave')]}, +} + + +def get_pipelines_for_tile( + tile_m: int, tile_n: int, tile_k: int, variant: str, + dtype_class: Optional[str] = None, +) -> List[Tuple[str, str]]: + """Return list of (pipeline, scheduler) pairs for a tile shape and variant. + + When ``dtype_class`` ("half"/"float") is given and a dtype-class override + exists for this (variant, tile), that override is returned (trims half-only + pipelines from fp32 and vice versa). Otherwise prefers the curated per-tile + map (from profiler JSON) when the tile is present, falling back to the + shape-based rules below. + """ + tile_key = (tile_m, tile_n, tile_k) + + if dtype_class is not None: + dclass_table = { + "forward": _FWD_TILE_PIPELINES_DCLASS, + "bwd_weight": _BWD_WEIGHT_TILE_PIPELINES_DCLASS, + }.get(variant, {}) + override = dclass_table.get(tile_key) + if override is not None and dtype_class in override: + return list(override[dtype_class]) + + curated = { + "forward": _FWD_TILE_PIPELINES, + "bwd_data": _BWD_DATA_TILE_PIPELINES, + "bwd_weight": _BWD_WEIGHT_TILE_PIPELINES, + }.get(variant, {}) + if tile_key in curated: + return list(curated[tile_key]) + + tile_area = tile_m * tile_n + min_dim = min(tile_m, tile_n) + + if variant == "forward": + pipes: List[Tuple[str, str]] = [("compv1", "intrawave")] + if tile_k >= 32: + pipes.append(("compv1", "interwave")) + if min_dim <= 32 and tile_k >= 64: + pipes.append(("mem", "intrawave")) + pipes.append(("mem", "interwave")) + if tile_area >= 4096 and tile_k >= 32: + pipes.append(("compv3", "intrawave")) + if tile_key in _COMPV4_SET or (tile_area >= 16384 and tile_k >= 32): + pipes.append(("compv4", "intrawave")) + if tile_area >= 4096 and tile_k >= 32: + pipes.append(("compv6", "intrawave")) + return pipes + + elif variant == "bwd_data": + return [("compv1", "intrawave")] + + elif variant == "bwd_weight": + pipes = [("compv1", "intrawave")] + if tile_k >= 64: + pipes.append(("compv1", "interwave")) + if tile_k >= 32: + pipes.append(("mem", "intrawave")) + if tile_k >= 64: + pipes.append(("mem", "interwave")) + if tile_area >= 4096 and tile_k >= 32: + pipes.append(("compv3", "intrawave")) + if tile_key in _COMPV4_SET or (tile_area >= 16384 and tile_k >= 32): + pipes.append(("compv4", "intrawave")) + if tile_k >= 32: + pipes.append(("compv6", "intrawave")) + if tile_k == 64: + pipes.append(("basic_async_v1", "intrawave")) + return pipes + + return [("compv1", "intrawave")] + + +# ============================================================================= +# Specialization Rules (per-tile, replaces cross-product) +# ============================================================================= + + +def get_specs_for_tile( + tile_m: int, tile_n: int, tile_k: int, variant: str, +) -> List[str]: + """Return list of specialization strings for a tile shape and variant. + + Rule-based specialization assignment — assigns only the specializations + that make sense for the given tile dimensions. + """ + if variant == "forward": + if tile_k == 8: + return ["default"] + # tile_k >= 16 + specs = ["default", "filter1x1_pad0", "filter1x1_stride1_pad0"] + if tile_m * tile_n <= 4096: + specs.append("filter3x3") + return specs + elif variant in ("bwd_data", "bwd_weight"): + return ["default", "filter1x1_stride1_pad0"] + + return ["default"] + + +# ============================================================================= +# Pipeline / Scheduler Rules (variant-level, kept for backward compat) +# ============================================================================= + +# Valid (pipeline, scheduler) pairs per variant +# Derived from JSON profiler configs (union of bf16 + fp32). +VARIANT_PIPELINE_SCHEDULER: Dict[str, List[Tuple[str, str]]] = { + "forward": [ + ("compv1", "intrawave"), + ("compv1", "interwave"), + ("compv3", "intrawave"), + ("compv4", "intrawave"), + ("compv6", "intrawave"), + ("mem", "intrawave"), + ("mem", "interwave"), + ], + "bwd_data": [ + ("compv1", "intrawave"), + ], + "bwd_weight": [ + ("compv1", "intrawave"), + ("compv1", "interwave"), + ("compv3", "intrawave"), + ("compv4", "intrawave"), + ("compv6", "intrawave"), + ("mem", "intrawave"), + ("mem", "interwave"), + ("basic_async_v1", "intrawave"), + ], +} + +# Specializations per variant +VARIANT_SPECIALIZATIONS: Dict[str, List[str]] = { + "forward": ["default", "filter1x1_pad0", "filter1x1_stride1_pad0", "filter3x3"], + "bwd_data": ["default", "filter1x1_stride1_pad0"], + "bwd_weight": ["default", "filter1x1_stride1_pad0"], +} + +# ============================================================================= +# Feature Flag Rules (Phase 5) +# ============================================================================= + + +@dataclass +class StreamKSpec: + """StreamK parameters for a feature config.""" + strategy: str = "TREE" # "TREE" | "LINEAR" + persistent: bool = False # non-persistent by default + + +@dataclass +class FeatureSpec: + """A single feature-flag variant rule. + + Fields that are False/1/None represent 'off'. + tile_override / pipeline_override = None means use variant defaults. + """ + split_image: bool = False + explicit_gemm: bool = False + two_stage: bool = False + double_smem_buffer: bool = False + num_groups_to_merge: int = 1 + streamk_config: Optional[StreamKSpec] = None + + # Optional overrides (None = use variant defaults) + tile_override: Optional[List[Tuple[int, int, int]]] = None + pipeline_override: Optional[List[Tuple[str, str]]] = None + + # Optional restrictions (None = applies to all). When set, the feature is + # only emitted for the listed dtype classes ("half"/"float") and/or ndims. + dtype_classes: Optional[List[str]] = None + ndims: Optional[List[int]] = None + + +# Tiles used per feature (derived from JSON profiler analysis). +# Restricting features to specific tiles prevents config explosion. +_FWD_GM_TILES: List[Tuple[int, int, int]] = [ + (64, 16, 16), (128, 32, 32), +] +_BWD_EG_TILES: List[Tuple[int, int, int]] = [ + (16, 16, 64), (16, 32, 64), (16, 64, 64), (16, 128, 64), (16, 256, 64), + (32, 16, 64), (64, 16, 64), (128, 16, 64), (128, 128, 64), + (256, 16, 64), (256, 256, 32), +] +_BWD_EG_2S_TILES: List[Tuple[int, int, int]] = [ + (16, 16, 64), (16, 32, 64), (16, 64, 64), + (32, 16, 64), (64, 16, 64), (128, 16, 64), (256, 16, 64), +] +_BWD_2S_TILES: List[Tuple[int, int, int]] = [ + (16, 16, 32), (64, 64, 64), +] +_BWD_GM2_2S_TILES: List[Tuple[int, int, int]] = [ + (32, 32, 32), (32, 64, 32), +] +_BWD_GM4_2S_TILES: List[Tuple[int, int, int]] = [ + (16, 128, 32), (32, 64, 32), (64, 32, 32), +] +_BWD_GM8_2S_TILES: List[Tuple[int, int, int]] = [ + (16, 256, 32), (32, 128, 32), (128, 32, 32), +] +_BWD_SK_TILES: List[Tuple[int, int, int]] = [ + (16, 16, 32), (16, 32, 64), (32, 16, 64), + (64, 16, 64), (64, 64, 64), (128, 32, 32), +] + +VARIANT_FEATURES: Dict[str, List[FeatureSpec]] = { + "forward": [ + # split_image: small tile subset, compv1/intrawave only + FeatureSpec( + split_image=True, + tile_override=_SPLIT_IMAGE_TILES, + pipeline_override=[("compv1", "intrawave")], + ), + # num_groups_to_merge (restricted to tiles that benefit from merging) + FeatureSpec(num_groups_to_merge=8, tile_override=_FWD_GM_TILES), + FeatureSpec(num_groups_to_merge=16, tile_override=[(64, 16, 16)]), + FeatureSpec(num_groups_to_merge=32, tile_override=[(64, 16, 16)]), + ], + "bwd_data": [ + # num_groups_to_merge=32 wavelet instance for the 256x32x64 tile + FeatureSpec( + num_groups_to_merge=32, + tile_override=[(256, 32, 64)], + pipeline_override=[("wavelet", "intrawave")], + dtype_classes=["half"], + ), + ], + "bwd_weight": [ + # explicit_gemm / two_stage / num_groups_to_merge are half-only: + # the fp32 bwd_weight profiler JSON contains none of these features. + # explicit_gemm only: tiles with tile_k=64 (larger internal GEMM) + FeatureSpec(explicit_gemm=True, tile_override=_BWD_EG_TILES, dtype_classes=["half"]), + # two_stage only + FeatureSpec(two_stage=True, tile_override=_BWD_2S_TILES, dtype_classes=["half"]), + # two_stage + explicit_gemm + FeatureSpec(two_stage=True, explicit_gemm=True, tile_override=_BWD_EG_2S_TILES, dtype_classes=["half"]), + # num_groups_to_merge + two_stage combinations + FeatureSpec(num_groups_to_merge=2, two_stage=True, tile_override=_BWD_GM2_2S_TILES, dtype_classes=["half"]), + FeatureSpec(num_groups_to_merge=4, two_stage=True, tile_override=_BWD_GM4_2S_TILES, dtype_classes=["half"]), + FeatureSpec(num_groups_to_merge=8, two_stage=True, tile_override=_BWD_GM8_2S_TILES, dtype_classes=["half"]), + # basic_async_v1 + num_groups_to_merge=2 + FeatureSpec( + num_groups_to_merge=2, + tile_override=[(16, 32, 64), (16, 64, 64), (64, 128, 64)], + pipeline_override=[("basic_async_v1", "intrawave")], + dtype_classes=["half"], + ), + # StreamK non-persistent + FeatureSpec( + streamk_config=StreamKSpec(strategy="TREE", persistent=False), + tile_override=_BWD_SK_TILES, + pipeline_override=[ + ("compv1", "intrawave"), + ("mem", "intrawave"), + ("basic_async_v1", "intrawave"), + ], + ), + # StreamK persistent + FeatureSpec( + streamk_config=StreamKSpec(strategy="TREE", persistent=True), + tile_override=_BWD_SK_TILES, + pipeline_override=[ + ("compv1", "intrawave"), + ("mem", "intrawave"), + ("basic_async_v1", "intrawave"), + ], + ), + ], +} + +# ============================================================================= +# Pipeline Variant Suffixes (single source of truth — kept for backward compat) +# ============================================================================= +# Empirically verified valid (pipeline, wave_mode, has_dsb, has_si) combinations +# observed in the 2D and 3D bf16 gfx950 benchmark CSVs. 30 entries total per ndim. +# Each tuple: (pipeline, wave_mode, has_dsb, has_si) +# wave_mode: "intrawave" | "interwave" +# has_dsb: 1 if "_dsb" suffix present (double smem buffer), else 0 +# has_si: 1 if "_si" suffix present (store immediate), else 0 +PIPELINE_VARIANTS: List[Tuple[str, str, int, int]] = [ + # basic_v1: both intra/inter × {∅, dsb, si, dsb_si} = 8 combos + ("basic_v1", "intrawave", 0, 0), + ("basic_v1", "intrawave", 1, 0), + ("basic_v1", "intrawave", 0, 1), + ("basic_v1", "intrawave", 1, 1), + ("basic_v1", "interwave", 0, 0), + ("basic_v1", "interwave", 1, 0), + ("basic_v1", "interwave", 0, 1), + ("basic_v1", "interwave", 1, 1), + # compv3: intrawave × {∅, dsb, si, dsb_si} = 4 combos + ("compv3", "intrawave", 0, 0), + ("compv3", "intrawave", 1, 0), + ("compv3", "intrawave", 0, 1), + ("compv3", "intrawave", 1, 1), + # compv4: intrawave × {dsb, dsb_si} only = 2 combos + ("compv4", "intrawave", 1, 0), + ("compv4", "intrawave", 1, 1), + # compv5: intrawave × {∅, dsb, si, dsb_si} = 4 combos + ("compv5", "intrawave", 0, 0), + ("compv5", "intrawave", 1, 0), + ("compv5", "intrawave", 0, 1), + ("compv5", "intrawave", 1, 1), + # compv6: intrawave × {∅, dsb, si, dsb_si} = 4 combos + ("compv6", "intrawave", 0, 0), + ("compv6", "intrawave", 1, 0), + ("compv6", "intrawave", 0, 1), + ("compv6", "intrawave", 1, 1), + # mem: both intra/inter × {∅, dsb, si, dsb_si} = 8 combos + ("mem", "intrawave", 0, 0), + ("mem", "intrawave", 1, 0), + ("mem", "intrawave", 0, 1), + ("mem", "intrawave", 1, 1), + ("mem", "interwave", 0, 0), + ("mem", "interwave", 1, 0), + ("mem", "interwave", 0, 1), + ("mem", "interwave", 1, 1), +] + + +def iter_pipeline_variants(pipelines: List[str] = None): + """Iterate (pipeline, wave_mode, has_dsb, has_si) tuples, optionally filtered. + + Args: + pipelines: optional list of pipeline names to keep. If None, yield all. + """ + if pipelines is None: + for entry in PIPELINE_VARIANTS: + yield entry + return + keep = set(pipelines) + for entry in PIPELINE_VARIANTS: + if entry[0] in keep: + yield entry + + +# Valid pipelines per variant (kept for backward compat; full list) +VARIANT_PIPELINES: Dict[str, List[str]] = { + "forward": [ + "basic_v1", + "mem", + "compv3", + "compv4", + "compv5", + "compv6", + "comp_async", + "basic_async_v1", + ], + "bwd_data": [ + "basic_v1", + "mem", + "compv3", + "compv4", + "compv5", + "compv6", + "comp_async", + "basic_async_v1", + ], + "bwd_weight": [ + "basic_v1", + "mem", + "compv3", + "compv4", + "compv5", + "compv6", + "comp_async", + "basic_async_v1", + ], +} + +# ============================================================================= +# Shared Validation Rules +# ============================================================================= +# These functions are the single source of truth for validation rules +# for convolution code generation. + +# --- Vector size validation --- + + +def is_valid_vector_size(vec: int) -> bool: + """AMD GPUs only support vector widths 1, 2, 4, 8, 16.""" + return vec == 1 or vec % 2 == 0 + + +def check_vectors(vec_a: int, vec_b: int, vec_c: int) -> bool: + """Check all three vector sizes are valid (1 or even).""" + return all(is_valid_vector_size(v) for v in (vec_a, vec_b, vec_c)) + + + +# --- Pipeline-variant restrictions --- + +UNSUPPORTED_VARIANT_PIPELINES = { + "bwd_weight": {"compv5"}, + "bwd_data": {"compv5"}, +} + + +def is_valid_pipeline_for_variant(pipeline: str, variant: str) -> bool: + """Check pipeline is supported for the given conv variant. + + Backward weight and backward data reject compv5 due to transpose_tile2d / + get_length issues. + """ + blocked = UNSUPPORTED_VARIANT_PIPELINES.get(variant, set()) + return pipeline not in blocked + + +# --- Stream-K restrictions --- + + +def is_streamk_valid_for_variant(variant: str) -> bool: + """Stream-K is only supported for backward weight.""" + return variant == "bwd_weight" + + +# ============================================================================= +# Depthwise Convolution Parameter Space +# ============================================================================= + +DEPTHWISE_TILE_SIZES: List[Tuple[int, int]] = [ + (8, 8), (14, 28), (16, 16), (28, 28), (32, 32), +] + +DEPTHWISE_FILTER_SIZES: List[int] = [3, 5] + +DEPTHWISE_STRIDES: List[Tuple[int, int]] = [(1, 1), (2, 2)] + +# Curated depthwise configs matching the JSON profiler set. +# Each tuple: (tile_h, tile_w, filt, str_h, str_w, sub_h, sub_w, nbatch, in_vec, out_vec) +# Padding is derived: pad = (filt - 1) // 2. +# Validated by is_valid_depthwise_config() at module load time. +DEPTHWISE_PARAMS: List[Tuple[int, ...]] = [ + # Filter 3, Stride (1,1) + (8, 8, 3, 1, 1, 2, 2, 8, 2, 2), + (16, 16, 3, 1, 1, 1, 4, 8, 8, 8), + (16, 16, 3, 1, 1, 2, 2, 1, 2, 2), + (28, 28, 3, 1, 1, 4, 4, 1, 8, 8), + (32, 32, 3, 1, 1, 4, 4, 1, 8, 8), + # Filter 3, Stride (2,2) + (14, 28, 3, 2, 2, 2, 4, 1, 8, 8), + (16, 16, 3, 2, 2, 1, 4, 1, 8, 8), + (16, 16, 3, 2, 2, 1, 4, 2, 8, 8), + (16, 16, 3, 2, 2, 2, 2, 1, 2, 2), + (16, 16, 3, 2, 2, 2, 2, 1, 8, 8), + (32, 32, 3, 2, 2, 2, 8, 1, 8, 8), + (32, 32, 3, 2, 2, 4, 4, 1, 4, 4), + (32, 32, 3, 2, 2, 4, 4, 1, 8, 8), + (32, 32, 3, 2, 2, 4, 4, 2, 8, 8), + # Filter 5, Stride (1,1) + (8, 8, 5, 1, 1, 1, 1, 1, 1, 1), + (8, 8, 5, 1, 1, 2, 2, 8, 2, 2), + (16, 16, 5, 1, 1, 1, 4, 1, 8, 8), + (16, 16, 5, 1, 1, 1, 4, 8, 8, 8), + (28, 28, 5, 1, 1, 4, 4, 8, 8, 8), + (32, 32, 5, 1, 1, 4, 4, 4, 8, 8), +] + + +def get_depthwise_configs(): + """Get curated depthwise convolution configurations. + + Returns the profiler config set, with each entry validated by + tile_math.is_valid_depthwise_config(). + + Returns: + List of tile_math.DepthwiseConfig objects. + """ + from .tile_math import DepthwiseConfig, is_valid_depthwise_config + + configs = [] + for params in DEPTHWISE_PARAMS: + th, tw, filt, sh, sw, sub_h, sub_w, nb, iv, ov = params + pad = (filt - 1) // 2 + cfg = DepthwiseConfig(th, tw, filt, sh, sw, pad, pad, nb, sub_h, sub_w, iv, ov) + assert is_valid_depthwise_config(cfg), f"Invalid depthwise config: {params}" + configs.append(cfg) + return configs + + +log = logging.getLogger(__name__) + + +def get_configs( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str], +) -> List: + """Build all available configs for the "profiler" (JSON-derived) rule set. + + Unified rule-set entry point used by + ``unified_grouped_conv_codegen.get_default_configs``. Iterates over all tile + shapes per (variant, ndim, datatype), selecting wave/warp pairs, vector + sizes, pipelines, and specializations via this module's rule helpers; each + emitted config is tagged with its concrete ``datatype``. + """ + from unified_grouped_conv_codegen import ( + GroupedConvVariant, + GroupedConvTraitConfig, + GroupedConvKernelConfig, + TileConfig, + StreamKConfig, + StreamKReductionStrategy, + DepthwiseConvKernelConfig, + ) + + seen: set = set() + configs: List[Union[GroupedConvKernelConfig, DepthwiseConvKernelConfig]] = [] + + def _add_config(config: "GroupedConvKernelConfig") -> None: + """Deduplicate and add config if arch-valid.""" + if not config.is_valid_for_arch(): + return + key = ( + config.variant, + config.ndim_spatial, + config.tile.tile_m, config.tile.tile_n, config.tile.tile_k, + config.tile.warp_m, config.tile.warp_n, config.tile.warp_k, + config.tile.warp_tile_m, config.tile.warp_tile_n, config.tile.warp_tile_k, + config.trait.pipeline, config.trait.scheduler, config.trait.epilogue, + config.vector_size_a, config.vector_size_b, config.vector_size_c, + config.trait.double_smem_buffer, config.trait.two_stage, + config.trait.explicit_gemm, config.trait.split_image, + config.trait.num_groups_to_merge, config.trait.specialization, + getattr(config.trait.streamk_config, "streamk_enabled", False), + getattr(config.trait.streamk_config, "streamk_persistent", False), + config.datatype, + ) + if key in seen: + return + seen.add(key) + configs.append(config) + + def _make_streamk_config(spec_sk) -> "StreamKConfig": + """Convert a StreamKSpec from this module into a StreamKConfig.""" + return StreamKConfig( + streamk_enabled=True, + strategy=StreamKReductionStrategy.TREE if spec_sk.strategy == "TREE" + else StreamKReductionStrategy.LINEAR, + streamk_persistent=spec_sk.persistent, + ) + + def _emit_configs_for_tile( + tile_m: int, tile_n: int, tile_k: int, + pipelines: List[Tuple[str, str]], + specializations: List[str], + variant, + ndim: int, + datatype: str, + dtype_class: str, + dtype_key: str, + feat: Optional["FeatureSpec"] = None, + ) -> None: + """Emit all valid configs for a single tile shape + pipeline list, for + one concrete datatype. Wave/warp pairs and vec triples are selected for + this dtype only; each emitted config is tagged with ``datatype``.""" + + var_str = { + GroupedConvVariant.FORWARD: "forward", + GroupedConvVariant.BACKWARD_DATA: "bwd_data", + GroupedConvVariant.BACKWARD_WEIGHT: "bwd_weight", + }.get(variant, "forward") + + pairs = get_wave_warp_pairs(tile_m, tile_n, tile_k, var_str, dtype_key, arch) + if not pairs: + return + + # Candidate vec triples for this dtype class (strategies + long-tail + # extras). Gated per (wave, warp) below against tile_math, the authority. + vec_set: set = set() + for strategy in get_vec_strategies(tile_m, tile_n, tile_k, var_str, dtype_class): + vec_set.add(compute_vector_size(strategy, dtype_class)) + for triple in get_extra_vec_triples(tile_m, tile_n, tile_k, var_str, dtype_class): + vec_set.add(triple) + vec_list = sorted(vec_set) + + # bwd_weight wavelet tiles that use legacy warp_tile_k (gfx942 convention) + _bww_legacy = ( + var_str == "bwd_weight" + and (tile_m, tile_n, tile_k) in _BWD_WEIGHT_WAVELET_LEGACY_WARP_K_TILES + ) + + for (wave_m, wave_n, wave_k), (warp_tile_m, warp_tile_n) in pairs: + # Derive warp_tile_k (the MFMA K) for the non-streamk case; this is + # the value used both for the vec gate and for non-streamk configs. + # StreamK configs re-derive it per-config below. + # Some bwd_weight wavelet tiles use the legacy gfx942 formula. + warp_tile_k = compute_warp_tile_k( + dtype_key, warp_tile_m, tile_k, streamk=False, use_legacy=_bww_legacy, + ) + # tile_math gate: a candidate vec triple survives only if it is valid + # for this (tile, wave, warp) under this dtype_key. + tm_valid = get_all_valid_vector_sizes( + tile_m, tile_n, tile_k, + wave_m, wave_n, wave_k, + warp_tile_m, warp_tile_n, warp_tile_k, + dtype_key, + ) + gated_vecs = [] + for triple in vec_list: + if triple in tm_valid: + gated_vecs.append(triple) + else: + log.debug( + "tile_math rejects vec %s for tile=(%d,%d,%d) " + "wave=(%d,%d,%d) warp=(%d,%d,%d)", + triple, tile_m, tile_n, tile_k, + wave_m, wave_n, wave_k, + warp_tile_m, warp_tile_n, warp_tile_k, + ) + + for vec_a, vec_b, vec_c in gated_vecs: + for pipeline, scheduler in pipelines: + # The wavelet pipeline uses its own direct kernel path and + # does not implement the UniversalGemmKernel interface that + # the explicit_gemm path routes through (its operator() takes + # 4 arguments, not the 6 UniversalGemmKernel::RunGemm passes). + # The two are therefore incompatible. + if pipeline == "wavelet" and feat and feat.explicit_gemm: + continue + + # KNOWN LIMITATION (bwd_weight, half precision): + # The interwave pipelines -- "compv1" (runtime BASIC_V1) and + # "mem" (runtime MEMORY) -- produce INCORRECT results for the + # bwd_weight Default specialization when the macro tile is + # split across multiple waves (wave_m * wave_n > 1) in fp16/bf16 + # on grouped convolutions with a small per-group GEMM-M + # (per-group K). Observed failing tiles: 64x64x64 (2,2,1), + # 64x16x64 (2,1,1), 16x32x64 (1,2,1) -- ~50% of the weight + # output (whole groups) comes back zero. + # + # This problems shows up when the CK Tile convolution integration + # tests are executed against the instances generated with "full" rule set. + # Rule set "tests" doesn't create the problematic instances. + + # compv4 forces double_smem_buffer + dsb = (pipeline == "compv4") or (feat.double_smem_buffer if feat else False) + + for spec in specializations: + # Build StreamKConfig + if feat and feat.streamk_config: + sk_cfg = _make_streamk_config(feat.streamk_config) + else: + sk_cfg = StreamKConfig() # disabled by default + + trait = GroupedConvTraitConfig( + pipeline=pipeline, + scheduler=scheduler, + epilogue="cshuffle", + double_smem_buffer=dsb, + pad_m=True, + pad_n=True, + pad_k=True, + two_stage=(feat.two_stage if feat else False), + explicit_gemm=(feat.explicit_gemm if feat else False), + split_image=(feat.split_image if feat else False), + num_groups_to_merge=(feat.num_groups_to_merge if feat else 1), + specialization=spec, + streamk_config=sk_cfg, + ) + + if not trait.is_valid(): + continue + + # Derive warp_tile_k for this config. Hand-written StreamK + # native instances bypass get_k_mfma and carry the legacy + # warp_tile_k, handled inside compute_warp_tile_k. + # Same legacy convention applies to some bwd_weight wavelet tiles. + eff_warp_tile_k = compute_warp_tile_k( + dtype_key, warp_tile_m, tile_k, + streamk=sk_cfg.streamk_enabled, + use_legacy=_bww_legacy and pipeline == "wavelet", + ) + + tile_cfg = TileConfig( + tile_m=tile_m, + tile_n=tile_n, + tile_k=tile_k, + warp_m=wave_m, + warp_n=wave_n, + warp_k=wave_k, + warp_tile_m=warp_tile_m, + warp_tile_n=warp_tile_n, + warp_tile_k=eff_warp_tile_k, + ) + + if not tile_cfg.is_valid(): + continue + + config = GroupedConvKernelConfig( + tile=tile_cfg, + trait=trait, + variant=variant, + ndim_spatial=ndim, + arch=arch, + vector_size_a=vec_a, + vector_size_b=vec_b, + vector_size_c=vec_c, + datatype=datatype, + ) + _add_config(config) + + for variant in variants: + # FORWARD_DEPTHWISE has no GEMM tile loop; its configs are emitted by the + # depthwise block below (tied to FORWARD). Skip the GEMM loop for it. + variant_str = { + GroupedConvVariant.FORWARD: "forward", + GroupedConvVariant.BACKWARD_DATA: "bwd_data", + GroupedConvVariant.BACKWARD_WEIGHT: "bwd_weight", + GroupedConvVariant.FORWARD_DEPTHWISE: None, + }.get(variant) + + if variant_str is not None: + features = VARIANT_FEATURES.get(variant_str, []) + + for ndim in ndims: + for datatype in datatypes: + dtype_key = DTYPE_TO_DTYPE_KEY.get(datatype) + if dtype_key is None: + continue + dclass = "float" if datatype == "fp32" else "half" + + # Tiles for this exact (variant, ndim, dtype). + base_tiles = get_tiles(variant_str, ndim, datatype) + + # --- Base configs (no feature flags) --- + for tile_m, tile_n, tile_k in base_tiles: + tile_pipelines = get_pipelines_for_tile( + tile_m, tile_n, tile_k, variant_str, dclass + ) + tile_specs = get_specs_for_tile(tile_m, tile_n, tile_k, variant_str) + _emit_configs_for_tile( + tile_m, tile_n, tile_k, + tile_pipelines, tile_specs, + variant, ndim, + datatype, dclass, dtype_key, + feat=None, + ) + + # --- Feature-flag configs --- + for feat in features: + if feat.dtype_classes is not None and dclass not in feat.dtype_classes: + continue + if feat.ndims is not None and ndim not in feat.ndims: + continue + feat_tiles = feat.tile_override if feat.tile_override is not None else base_tiles + for tile_m, tile_n, tile_k in feat_tiles: + if feat.pipeline_override is not None: + feat_pipes = feat.pipeline_override + else: + feat_pipes = get_pipelines_for_tile( + tile_m, tile_n, tile_k, variant_str, dclass + ) + tile_specs = get_specs_for_tile(tile_m, tile_n, tile_k, variant_str) + _emit_configs_for_tile( + tile_m, tile_n, tile_k, + feat_pipes, tile_specs, + variant, ndim, + datatype, dclass, dtype_key, + feat=feat, + ) + + # --- Depthwise configs (forward only, 2D only) --- + if variant == GroupedConvVariant.FORWARD and 2 in ndims: + dw_seen: set = set() + for dw_cfg in get_depthwise_configs(): + for dt in (datatypes or ["fp16"]): + dw_key = (dw_cfg.tile_h, dw_cfg.tile_w, dw_cfg.filt, + dw_cfg.str_h, dw_cfg.str_w, dw_cfg.pad_h, + dw_cfg.pad_w, dw_cfg.nbatch, dw_cfg.sub_h, + dw_cfg.sub_w, dw_cfg.in_vec, dw_cfg.out_vec, dt) + if dw_key in dw_seen: + continue + dw_seen.add(dw_key) + configs.append(DepthwiseConvKernelConfig( + tile_h=dw_cfg.tile_h, tile_w=dw_cfg.tile_w, + filt=dw_cfg.filt, + str_h=dw_cfg.str_h, str_w=dw_cfg.str_w, + pad_h=dw_cfg.pad_h, pad_w=dw_cfg.pad_w, + nbatch=dw_cfg.nbatch, + sub_h=dw_cfg.sub_h, sub_w=dw_cfg.sub_w, + in_vec=dw_cfg.in_vec, out_vec=dw_cfg.out_vec, + ndim_spatial=2, + arch=arch, + layout="ngchw", + datatype=dt, + )) + + return configs + + +if __name__ == "__main__": + all_tiles = sorted( + set(get_tiles_for_variant("forward")) + | set(get_tiles_for_variant("bwd_data")) + | set(get_tiles_for_variant("bwd_weight")) + ) + print(f"Total unique tiles: {len(all_tiles)}") + for variant in ("forward", "bwd_data", "bwd_weight"): + print(f" {variant}: {len(get_tiles_for_variant(variant))}") diff --git a/dispatcher/codegen/grouped_conv/grouped_config_rules_full_tests.py b/dispatcher/codegen/grouped_conv/grouped_config_rules_full_tests.py new file mode 100644 index 00000000000..dc7c2befac7 --- /dev/null +++ b/dispatcher/codegen/grouped_conv/grouped_config_rules_full_tests.py @@ -0,0 +1,173 @@ +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +from typing import List + +def _classify_config(cfg) -> str: + """Classify a config into a feature category for stratified test selection. + + The datatype tag is folded into the category so that the stratified subset keeps + at least one config per datatype per feature category. + """ + from unified_grouped_conv_codegen import ( + DepthwiseConvKernelConfig, + ) + dt = getattr(cfg, "datatype", None) or "fp16" + if isinstance(cfg, DepthwiseConvKernelConfig): + return f"depthwise:{dt}" + tr = cfg.trait + if getattr(tr.streamk_config, "streamk_enabled", False): + return f"streamk:{dt}" + if tr.split_image: + return f"split_image:{dt}" + if tr.num_groups_to_merge > 1: + return f"merged_groups:{dt}" + if tr.two_stage: + return f"two_stage:{dt}" + if tr.explicit_gemm: + return f"explicit_gemm:{dt}" + return f"regular:{dt}" + + +def _select_test_configs(configs) -> List: + """Select ~20% of configs with stratified sampling for test builds. + + Guarantees: + 1. At least 1 config from each feature category. + 2. Every (pipeline, scheduler) combo per variant is represented. + + Selection: every 5th config (indices 4, 9, 14, ...) from each category, + matching awk 'NR % 5 == 0' convention. + """ + from collections import defaultdict + from unified_grouped_conv_codegen import ( + GroupedConvKernelConfig + ) + + # Config dataclasses are mutable (unhashable), so membership is tracked by + # position in the original list rather than id() (which is only valid while + # objects stay alive) or a content key (which would require hashability). + configs = list(configs) + + categories = defaultdict(list) # category -> list of original indices + for idx, cfg in enumerate(configs): + categories[_classify_config(cfg)].append(idx) + + selected = set() # original indices + + # Take ~20% from each category (minimum 1) + for cat, cat_indices in categories.items(): + cat_selected = False + for rank, idx in enumerate(cat_indices): + if (rank + 1) % 5 == 0: + selected.add(idx) + cat_selected = True + # Ensure minimum 1 per category + if not cat_selected and cat_indices: + selected.add(cat_indices[0]) + + # Ensure pipeline/scheduler coverage per (variant, datatype) (GEMM only). + gemm_indices = [ + i for i, c in enumerate(configs) + if isinstance(c, GroupedConvKernelConfig) + ] + variant_combos = defaultdict(set) + variant_covered = defaultdict(set) + for i in gemm_indices: + c = configs[i] + vkey = (c.variant, getattr(c, "datatype", None) or "fp16") + combo = (c.trait.pipeline, c.trait.scheduler) + variant_combos[vkey].add(combo) + if i in selected: + variant_covered[vkey].add(combo) + + for vkey, required in variant_combos.items(): + variant, dt = vkey + missing = required - variant_covered[vkey] + for combo in missing: + for i in gemm_indices: + c = configs[i] + if c.variant == variant and \ + (getattr(c, "datatype", None) or "fp16") == dt and \ + (c.trait.pipeline, c.trait.scheduler) == combo: + selected.add(i) + break + + return [configs[i] for i in sorted(selected)] + +def get_configs( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str] + ) -> List: + """Build all available configs for the "full-tests" rule set. + + Unified rule-set entry point used by + ``unified_grouped_conv_codegen.get_default_configs``. + Trims down the "full" config set using the rules defined in ``_select_test_configs``. + """ + + from .grouped_config_rules_full import get_configs as get_full_configs + + all_configs = get_full_configs(arch, variants, ndims, datatypes) + test_configs = _select_test_configs(all_configs) + return test_configs + + +def _select_tiny_configs(configs, min_count: int = 10) -> List: + """Select a minimal set of configs for quick development builds. + + Uses the same category mechanism as ``_select_test_configs`` + (``_classify_config`` folds the feature category and datatype together, so a + represented category also represents its variant), additionally split by + spatial dimensionality so both 2D and 3D kernels are represented, but + maximally trimmed down: pick a single config per (category, ndim), then + round-robin fill up to ``min_count`` so the set is at least ``min_count`` + configs (or all available, if fewer). Every (feature category, ndim) present + in ``configs`` is represented. + """ + from collections import OrderedDict + + by_category: "OrderedDict[tuple, list]" = OrderedDict() + for cfg in configs: + key = (_classify_config(cfg), getattr(cfg, "ndim_spatial", None)) + by_category.setdefault(key, []).append(cfg) + + selected: List = [] + # One per category first so every category (and thus variant) is represented. + for cfgs in by_category.values(): + if cfgs: + selected.append(cfgs[0]) + + # Fill up to min_count round-robin across categories. + idx = 1 + while len(selected) < min_count: + added = False + for cfgs in by_category.values(): + if idx < len(cfgs): + selected.append(cfgs[idx]) + added = True + if len(selected) >= min_count: + break + if not added: + break # all configs exhausted + idx += 1 + + return selected + + +def get_tiny_configs( + arch: str, + variants: List, + ndims: List[int], + datatypes: List[str], +) -> List: + """Build the "tiny" rule set: a minimal subset of the "full-tests" rule set. + + Returns at least 10 configs (or all available, if fewer), with every feature + category represented (same category mechanism as the "full-tests" rule set, but + maximally trimmed). Intended for fast development/iteration builds. + """ + test_configs = get_configs(arch, variants, ndims, datatypes) + return _select_tiny_configs(test_configs) \ No newline at end of file diff --git a/dispatcher/codegen/grouped_conv/tile_math.py b/dispatcher/codegen/grouped_conv/tile_math.py new file mode 100644 index 00000000000..2ca818cc496 --- /dev/null +++ b/dispatcher/codegen/grouped_conv/tile_math.py @@ -0,0 +1,563 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Mathematical functions for deriving valid tile/warp/vector configurations. + +Key source files this is derived from: + - block_universal_gemm_as_bs_cr.hpp (tile divisibility by warps) + - gemm_pipeline_agmem_bgmem_creg_v1_default_policy.hpp (vec/LDS formulas) + - conv_algorithm_limits.hpp (VMEM/LDS vector size validity) + - warp_gemm_dispatcher.hpp (XDL warp tile shapes per dtype) + - arch_specs_generated.py (arch-specific wave/warp-tile combos) +""" + +import sys +from dataclasses import dataclass +from pathlib import Path +from typing import List, Optional, Set, Tuple + +# --------------------------------------------------------------------------- +# Path setup — allow running from any directory +# --------------------------------------------------------------------------- +_CODEGEN_DIR = Path(__file__).resolve().parent.parent +if str(_CODEGEN_DIR) not in sys.path: + sys.path.insert(0, str(_CODEGEN_DIR)) + +from arch_specs_generated import ( + WARP_SUPPORTED_COMBINATIONS, # [wave_m, wave_n, wave_k] per arch + WARP_TILE_SUPPORTED_COMBINATIONS, # [warp_m, warp_n, warp_k] per arch+dtype + ELEMENT_SIZE_MAP, # bytes per element per dtype string +) + +# Warp size on AMD GPUs +WARP_SIZE = 64 + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + +def _pos_divisors(n: int) -> List[int]: + """Return all positive divisors of n in ascending order.""" + if n <= 0: + return [] + divs = [] + i = 1 + while i * i <= n: + if n % i == 0: + divs.append(i) + if i != n // i: + divs.append(n // i) + i += 1 + return sorted(divs) + + +def _lds_valid(vec: int, sizeof_dtype: float) -> bool: + """LDS vector load/store must be a power-of-2 multiple of 8 bits, up to 256 bits. + + Some bwd_data configs use larger global-load vectors (e.g. fp32×8=256 bits) + where the global load is split across DWORD pairs rather than going through LDS. + We therefore accept up to 256 bits and require the width to be a power of 2 in bytes. + """ + bits = vec * sizeof_dtype * 8 + # Must be positive, a power of 2 in bit-width, and at most 256 bits + if bits <= 0 or bits > 256: + return False + # Check power of 2 + b = int(bits) + return b > 0 and (b & (b - 1)) == 0 + + +def _pipeline_wave_valid( + wave_m: int, wave_n: int, wave_k: int, + warp_tile_m: int, warp_tile_n: int, warp_tile_k: int, + pipeline: Optional[str], +) -> bool: + """Return True if this wave/warp combo is valid for the given pipeline. + + Pipeline-specific constraints derived from static asserts in: + - gemm_pipeline_ag_bg_cr_comp_async_eight_waves_policy.hpp + (NWarps==2, WarpTile::at(I1)==16 for basic_async_v1 eight-wave) + - TDM pipeline (BlockSize == warp_size * 4, WarpTile M=N=32) + """ + if pipeline is None: + return True + + p = pipeline.lower() + + if p == "basic_async_v1": + # Eight-wave async: NWarps must be 2, warp_tile_n must be 16 + return wave_n == 2 and warp_tile_n == 16 + + if p in ("tdm", "tdmv2"): + # TDM requires exactly 4 waves and 32x32 warp tile + return (wave_m * wave_n * wave_k == 4 + and warp_tile_m == 32 and warp_tile_n == 32) + + # All other pipelines (compv1..v6, mem, comp_async, basic_v1, etc.): no constraint + return True + + +def _deduplicate(pairs: List[Tuple[Tuple, Tuple]]) -> List[Tuple[Tuple, Tuple]]: + """Remove duplicate (wave, warp_tile) pairs while preserving order.""" + return list(dict.fromkeys(pairs)) + + +# --------------------------------------------------------------------------- +# Public API +# --------------------------------------------------------------------------- + +def get_valid_wave_warp_pairs( + tile_m: int, + tile_n: int, + tile_k: int, + dtype_key: str, + arch: str = "gfx942", + pipeline: Optional[str] = None, +) -> List[Tuple[Tuple[int, int, int], Tuple[int, int, int]]]: + """Return all valid ((wave_m, wave_n, wave_k), (warp_tile_m, warp_tile_n, warp_tile_k)) pairs. + + Derived from the static assert in block_universal_gemm_as_bs_cr.hpp: + MIterPerWarp * MWarp * WarpGemm::kM == MPerBlock + NIterPerWarp * NWarp * WarpGemm::kN == NPerBlock + + which means: tile_m == wave_m * warp_tile_m * iter_m (iter_m >= 1) + tile_n == wave_n * warp_tile_n * iter_n (iter_n >= 1) + + Args: + tile_m, tile_n, tile_k: block tile dimensions + dtype_key: e.g. "bf16_bf16_fp32", "fp32_fp32_fp32" + arch: GPU architecture string, default "gfx942" + pipeline: optional pipeline name to apply pipeline-specific constraints + + Returns: + List of ((wave_m, wave_n, wave_k), (warp_tile_m, warp_tile_n, warp_tile_k)) tuples. + Each pair is structurally valid for the given arch and pipeline. + """ + supported_wave_combos: Set[Tuple[int, int, int]] = { + tuple(c) for c in WARP_SUPPORTED_COMBINATIONS.get(arch, []) + } + warp_tile_shapes: List[List[int]] = ( + WARP_TILE_SUPPORTED_COMBINATIONS + .get(arch, {}) + .get(dtype_key, []) + ) + + results: List[Tuple[Tuple, Tuple]] = [] + + for wt in warp_tile_shapes: + warp_m, warp_n, warp_k = wt[0], wt[1], wt[2] + + # Tile must be divisible by the warp tile in M and N + if tile_m % warp_m != 0 or tile_n % warp_n != 0: + continue + + # Enumerate all integer (iter_m, iter_n) >= 1 such that the block is tiled exactly + for iter_m in _pos_divisors(tile_m // warp_m): + wave_m = tile_m // (warp_m * iter_m) + for iter_n in _pos_divisors(tile_n // warp_n): + wave_n = tile_n // (warp_n * iter_n) + + # Normal case: wave_k = 1 + if (wave_m, wave_n, 1) in supported_wave_combos: + if _pipeline_wave_valid(wave_m, wave_n, 1, warp_m, warp_n, warp_k, pipeline): + results.append(((wave_m, wave_n, 1), (warp_m, warp_n, warp_k))) + + # Special case: wave_k = 2 + # Only a small number of tiles use this (e.g. (128,32,32) with warp=(32,32,8)). + # Supported on gfx942/gfx950 via the [2,1,2] wave combo. + if (wave_m, wave_n, 2) in supported_wave_combos: + if _pipeline_wave_valid(wave_m, wave_n, 2, warp_m, warp_n, warp_k, pipeline): + results.append(((wave_m, wave_n, 2), (warp_m, warp_n, warp_k))) + + return _deduplicate(results) + + +def get_valid_vec_sizes( + tile_m: int, + tile_n: int, + tile_k: int, + wave_m: int, + wave_n: int, + wave_k: int, + warp_tile_m: int, + warp_tile_n: int, + warp_tile_k: int, + dtype_key: str, + pipeline: Optional[str] = None, +) -> List[Tuple[int, int, int]]: + """Return all valid (vec_a, vec_b, vec_c) triples for a fully-specified config. + + The thread-pixel budget formula: + block_size = WARP_SIZE * wave_m * wave_n * wave_k + pixels_a = tile_m * tile_k / block_size (elements per thread, A tile) + pixels_b = tile_n * tile_k / block_size (elements per thread, B tile) + + Valid vec_a/vec_b must be compatible with their respective pixel budget and + satisfy VMEM/LDS hardware constraints. Compatibility means either the + vector divides the per-thread pixel budget (v divides pixels) OR the vector + is an exact multiple of it (pixels divides v) — in the latter case a single + wide load simply decomposes into v/pixels sub-loads, which is valid on + hardware (observed for asymmetric small-pixel tiles). vec_c is constrained + by the XDL output shuffle: tile_n must be divisible by vec_c. + + Args: + tile_m, tile_n, tile_k: block tile dimensions + wave_m, wave_n, wave_k: wave counts + warp_tile_m, warp_tile_n, warp_tile_k: XDL warp tile dimensions + dtype_key: e.g. "bf16_bf16_fp32" + pipeline: optional, currently unused + + Returns: + Sorted list of (vec_a, vec_b, vec_c) tuples. + """ + dtype_a = dtype_key.split("_")[0] + dtype_b = dtype_key.split("_")[1] + sizeof_a = float(ELEMENT_SIZE_MAP.get(dtype_a, 2)) # bytes per A element + + # vec_b / vec_c reuse sizeof_a, so this is only valid when A and B share an + # element type (the C output element type is assumed to match the input). + # The third field is the accumulator (fp32/int32), so it is intentionally + # not compared here. + if dtype_a != dtype_b: + raise ValueError( + f"get_valid_vec_sizes assumes A and B share an element type, got {dtype_key}" + ) + + block_size = WARP_SIZE * wave_m * wave_n * wave_k + + if block_size == 0 or tile_m * tile_k % block_size != 0 or tile_n * tile_k % block_size != 0: + return [] + + pixels_a = (tile_m * tile_k) // block_size + pixels_b = (tile_n * tile_k) // block_size + + # Maximum vector width per element type. + # Standard VMEM load limit is 16 bytes (128 bits), which gives: + # fp32 (4 bytes) -> 4 elements; bf16/fp16 (2 bytes) -> 8; fp8 (1 byte) -> 16 + # However, some bwd_data configurations use vec_a=8 for fp32 (32-byte loads via + # 2×16-byte split), which compiles and runs on hardware. To avoid false negatives + # the cap is relaxed to 16 bytes × 2 = the hardware dword-per-lane pair limit. + # The LDS validity check below enforces the finer-grained hardware constraint. + max_vec_ab = max(1, int(32 // sizeof_a)) # 2× standard VMEM width + + # Output vec_c: relaxed to the same 32-byte (2× VMEM) ceiling as vec_a/vec_b. + # The finer-grained _lds_valid check below still enforces the <=256-bit + # hardware ceiling, so e.g. bf16 vec_c stays <= 16. This admits fp32 vec_c=8 + # observed in the profiler configs. + max_vec_c = max(1, int(32 // sizeof_a)) + + # A vector width is compatible with the per-thread pixel budget if it either + # divides the budget or is an exact multiple of it (the wide load decomposes + # into v/pixels sub-loads). + valid_a = [ + v for v in [1, 2, 4, 8, 16] + if v <= max_vec_ab + and (pixels_a % v == 0 or v % pixels_a == 0) + and _lds_valid(v, sizeof_a) + ] + + valid_b = [ + v for v in [1, 2, 4, 8, 16] + if v <= max_vec_ab + and (pixels_b % v == 0 or v % pixels_b == 0) + and _lds_valid(v, sizeof_a) + ] + + # vec_c constraint: XDL accumulator is laid out in N-major tiles of size warp_tile_n. + # The output shuffle requires tile_n divisible by (wave_n * warp_tile_n * vec_c). + # vec_c constraint: the C accumulator is stored contiguously along N per thread. + # The output shuffle in the XDL block gemm only requires tile_n to be divisible + # by vec_c (not by wave_n * warp_tile_n * vec_c as the input tiles). + # thread_cluster_dims[3] = 1 because each thread writes one N-element per shuffle step; + # the n_xdl_per_wave repeats are handled by the outer loop, not the vector width. + valid_c = [ + v for v in [1, 2, 4, 8, 16] + if v <= max_vec_c + and tile_n % v == 0 + and _lds_valid(v, sizeof_a) + ] + + return sorted({(va, vb, vc) for va in valid_a for vb in valid_b for vc in valid_c}) + + +def get_vec_sizes_for_wave_warp( + tile_m: int, + tile_n: int, + tile_k: int, + warp_tile_k: int, + dtype_key: str, + arch: str = "gfx942", + pipeline: Optional[str] = None, +) -> List[Tuple[int, int, int]]: + """Return union of valid (vec_a, vec_b, vec_c) across all wave/warp pairs with given warp_tile_k. + + Convenience wrapper matching the _TILE_WTILK_TO_VECS key signature: + key = (tile_m, tile_n, tile_k, warp_tile_k) + + This takes the union over all valid wave/warp pairs whose warp_tile_k matches, + so the result is a superset of what any single wave/warp pair would produce. + + Args: + tile_m, tile_n, tile_k: block tile dimensions + warp_tile_k: XDL warp tile K dimension (selects dtype variant, e.g. 8 or 16 for bf16) + dtype_key: e.g. "bf16_bf16_fp32" + arch: GPU architecture string + pipeline: optional pipeline constraint + + Returns: + Sorted list of (vec_a, vec_b, vec_c) tuples (union across matching wave/warp pairs). + """ + results: Set[Tuple[int, int, int]] = set() + + for (wave_m, wave_n, wave_k), (wt_m, wt_n, wt_k) in get_valid_wave_warp_pairs( + tile_m, tile_n, tile_k, dtype_key, arch=arch, pipeline=pipeline + ): + if wt_k == warp_tile_k: + vecs = get_valid_vec_sizes( + tile_m, tile_n, tile_k, + wave_m, wave_n, wave_k, + wt_m, wt_n, wt_k, + dtype_key, pipeline=pipeline, + ) + results.update(vecs) + + return sorted(results) + + +# --------------------------------------------------------------------------- +# Dtype key inference helpers (for test infrastructure) +# --------------------------------------------------------------------------- + +def dtype_keys_for_warp_tile_k(warp_tile_k: int) -> List[str]: + """Infer plausible dtype_keys from warp_tile_k. + + Used by tests to map _TILE_WTILK_TO_VECS keys (which encode warp_tile_k + but not dtype explicitly) back to dtype_key strings. + + warp_tile_k mapping (from warp_gemm_dispatcher.hpp): + fp32_fp32_fp32 : warp_tile_k ∈ {4, 8, 16} + bf16_bf16_fp32 : warp_tile_k ∈ {8, 16, 32} (gfx942: {8,16}; gfx950: {8,16,32}) + fp16_fp16_fp32 : warp_tile_k ∈ {8, 16, 32} + fp8_fp8_fp32 : warp_tile_k ∈ {16, 32, 64, 128} + """ + candidates = [] + if warp_tile_k in {4, 8, 16}: + candidates.append("fp32_fp32_fp32") + if warp_tile_k in {8, 16, 32}: + candidates.append("bf16_bf16_fp32") + candidates.append("fp16_fp16_fp32") + if warp_tile_k in {16, 32, 64, 128}: + candidates.append("fp8_fp8_fp32") + return candidates + + +# --------------------------------------------------------------------------- +# Depthwise Convolution Configuration +# --------------------------------------------------------------------------- + + +def _ceil_div(a: int, b: int) -> int: + """Ceiling integer division.""" + return (a + b - 1) // b + + +def _ceil_to_multiple(val: int, multiple: int) -> int: + """Round up val to the nearest multiple.""" + if multiple <= 0: + return val + return _ceil_div(val, multiple) * multiple + + +@dataclass(frozen=True) +class DepthwiseConfig: + """Configuration for a depthwise convolution kernel tile.""" + + tile_h: int + tile_w: int + filt: int + str_h: int + str_w: int + pad_h: int + pad_w: int + nbatch: int + sub_h: int + sub_w: int + in_vec: int + out_vec: int + + +def is_valid_depthwise_config(cfg: DepthwiseConfig, dtype_size: int = 2) -> bool: + """Check all depthwise pipeline constraints for a config. + + Implements the 19 constraints from the depthwise pipeline's static_asserts + and IsDepthwiseArgumentSupported checks. Constraints 1-4, 10-12, 18-19 are + auto-satisfied by construction (fixed BlockSize=64, Dilation=1, square odd + filter, same-padding, and the LDS stride formula). + + Args: + cfg: Depthwise configuration to validate. + dtype_size: Bytes per element (2 for fp16/bf16, 4 for fp32). + + Returns: + True if all constraints are satisfied. + """ + # Constraint 5: filter must be odd + if cfg.filt < 1 or cfg.filt % 2 != 1: + return False + + # Constraint 6: in_vec and out_vec must be positive powers of 2 + for v in (cfg.in_vec, cfg.out_vec): + if v <= 0 or (v & (v - 1)) != 0: + return False + + # Constraint 7: SubTileH <= TileOutH, SubTileW <= TileOutW + if cfg.sub_h <= 0 or cfg.sub_w <= 0: + return False + if cfg.sub_h > cfg.tile_h or cfg.sub_w > cfg.tile_w: + return False + + # Constraint 9: StrideW == 1 || StrideW % 2 == 0 + if cfg.str_w != 1 and cfg.str_w % 2 != 0: + return False + + # Constraint 15: PadW > 0 + if cfg.pad_w <= 0: + return False + + # Derived values + tile_in_w = cfg.tile_w * cfg.str_w + lds_tile_h = cfg.tile_h * cfg.str_h + 2 * cfg.pad_h + lds_tile_w = tile_in_w + 2 * cfg.pad_w + + h_repeats = _ceil_div(cfg.tile_h, cfg.sub_h) + w_repeats = _ceil_div(cfg.tile_w, cfg.sub_w) + total_subtiles = h_repeats * w_repeats + + # Constraint 8: TotalSubTiles <= 64 (BlockSize) + if total_subtiles > 64: + return False + + tile_per_wave = 64 // total_subtiles + if tile_per_wave == 0: + return False + + # Constraint 13: NBatch % TilePerWave == 0 + if cfg.nbatch <= 0 or cfg.nbatch % tile_per_wave != 0: + return False + + in_vec_internal = min(cfg.in_vec, 4) + + # Constraint 14: SubTileW * StrideW % InVecInternal == 0 + if (cfg.sub_w * cfg.str_w) % in_vec_internal != 0: + return False + + # LDS stride construction (constraints 10-12 are auto-satisfied) + lds_stride_base = _ceil_to_multiple(lds_tile_w, cfg.in_vec) + lds_stride_min = lds_tile_w + cfg.pad_w + lds_stride = max(lds_stride_base, + _ceil_to_multiple(lds_stride_min, in_vec_internal)) + + # Constraint 16: ceil(LdsTileW / InVec) <= 64 + if _ceil_div(lds_tile_w, cfg.in_vec) > 64: + return False + + # Constraint 17: SmemSize <= 65536 bytes + lds_tile_size = lds_tile_h * lds_stride + smem_size = lds_tile_size * tile_per_wave * dtype_size + if smem_size > 65536: + return False + + return True + + +def get_valid_depthwise_configs( + tile_sizes: List[Tuple[int, int]], + filter_sizes: List[int], + strides: List[Tuple[int, int]], + block_size: int = 64, + dtype_size: int = 2, +) -> List[DepthwiseConfig]: + """Generate all valid depthwise configs from parameter space. + + For each combination of tile, filter, and stride, enumerates valid + sub-tile, batch, and vector configurations. Padding is derived from + filter size as standard "same" padding: pad = (filt - 1) // 2. + + Args: + tile_sizes: List of (tile_h, tile_w) output tile dimensions. + filter_sizes: List of square filter sizes (must be odd). + strides: List of (stride_h, stride_w) pairs. + block_size: Thread block size (default 64). + dtype_size: Bytes per element (default 2 for fp16/bf16). + + Returns: + List of valid DepthwiseConfig objects (deduplicated). + """ + configs: List[DepthwiseConfig] = [] + seen: Set[DepthwiseConfig] = set() + vec_values = [1, 2, 4, 8] + + for tile_h, tile_w in tile_sizes: + # Sub-tile candidates: powers of 2 + divisors of tile dimension + sub_h_set: Set[int] = set() + sub_w_set: Set[int] = set() + v = 1 + while v <= tile_h: + sub_h_set.add(v) + v *= 2 + for d in _pos_divisors(tile_h): + sub_h_set.add(d) + v = 1 + while v <= tile_w: + sub_w_set.add(v) + v *= 2 + for d in _pos_divisors(tile_w): + sub_w_set.add(d) + + sub_h_list = sorted(sub_h_set) + sub_w_list = sorted(sub_w_set) + + for filt in filter_sizes: + if filt % 2 != 1: + continue + pad = (filt - 1) // 2 + + for str_h, str_w in strides: + for sub_h in sub_h_list: + for sub_w in sub_w_list: + # Early prune on total sub-tiles + h_reps = _ceil_div(tile_h, sub_h) + w_reps = _ceil_div(tile_w, sub_w) + total_st = h_reps * w_reps + if total_st > block_size: + continue + + tile_per_wave = block_size // total_st + if tile_per_wave == 0: + continue + + # Enumerate nbatch (powers of 2, divisible by tile_per_wave) + nb = 1 + while nb <= 128: + if nb % tile_per_wave == 0: + for in_vec in vec_values: + for out_vec in vec_values: + cfg = DepthwiseConfig( + tile_h=tile_h, tile_w=tile_w, + filt=filt, + str_h=str_h, str_w=str_w, + pad_h=pad, pad_w=pad, + nbatch=nb, + sub_h=sub_h, sub_w=sub_w, + in_vec=in_vec, out_vec=out_vec, + ) + if cfg not in seen and \ + is_valid_depthwise_config(cfg, dtype_size): + seen.add(cfg) + configs.append(cfg) + nb *= 2 + + return configs diff --git a/dispatcher/codegen/unified_gemm_codegen.py b/dispatcher/codegen/unified_gemm_codegen.py index c0fb08aa443..05e773442e4 100755 --- a/dispatcher/codegen/unified_gemm_codegen.py +++ b/dispatcher/codegen/unified_gemm_codegen.py @@ -187,6 +187,10 @@ def is_preshuffle_config_valid( log = logging.getLogger(__name__) +def _is_power_of_two(x: int) -> bool: + return x > 0 and (x & (x - 1)) == 0 + + # ============================================================================ # Configuration and Data Structures # ============================================================================ @@ -198,6 +202,22 @@ class GemmVariant(Enum): STANDARD = "standard" PRESHUFFLE = "preshuffle" MULTI_D = "multi_d" + GROUPED = "grouped" + # Stream-K. COVERAGE LIMITATION: the dispatcher does NOT yet emit the full + # Old-TE Stream-K tile surface. The kernels generated here are driven by the + # tile list passed to this codegen, which is narrower than tile_engine's: + # measured per layout, e.g. fp16/bf16 rcr TE=180 vs DISP=73 tiles (124 TE-only, + # 17 DISP-only); ccr TE=144 vs DISP=73; fp8/bf8 closer (rcr TE=296 vs DISP=232) + # but still short. TE-vs-DISP numeric+perf parity is therefore validated + # per matched tile config, NOT over the whole TE tile space -- "functional + # equivalence" should be read with that scope. Closing the gap means feeding + # the missing TE tiles into the tile list (the codegen handles them); the + # divergent DISP-only tiles are configs TE does not enumerate at all. + # NOTE: this limitation is inherent only to driving the codegen standalone. + # When the bridge is implemented on top of this codegen, the tile list is + # supplied by Tile-Engine directly, so the emitted Stream-K surface matches + # the full Old-TE tile space by construction and the gap closes. + STREAM_K = "stream_k" # TileConfig imported from codegen_common @@ -223,6 +243,9 @@ class KernelConfig: elementwise_op: str = "PassThrough" num_d_tensors: int = 0 d_layout: str = "r" # Layout for D tensors (r=row, c=col) - same for all D tensors + # Stream-K reduction strategy: "atomic" (partials atomic-add into C), + # "linear", or "tree" (partials accumulate through a device workspace). + reduction_strategy: str = "atomic" # Fixed parameters block_size: int = 256 @@ -285,6 +308,11 @@ def key_name(self, datatype: str, layout: str) -> str: parts.append(f"nd{self.num_d_tensors}") parts.append(f"dly_{self.d_layout}") + # Stream-K variant: reduction strategy distinguishes otherwise-identical + # kernels (each strategy is a separate compiled binary). + if self.variant == GemmVariant.STREAM_K: + parts.append(f"redux_{self.reduction_strategy}") + # Occupancy parameters (only if non-default) if self.num_wave_groups != 1: parts.append(f"wg{self.num_wave_groups}") @@ -340,6 +368,14 @@ def generate(config: KernelConfig, datatype: str, layout: str) -> str: name += "_preshuffle" elif config.variant == GemmVariant.MULTI_D: name += f"_multid_{config.elementwise_op}_d{config.num_d_tensors}" + elif config.variant == GemmVariant.GROUPED: + name += "_grouped" + elif config.variant == GemmVariant.STREAM_K: + name += "_streamk" + # Atomic keeps the bare "_streamk" suffix for name parity with the + # original single-strategy bridge; linear/tree are disambiguated. + if config.reduction_strategy != "atomic": + name += f"_{config.reduction_strategy}" return name @@ -387,12 +423,30 @@ def _header(self, kernel_name: str, config: KernelConfig) -> str: includes += """ #include "ck_tile/ops/elementwise/unary_element_wise_operation.hpp" #include "ck_tile/ops/gemm/kernel/gemm_multi_d_kernel.hpp" +""" + + if config.variant == GemmVariant.GROUPED: + includes += """ +#include +#include +#include "ck_tile/host/device_memory.hpp" +#include "ck_tile/host/hip_check_error.hpp" +#include "ck_tile/ops/gemm/kernel/grouped_gemm_kernel.hpp" """ if config.preshuffle: includes += """ #include "ck_tile/ops/gemm/pipeline/wp_pipeline_agmem_bgmem_creg_v2.hpp" #include "ck_tile/ops/gemm/pipeline/wp_pipeline_agmem_bgmem_creg_base_policy.hpp" +""" + + if config.variant == GemmVariant.STREAM_K: + includes += """ +#include +#include +#include "ck_tile/host/device_memory.hpp" +#include "ck_tile/ops/gemm/kernel/streamk_gemm/streamk_gemm_kernel.hpp" +#include "ck_tile/ops/gemm/kernel/streamk_gemm/streamk_gemm_tile_partitioner.hpp" """ return includes @@ -410,12 +464,13 @@ def _types(self, config: KernelConfig, kernel_name: str) -> str: def _kernel_local_types(self, config: KernelConfig) -> str: """Generate data type and layout definitions inside kernel namespace""" output_dtype = self.tm.get_output_dtype(self.datatype) + acc_dtype = self.tm.get_acc_dtype(self.datatype) return f""" // Data types (inside namespace to avoid conflicts across layouts) using ADataType = {self.tm.DTYPE_TO_CK[self.datatype]}; using BDataType = {self.tm.DTYPE_TO_CK[self.datatype]}; - using AccDataType = float; + using AccDataType = {self.tm.DTYPE_TO_CK[acc_dtype]}; using CDataType = {self.tm.DTYPE_TO_CK[output_dtype]}; // Layouts (inside namespace to avoid conflicts when mixing layouts) @@ -448,6 +503,7 @@ def _selected_kernel_struct(self, config: KernelConfig, kernel_name: str) -> str t = config.tile tr = config.trait output_dtype = self.tm.get_output_dtype(self.datatype) + acc_dtype = self.tm.get_acc_dtype(self.datatype) # Generate unique struct name and namespace from kernel name struct_name = f"Kernel_{kernel_name}" @@ -463,7 +519,7 @@ def _selected_kernel_struct(self, config: KernelConfig, kernel_name: str) -> str // Data types (inside namespace to avoid conflicts across different kernels) using ADataType = {self.tm.DTYPE_TO_CK[self.datatype]}; using BDataType = {self.tm.DTYPE_TO_CK[self.datatype]}; -using AccDataType = float; +using AccDataType = {self.tm.DTYPE_TO_CK[acc_dtype]}; using CDataType = {self.tm.DTYPE_TO_CK[output_dtype]}; // Layouts (inside namespace to avoid conflicts when mixing layouts like RCR + RRR) @@ -518,8 +574,51 @@ def _selected_kernel_struct(self, config: KernelConfig, kernel_name: str) -> str constexpr const char* KERNEL_NAME = {ns_name}::KERNEL_NAME; using ADataType = {self.tm.DTYPE_TO_CK_QUALIFIED[self.datatype]}; using BDataType = {self.tm.DTYPE_TO_CK_QUALIFIED[self.datatype]}; -using CDataType = {self.tm.DTYPE_TO_CK_QUALIFIED[self.tm.get_output_dtype(self.datatype)]}; -using AccDataType = float; +using CDataType = {self.tm.DTYPE_TO_CK_QUALIFIED[output_dtype]}; +using AccDataType = {self.tm.DTYPE_TO_CK_QUALIFIED[acc_dtype]}; +using ALayout = {ns_name}::ALayout; +using BLayout = {ns_name}::BLayout; +using CLayout = {ns_name}::CLayout; + +// KernelKey field descriptors for the force-included kernel. +// The ctypes library builds the registry KernelKey from these so the +// registered entry reflects this kernel's real traits (not a hard-coded +// fp16/rcr default). Enum-valued fields are emitted as the exact strings +// consumed by string_to_dtype/layout/pipeline/scheduler/epilogue in +// kernel_key.hpp; shape/flag fields are emitted as numeric/0-1 literals. +#define GEMM_KEY_DTYPE_A "{self.datatype}" +#define GEMM_KEY_DTYPE_B "{self.datatype}" +#define GEMM_KEY_DTYPE_C "{output_dtype}" +#define GEMM_KEY_DTYPE_ACC "{acc_dtype}" +#define GEMM_KEY_LAYOUT_A "{self.layout[0]}" +#define GEMM_KEY_LAYOUT_B "{self.layout[1]}" +#define GEMM_KEY_LAYOUT_C "{self.layout[2]}" +#define GEMM_KEY_PIPELINE "{tr.pipeline}" +#define GEMM_KEY_SCHEDULER "{tr.scheduler}" +#define GEMM_KEY_EPILOGUE "{tr.epilogue}" +#define GEMM_KEY_TILE_M {t.tile_m} +#define GEMM_KEY_TILE_N {t.tile_n} +#define GEMM_KEY_TILE_K {t.tile_k} +#define GEMM_KEY_WAVE_M {t.warp_m} +#define GEMM_KEY_WAVE_N {t.warp_n} +#define GEMM_KEY_WAVE_K {t.warp_k} +#define GEMM_KEY_WARP_TILE_M {t.warp_tile_m} +#define GEMM_KEY_WARP_TILE_N {t.warp_tile_n} +#define GEMM_KEY_WARP_TILE_K {t.warp_tile_k} +#define GEMM_KEY_BLOCK_SIZE {config.block_size} +#define GEMM_KEY_NUM_WAVE_GROUPS {config.num_wave_groups} +#define GEMM_KEY_PAD_M {int(tr.pad_m)} +#define GEMM_KEY_PAD_N {int(tr.pad_n)} +#define GEMM_KEY_PAD_K {int(tr.pad_k)} +#define GEMM_KEY_PERSISTENT {int(tr.persistent)} +#define GEMM_KEY_DOUBLE_BUFFER {int(tr.pipeline == "compv4" or tr.pipeline == "preshufflev2")} +#define GEMM_KEY_PRESHUFFLE {int(config.preshuffle)} +#define GEMM_KEY_TRANSPOSE_C 0 +#define GEMM_KEY_GROUPED 0 +#define GEMM_KEY_SPLIT_K 1 +using ALayout = {ns_name}::ALayout; +using BLayout = {ns_name}::BLayout; +using CLayout = {ns_name}::CLayout; #endif // CK_TILE_SINGLE_KERNEL_INCLUDE """ @@ -545,6 +644,10 @@ def _launch_function(self, config: KernelConfig) -> str: """Generate launch function""" if config.variant == GemmVariant.MULTI_D: return self._launch_function_multi_d(config) + if config.variant == GemmVariant.GROUPED: + return self._launch_function_grouped(config) + if config.variant == GemmVariant.STREAM_K: + return self._launch_function_streamk(config) if config.preshuffle: return self._launch_function_preshuffle(config) return self._launch_function_standard(config) @@ -597,6 +700,69 @@ def _launch_function_standard(self, config: KernelConfig) -> str: return ave_time; }}""" + def _launch_function_grouped(self, config: KernelConfig) -> str: + """Generate launch function for grouped GEMM. + + Follows the dispatcher's workspace idiom (see grouped_conv stream-K launch in + unified_grouped_conv_codegen.py): signature is (args, stream); the device + workspace is allocated internally via DeviceMem rather than passed in. The + grouped kernel's per-group arg vector is built with MakeKargs, copied to the + workspace, and the device pointer + group count are passed to the kernel. + """ + persistent = config.trait.persistent + grid_expr = ( + "GemmKernel::MaxOccupancyGridSize(stream)" + if persistent + else "dim3(kargs.empty() ? 0 : kargs.back().block_end, 1, 1)" + ) + return f""" + static float launch(const std::vector>& gemm_descs, + const stream_config& stream) {{ + if(gemm_descs.empty()) return 0.0f; + + float ave_time{{0}}; + + constexpr auto scheduler = {self.tm.SCHEDULER_TO_CK[config.trait.scheduler]}; + + using UniversalGemmProblem = UniversalGemmPipelineProblem< + ADataType, BDataType, AccDataType, TileShape, + TileGemmUniversalTraits, + scheduler>; + + using GemmPipeline = {self.tm.PIPELINE_TO_CK[config.trait.pipeline]}; + {self._epilogue_code(config)} + + using GemmKernel = ck_tile::GroupedGemmKernel; + + auto kargs = GemmKernel::MakeKargs(gemm_descs); + if(!GemmKernel::IsSupportedArgument(kargs)) {{ + throw std::runtime_error("Arguments not supported for grouped gemm kernel"); + }} + + // Workspace allocated internally (dispatcher idiom, mirrors grouped_conv stream-K). + const std::size_t ws_size = kargs.size() * sizeof(ck_tile::GemmTransKernelArg<>); + ck_tile::DeviceMem workspace_dev(ws_size); + HIP_CHECK_ERROR(hipMemcpyWithStream(workspace_dev.GetDeviceBuffer(), + kargs.data(), + ws_size, + hipMemcpyHostToDevice, + stream.stream_id_)); + + const dim3 grids = {grid_expr}; + const dim3 blocks = GemmKernel::BlockSize(); + + constexpr int kBlockPerCu = {config.k_block_per_cu}; + ave_time = launch_kernel(stream, + make_kernel(GemmKernel{{}}, grids, blocks, 0, + cast_pointer_to_constant_address_space(workspace_dev.GetDeviceBuffer()), + kargs.size())); + + return ave_time; + }}""" + def _launch_function_preshuffle(self, config: KernelConfig) -> str: """Generate launch function for preshuffle GEMM (weight preshuffle variant) @@ -725,6 +891,162 @@ def _launch_function_multi_d(self, config: KernelConfig) -> str: return launch(multi_d_args, stream); }}""" + def _launch_function_streamk(self, config: KernelConfig) -> str: + """Generate launch function for Stream-K GEMM (the dispatcher way). + + Stream-K is a single GEMM that splits the K dimension across CUs and + reduces partial results through a device workspace. Unlike Tile Engine + (which takes an external workspace pointer), the dispatcher allocates the + workspace INTERNALLY via DeviceMem inside launch(args, stream). + + The reduction strategy is taken from the config (atomic/linear/tree). + Atomic: partial tiles atomic-add into C, so C is zeroed before every + kernel invocation. Linear/Tree: partials accumulate through the device + workspace, which is zeroed instead. Both are handled by the preprocess + callback passed to launch_kernel_time_mask. + """ + reduction_ck = { + "atomic": "Atomic", + "linear": "Linear", + "tree": "Tree", + }[config.reduction_strategy] + # The Atomic strategy zeroes C with a row-major hipMemset2D (pitch = + # stride_E rows of N elems). A column-major C would be zeroed incorrectly + # and atomic accumulation would then corrupt results, so fail loudly at + # compile time rather than silently. Linear/Tree zero the workspace, not C, + # so they carry no such requirement. + c_rowmajor_assert = ( + """ + static_assert( + std::is_same_v, + ck_tile::tensor_layout::gemm::RowMajor>, + "Stream-K Atomic reduction requires a row-major C: the hipMemset2D C-reset " + "assumes row-major layout and would zero a column-major C incorrectly."); +""" + if config.reduction_strategy == "atomic" + else "" + ) + return f"""{c_rowmajor_assert} + // ---- Stream-K kernel type, hoisted to struct scope so the workspace API + // ---- (GetWorkSpaceSize + external-workspace launch) can reuse the same type. ---- + static constexpr auto SkScheduler = {self.tm.SCHEDULER_TO_CK[config.trait.scheduler]}; + static constexpr auto SkReductionStrategy = ck_tile::StreamKReductionStrategy::{reduction_ck}; + static constexpr int SkBlockPerCu = {config.k_block_per_cu}; + + using SkGemmUniversalTraits = TileGemmUniversalTraits; + using SkUniversalGemmProblem = UniversalGemmPipelineProblem< + ADataType, BDataType, AccDataType, TileShape, SkGemmUniversalTraits, SkScheduler>; + using SkGemmPipeline = {self.tm.PIPELINE_TO_CK[config.trait.pipeline]}; + {self._epilogue_code(config)} + using SkStreamKTilePartitioner = + ck_tile::StreamKTilePartitioner; + using StreamKGemmKernel = + ck_tile::StreamKKernel; + + // Device workspace (bytes) this kernel needs for `args`. 0 for Atomic; + // >0 for Linear/Tree. The Dispatcher uses this to size the buffer it owns. + static std::size_t GetWorkSpaceSize(const ck_tile::StreamKHostArgs& args) {{ + auto kargs = StreamKGemmKernel::MakeKernelArgs(args); + return StreamKGemmKernel::GetWorkSpaceSize(kargs); + }} + + // Whether the kernel can actually partition this problem (enough tiles across + // CUs). Lets the dispatcher's supports() reject too-small problems and fall + // back to a non-Stream-K kernel instead of throwing at launch. + static bool IsSupported(const ck_tile::StreamKHostArgs& args) {{ + return StreamKGemmKernel::IsSupportedArgument(StreamKGemmKernel::MakeKernelArgs(args)); + }} + + // Internal-workspace launch: allocates a fresh DeviceMem on every call. + // Kept unchanged for the bridge ctypes lib and the standalone 03 driver. + static float launch(const ck_tile::StreamKHostArgs& args, const stream_config& stream) {{ + auto kargs = StreamKGemmKernel::MakeKernelArgs(args); + const auto ws_size = StreamKGemmKernel::GetWorkSpaceSize(kargs); + ck_tile::DeviceMem workspace_dev(ws_size); + workspace_dev.SetZero(); + StreamKGemmKernel::SetWorkSpacePointer(kargs, workspace_dev.GetDeviceBuffer()); + + if (!StreamKGemmKernel::IsSupportedArgument(kargs)) {{ + throw std::runtime_error("Arguments not supported for stream-k kernel!"); + }} + + const dim3 grids = StreamKGemmKernel::GridSize(kargs.tile_partitioner); + const dim3 blocks = StreamKGemmKernel::BlockSize(); + + // Atomic reduction accumulates into C, so reset buffers before each run. + auto reset_data_buffers = [&]() {{ + if constexpr (SkReductionStrategy == ck_tile::StreamKReductionStrategy::Atomic) {{ + // Stride-aware: CLayout is row-major with stride_E elems/row, so a + // padded C is zeroed correctly (not just the contiguous M*N case). + if(hipMemset2DAsync(args.e_ptr, + args.stride_E * sizeof(CDataType), + 0, + args.N * sizeof(CDataType), + args.M, + stream.stream_id_) != hipSuccess) {{ + throw std::runtime_error( + "stream-k: hipMemset2DAsync failed to reset C between iterations"); + }} + }} else {{ + workspace_dev.SetZero(); + }} + }}; + std::function preprocess = reset_data_buffers; + + float ave_time = launch_kernel_time_mask(stream, preprocess, + make_kernel(StreamKGemmKernel{{}}, grids, blocks, 0, kargs)); + return ave_time; + }} + + // External-workspace launch (PR-D): the Dispatcher owns and reuses the + // reduction buffer and passes it in. `workspace` may be null for Atomic + // (size 0). The per-iteration reset stays here because it needs CDataType + // and the reduction strategy, which the dtype-erased Dispatcher lacks. + static float launch(const ck_tile::StreamKHostArgs& args, const stream_config& stream, + void* workspace) {{ + auto kargs = StreamKGemmKernel::MakeKernelArgs(args); + const auto ws_size = StreamKGemmKernel::GetWorkSpaceSize(kargs); + if (workspace != nullptr) {{ + StreamKGemmKernel::SetWorkSpacePointer(kargs, workspace); + }} + + if (!StreamKGemmKernel::IsSupportedArgument(kargs)) {{ + throw std::runtime_error("Arguments not supported for stream-k kernel!"); + }} + + const dim3 grids = StreamKGemmKernel::GridSize(kargs.tile_partitioner); + const dim3 blocks = StreamKGemmKernel::BlockSize(); + + auto reset_data_buffers = [&]() {{ + if constexpr (SkReductionStrategy == ck_tile::StreamKReductionStrategy::Atomic) {{ + // Stride-aware: CLayout is row-major with stride_E elems/row, so a + // padded C is zeroed correctly (not just the contiguous M*N case). + if(hipMemset2DAsync(args.e_ptr, + args.stride_E * sizeof(CDataType), + 0, + args.N * sizeof(CDataType), + args.M, + stream.stream_id_) != hipSuccess) {{ + throw std::runtime_error( + "stream-k: hipMemset2DAsync failed to reset C between iterations"); + }} + }} else {{ + if(hipMemsetAsync(workspace, 0, ws_size, stream.stream_id_) != hipSuccess) {{ + throw std::runtime_error( + "stream-k: hipMemsetAsync failed to reset reduction workspace"); + }} + }} + }}; + std::function preprocess = reset_data_buffers; + + float ave_time = launch_kernel_time_mask(stream, preprocess, + make_kernel(StreamKGemmKernel{{}}, grids, blocks, 0, kargs)); + return ave_time; + }}""" + def _epilogue_code(self, config: KernelConfig) -> str: """Generate epilogue code""" if config.variant == GemmVariant.MULTI_D: @@ -774,14 +1096,52 @@ def generate( """Generate dispatcher wrapper""" kernel_name = KernelNaming.generate(config, self.datatype, self.layout) output_dtype = self.tm.get_output_dtype(self.datatype) + acc_dtype = self.tm.get_acc_dtype(self.datatype) rel_path = kernel_path.relative_to(output_dir) + # Stream-K kernels need the Stream-K backend (StreamKHostArgs launch) and + # the SK key fields, so the registry can tell atomic/linear/tree apart and + # the right launch path compiles. All other variants use the regular backend. + is_streamk = config.variant == GemmVariant.STREAM_K + backend_inc = ( + "generated_tile_backend_streamk.hpp" + if is_streamk + else "generated_kernel_backend.hpp" + ) + + sk_fields = "" + if is_streamk: + rs = {"atomic": "Atomic", "linear": "Linear", "tree": "Tree"}[ + config.reduction_strategy + ] + ws = str(config.reduction_strategy != "atomic").lower() + sk_fields = f""" + key.algorithm.pad_m = {str(config.trait.pad_m).lower()}; + key.algorithm.pad_n = {str(config.trait.pad_n).lower()}; + key.algorithm.pad_k = {str(config.trait.pad_k).lower()}; + key.algorithm.streamk = true; + key.algorithm.reduction_strategy = ::ck_tile::dispatcher::ReductionStrategy::{rs}; + key.algorithm.workspace = {ws};""" + + if is_streamk: + ret_stmt = ( + "return backends::create_generated_streamk_kernel" + f'(key, "{kernel_name}");' + ) + else: + ret_stmt = ( + "return std::make_shared>" + f'(key, "{kernel_name}");' + ) + return f"""// SPDX-License-Identifier: MIT // Auto-generated dispatcher wrapper #pragma once #include "ck_tile/dispatcher.hpp" -#include "ck_tile/dispatcher/backends/generated_kernel_backend.hpp" +#include "ck_tile/dispatcher/backends/{backend_inc}" #include "{rel_path}" namespace ck_tile {{ @@ -808,7 +1168,7 @@ def generate( key.signature.dtype_a = {self.tm.DTYPE_TO_DISPATCHER[self.datatype]}; key.signature.dtype_b = {self.tm.DTYPE_TO_DISPATCHER[self.datatype]}; key.signature.dtype_c = {self.tm.DTYPE_TO_DISPATCHER[output_dtype]}; - key.signature.dtype_acc = DataType::FP32; + key.signature.dtype_acc = {self.tm.DTYPE_TO_DISPATCHER[acc_dtype]}; key.signature.layout_a = {self.tm.LAYOUT_TO_DISPATCHER[self.layout[0]]}; key.signature.layout_b = {self.tm.LAYOUT_TO_DISPATCHER[self.layout[1]]}; key.signature.layout_c = {self.tm.LAYOUT_TO_DISPATCHER[self.layout[2]]}; @@ -832,11 +1192,11 @@ def generate( key.algorithm.persistent = {str(config.trait.persistent).lower()}; key.algorithm.preshuffle = {str(config.preshuffle).lower()}; key.algorithm.transpose_c = false; - key.algorithm.num_wave_groups = {config.num_wave_groups}; - + key.algorithm.num_wave_groups = {config.num_wave_groups};{sk_fields} + key.gfx_arch = gfx_arch; - - return std::make_shared>(key, "{kernel_name}"); + + {ret_stmt} }} }}}}}} @@ -941,6 +1301,10 @@ def _load_config(self, config_file: Optional[Path]) -> Dict: "elementwise_ops": ["MultiDAdd", "MultiDMultiply"], "num_d_tensors": [1, 2], }, + "streamk_config": { + # Each reduction strategy compiles to a separate kernel binary. + "reduction_strategy": ["atomic", "linear", "tree"], + }, } def generate_all(self, parallel: bool = True) -> Dict: @@ -1014,11 +1378,36 @@ def _get_preselected_configs(self) -> List[KernelConfig]: log.error(f"Invalid preselected set: {e}") return [] + @staticmethod + def _cshuffle_repeat_ok(tile: TileConfig) -> bool: + """CShuffle-store correctness gate. + + The CShuffle epilogue stores the accumulator back through LDS in + power-of-two MRepeat/NRepeat chunks, so a tile whose per-wave repeat + count -- tile / (warp * warp_tile) -- is not a power of two is + mis-stored and yields numerically WRONG results at runtime. The kernel + still compiles (the epilogue's static_asserts only check divisibility, + which such tiles satisfy), so it must be filtered in codegen. Observed + on MI350 for tile_m=192 (MRepeat = 192 / (2*32) = 3): verified incorrect + on BOTH the bridge and Tile Engine at every shape, including shapes + divisible by 192. Power-of-two tiles (64/128/256) are unaffected. + + This is CShuffle-specific: the "default" (DefaultGemm2DEpilogue) path + stores directly (not through the LDS repack) and is numerically correct + for non-pow2 repeats -- verified on gfx942 at tile_m=192/MRepeat=3 + (max_rel ~5e-4 across shapes divisible by 192, while the same tile under + CShuffle returns garbage, max_rel ~1.3). Only call this for kernels + whose resolved epilogue is "cshuffle". + """ + m_repeat = tile.tile_m // (tile.warp_m * tile.warp_tile_m) + n_repeat = tile.tile_n // (tile.warp_n * tile.warp_tile_n) + return _is_power_of_two(m_repeat) and _is_power_of_two(n_repeat) + def _get_configs_for_variant(self, variant: GemmVariant) -> List[KernelConfig]: """Get all configurations for a variant Args: - variant: GEMM variant (STANDARD, PRESHUFFLE, MULTI_D) + variant: GEMM variant (STANDARD, PRESHUFFLE, MULTI_D, GROUPED) Returns: List of valid kernel configurations for the variant @@ -1030,14 +1419,44 @@ def _get_configs_for_variant(self, variant: GemmVariant) -> List[KernelConfig]: trait_configs = self._get_trait_configs() for tile, trait in itertools.product(tile_configs, trait_configs): - # Perform variant-specific architecture validation + # Perform variant-specific architecture validation against the + # trait's ACTUAL pipeline/scheduler (not a hard-coded compv4). if self.arch_filter and HAS_ARCH_FILTER: - if not self._is_tile_arch_valid(tile, variant): + if not self._is_tile_arch_valid( + tile, + variant, + pipeline=trait.pipeline, + scheduler=trait.scheduler, + ): continue if variant == GemmVariant.STANDARD: + # CShuffle-store correctness gate: skip non-pow2 repeat tiles + # only for the cshuffle epilogue (see _cshuffle_repeat_ok). The + # "default" epilogue is correct with non-pow2 repeats, so it is + # NOT gated here. + if trait.epilogue == "cshuffle" and not self._cshuffle_repeat_ok(tile): + continue configs.append(KernelConfig(tile=tile, trait=trait, variant=variant)) + elif variant == GemmVariant.STREAM_K: + # Stream-K reuses the standard trait space but requires the cshuffle + # epilogue (the only epilogue the stream-K kernel supports). Each + # reduction strategy (atomic/linear/tree) is a distinct compiled + # kernel, so we expand one config per requested strategy. + if trait.epilogue == "cshuffle": + streamk_cfg = self.config.get("streamk_config", {}) + strategies = streamk_cfg.get("reduction_strategy", ["atomic"]) + for reduction_strategy in strategies: + configs.append( + KernelConfig( + tile=tile, + trait=trait, + variant=variant, + reduction_strategy=reduction_strategy, + ) + ) + elif variant == GemmVariant.PRESHUFFLE: # Preshuffle needs specific pipeline (preshufflev2) and scheduler (default) # Skip configs that don't use preshuffle-compatible traits @@ -1052,7 +1471,13 @@ def _get_configs_for_variant(self, variant: GemmVariant) -> List[KernelConfig]: ) # Only generate one preshuffle config per tile (not per trait) # since preshuffle has fixed pipeline/scheduler - if trait.pipeline == "compv3" and trait.scheduler == "intrawave": + # Preshuffle always uses the cshuffle epilogue, so the + # CShuffle-store pow2 repeat gate always applies here. + if ( + trait.pipeline == "compv3" + and trait.scheduler == "intrawave" + and self._cshuffle_repeat_ok(tile) + ): configs.append( KernelConfig( tile=tile, @@ -1063,6 +1488,10 @@ def _get_configs_for_variant(self, variant: GemmVariant) -> List[KernelConfig]: ) elif variant == GemmVariant.MULTI_D: + # CShuffle-store correctness gate: applies only when the + # (swept) epilogue is cshuffle; the default epilogue is exempt. + if trait.epilogue == "cshuffle" and not self._cshuffle_repeat_ok(tile): + continue multi_d = self.config.get("multi_d_config", {}) for ew_op, num_d in itertools.product( multi_d.get("elementwise_ops", ["MultiDAdd"]), @@ -1079,6 +1508,11 @@ def _get_configs_for_variant(self, variant: GemmVariant) -> List[KernelConfig]: ) ) + elif variant == GemmVariant.GROUPED: + # Grouped GEMM uses the same tile/trait configs as STANDARD — + # the only difference is the kernel type (GroupedGemmKernel vs GemmKernel) + configs.append(KernelConfig(tile=tile, trait=trait, variant=variant)) + return configs def _get_tile_configs(self) -> List[TileConfig]: @@ -1105,9 +1539,28 @@ def _get_tile_configs(self) -> List[TileConfig]: rejected_count += 1 continue - # Architecture-specific validation + # NOTE: the CShuffle-store pow2 MRepeat/NRepeat correctness gate is + # NOT applied here. It is epilogue-specific (only the CShuffle + # epilogue mis-stores non-pow2 repeats; the "default" epilogue is + # correct), so it is applied per (tile, trait) in + # _get_configs_for_variant once the epilogue is known. See + # _cshuffle_repeat_ok. + + # Architecture-specific validation. This is a pre-filter run before + # tiles are paired with traits, so keep a tile if it is legal under + # ANY configured pipeline/scheduler; the precise per-trait check + # happens later in _get_configs_for_variant. Filtering here with a + # single hard-coded pipeline (compv4) wrongly dropped tiles that are + # legal under mem/compv3. if self.arch_filter and HAS_ARCH_FILTER: - if not self._is_tile_arch_valid(tile): + trait_cfg = self.config.get("trait_config", {}) + pipelines = trait_cfg.get("pipeline") or ["compv4"] + schedulers = trait_cfg.get("scheduler") or ["intrawave"] + if not any( + self._is_tile_arch_valid(tile, pipeline=pl, scheduler=sc) + for pl in pipelines + for sc in schedulers + ): rejected_count += 1 continue @@ -1119,13 +1572,23 @@ def _get_tile_configs(self) -> List[TileConfig]: return configs def _is_tile_arch_valid( - self, tile: TileConfig, variant: GemmVariant = None + self, + tile: TileConfig, + variant: GemmVariant = None, + pipeline: str = None, + scheduler: str = None, ) -> bool: """Check if tile configuration is valid for target architecture Args: tile: Tile configuration to validate variant: GEMM variant (affects operator-specific constraints) + pipeline: Trait pipeline to validate against. Pass the config's + actual pipeline -- omitting it falls back to ``compv4``, whose + MFMA constraints are stricter than ``mem``/``compv3`` and would + wrongly reject tiles that are legal under those pipelines. + scheduler: Trait scheduler to validate against (defaults to + ``intrawave`` for the same reason). """ if not self.arch_filter or not HAS_ARCH_FILTER: return True @@ -1146,14 +1609,18 @@ def _is_tile_arch_valid( # Map GEMM variant to operator type for validation operator = None - pipeline = "compv4" # Default - scheduler = "intrawave" # Default + if pipeline is None: + pipeline = "compv4" # Default (representative compute pipeline) + if scheduler is None: + scheduler = "intrawave" # Default if OperatorType is not None and variant is not None: variant_to_operator = { GemmVariant.STANDARD: OperatorType.GEMM, GemmVariant.PRESHUFFLE: OperatorType.GEMM_PRESHUFFLE, GemmVariant.MULTI_D: OperatorType.GEMM_MULTI_D, + GemmVariant.GROUPED: OperatorType.GEMM_GROUPED, + GemmVariant.STREAM_K: OperatorType.GEMM_STREAMK, } operator = variant_to_operator.get(variant, OperatorType.GEMM) @@ -1403,7 +1870,7 @@ def main(): parser.add_argument( "--variants", nargs="+", - choices=["standard", "preshuffle", "multi_d"], + choices=["standard", "preshuffle", "multi_d", "stream_k" ,"grouped"], default=["standard"], help="Variants to generate", ) diff --git a/dispatcher/codegen/unified_grouped_conv_codegen.py b/dispatcher/codegen/unified_grouped_conv_codegen.py index 7f6a4d416b0..8ddea2d8b40 100644 --- a/dispatcher/codegen/unified_grouped_conv_codegen.py +++ b/dispatcher/codegen/unified_grouped_conv_codegen.py @@ -16,7 +16,7 @@ """ import argparse -import json +import importlib import logging from pathlib import Path from typing import List, Optional, Tuple, Union @@ -42,32 +42,20 @@ ArchFilter = None OperatorType = None -# Import tile configurations and shared validation rules from grouped_config_rules -# (single source of truth) -try: - from grouped_config_rules import ( - COMMON_TILES, - TILE_TO_WAVE, - TILE_TO_WARP, - VARIANT_PIPELINES, - BWD_WEIGHT_TILES, - COMPV4_COMPATIBLE_TILES, - # Shared validation functions - check_vectors, - check_warp_coverage, - check_bwd_data_vec_coverage, - is_valid_pipeline_for_variant, - is_streamk_valid_for_variant, - ) - HAS_TILE_CONFIGS = True -except ImportError: - HAS_TILE_CONFIGS = False - COMMON_TILES = [] - TILE_TO_WAVE = {} - TILE_TO_WARP = {} - VARIANT_PIPELINES = {} - BWD_WEIGHT_TILES = [] - COMPV4_COMPATIBLE_TILES = [] +# Shared per-config validation helpers used by GroupedConvKernelConfig below. +# The full set of rule helpers (tiles, waves, vecs, pipelines, ...) is consumed +# inside each rule set's get_configs() entry point, not here. +from grouped_conv.grouped_config_rules_full import ( + check_vectors, + is_valid_pipeline_for_variant, + is_streamk_valid_for_variant, +) +from grouped_conv.grouped_config_rules_default import ( + check_wmma_instance, + check_wmma_native_warp_tile, + get_warp_size, + check_tile_coverage, +) # ============================================================================ @@ -163,7 +151,7 @@ def deduce_block_per_cu(pipeline: str, double_smem_buffer: bool) -> int: # Pipelines that mandate double LDS (no user choice) _ALWAYS_DOUBLE = {"compv4", "comp_async"} # Pipelines that mandate single LDS (no user choice) - _ALWAYS_SINGLE = {"compv1", "compv2", "basic_v1", "basic_v2", "basic_async_v1"} + _ALWAYS_SINGLE = {"compv1", "compv2", "basic_v1", "basic_v2", "basic_async_v1", "wavelet"} if pipeline in _ALWAYS_DOUBLE: return 1 @@ -204,6 +192,10 @@ class GroupedConvKernelConfig: # Double buffering double_smem_buffer: bool = False + # Optional dtype tag — when set, this config is only generated for this dtype. + # Used by get_default_configs() when wave/warp pairs are dtype-specific. + datatype: Optional[str] = None + def __post_init__(self): if self.vector_sizes is not None: self.vector_size_a, self.vector_size_b, self.vector_size_c = ( @@ -259,6 +251,7 @@ def name(self, datatype: str) -> str: GroupedConvVariant.FORWARD: "fwd", GroupedConvVariant.BACKWARD_DATA: "bwd_data", GroupedConvVariant.BACKWARD_WEIGHT: "bwd_weight", + GroupedConvVariant.FORWARD_DEPTHWISE: "fwd", }[self.variant] # Core identity: variant, dtype, layout, dims @@ -325,7 +318,7 @@ def name(self, datatype: str) -> str: def is_valid_for_arch(self, arch: Optional[str] = None) -> bool: """Check if configuration is valid for target architecture. - Uses shared validation rules from grouped_config_rules.py. + Uses shared validation rules from grouped_config_rules_default.py. """ target_arch = arch if arch is not None else self.arch @@ -353,34 +346,6 @@ def is_valid_for_arch(self, arch: Optional[str] = None) -> bool: ) return False - # Reject tile dims that exceed single-warp vector load coverage - t = self.tile - if not check_warp_coverage( - t.tile_m, t.tile_n, t.tile_k, - self.vector_size_a, self.vector_size_b, - variant=variant_str, - ): - log.warning( - f"Rejecting config: tile exceeds warp coverage " - f"(tile={t.tile_m}x{t.tile_n}x{t.tile_k}, " - f"vec_a={self.vector_size_a}, vec_b={self.vector_size_b})" - ) - return False - - # Bwd_data only: vector width must not exceed elements per thread - if self.variant == GroupedConvVariant.BACKWARD_DATA: - if not check_bwd_data_vec_coverage( - t.tile_m, t.tile_n, t.tile_k, - t.warp_m, t.warp_n, t.warp_k, - self.vector_size_a, self.vector_size_b, - ): - log.warning( - f"Rejecting bwd_data config: vec exceeds tile coverage " - f"(tile={t.tile_m}x{t.tile_n}x{t.tile_k}, " - f"vec_a={self.vector_size_a}, vec_b={self.vector_size_b})" - ) - return False - # Check warp configuration (from arch_specs) try: from arch_specs_generated import WARP_SUPPORTED_COMBINATIONS @@ -388,12 +353,41 @@ def is_valid_for_arch(self, arch: Optional[str] = None) -> bool: supported = WARP_SUPPORTED_COMBINATIONS.get(target_arch) if supported is None: return False # Unknown architecture - warp_cfg = [t.warp_m, t.warp_n, t.warp_k] + warp_cfg = [self.tile.warp_m, self.tile.warp_n, self.tile.warp_k] if warp_cfg not in supported: return False except ImportError: pass # Allow if arch_specs not available + warp_size = get_warp_size(target_arch) + t = self.tile + + # WMMA-specific constraints for warp_size=32 targets (gfx11/gfx12) + if not check_wmma_instance( + warp_size=warp_size, + k_per_block=t.tile_k, + k_warp=t.warp_k, + k_per_xdl=t.warp_tile_k, + m_per_xdl=t.warp_tile_m, + dtype=self.datatype if self.datatype is not None else "float", + ): + return False + + block_size = warp_size * t.warp_k * t.warp_m * t.warp_n + if not check_tile_coverage( + tile_m=t.tile_m, tile_n=t.tile_n, tile_k=t.tile_k, + vec_a = self.vector_size_a, vec_b = self.vector_size_b, pipeline_version=tr.pipeline, + block_size=block_size, + ): + return False + + # Native warp-tile constraint: stream-K unsupported on warp_size=32 + if not check_wmma_native_warp_tile( + warp_size=warp_size, + streamk_enabled=tr.streamk_config.streamk_enabled, + ): + return False + return True @@ -470,6 +464,7 @@ class GroupedConvTypeMappings: "compv6": "GemmPipeline::COMPUTE_V6", "comp_async": "GemmPipeline::COMPUTE_ASYNC", "basic_async_v1": "GemmPipeline::BASIC_ASYNC_V1", + "wavelet": "GemmPipeline::WAVELET", } SCHEDULER_TO_CK = { @@ -691,7 +686,16 @@ def _kernel_instance( # whose TailHandler takes (run_func, has_hot_loop) and invokes # run_func(bool_constant<...>) -- 1 lambda arg. Other pipelines pass # (run_func, has_hot_loop, tail_number) and invoke 2-arg run_func. - if tr.pipeline in ("compv1", "basic_v1", "basic_async_v1"): + if tr.pipeline == "wavelet": + # The wavelet pipeline has no Base*/TailHandler. Its operator() + # consumes num_loop at runtime, so there is no compile-time hot-loop + # / tail dispatch -- launch the kernel once directly. (The Run lambda + # ignores has_hot_loop_/tail_number_ for the conv kernel.) + tail_handler_call = "Run(has_hot_loop, tail_num);" + run_lambda_signature = ( + "[&](const auto has_hot_loop_, const auto tail_number_)" + ) + elif tr.pipeline in ("compv1", "basic_v1", "basic_async_v1"): tail_handler_call = "BaseGemmPipeline::TailHandler(Run, has_hot_loop);" run_lambda_signature = "[&](const auto has_hot_loop_)" else: @@ -859,6 +863,9 @@ def _kernel_instance( # (from conv_configs.hpp PipelineTypeTraits -- basic_v1/mem/compv3) # CompV4/V5/V6/comp_async/basic_async_v1 use their own default policies. _CONV_POLICY_PIPELINES = {"basic_v1", "basic_v2", "compv1", "compv2", "mem", "compv3"} + # Number of additional load waves for the Wavelet pipeline + # (matches TilePipelineType in conv_tile_tuning_params.hpp) + _WAVELET_NUM_LOAD_WAVES = 4 _SPECIALIZATION_TO_CK = { "default": "ConvolutionSpecialization::Default", @@ -886,6 +893,7 @@ def _get_pipeline(self, pipeline: str) -> str: "compv6": "GemmPipelineAgBgCrCompV6", "comp_async": "GemmPipelineAgBgCrCompAsync", "basic_async_v1": "GemmPipelineAGmemBGmemCRegAsyncV1", + "wavelet": "GemmPipelineAgBgCrWavelet", } return pipelines.get(pipeline, "GemmPipelineAgBgCrCompV3") @@ -896,6 +904,8 @@ def _get_pipeline_template_args(self, pipeline: str, problem_type: str) -> str: as a second template argument for conv-specific LDS banking. """ base = self._get_pipeline(pipeline) + if pipeline == "wavelet": + return f"{base}<{problem_type}, GroupedConvUniversalPipelineAgBgCrPolicy, {self._WAVELET_NUM_LOAD_WAVES}>" if pipeline in self._CONV_POLICY_PIPELINES: return f"{base}<{problem_type}, GroupedConvUniversalPipelineAgBgCrPolicy>" return f"{base}<{problem_type}>" @@ -918,6 +928,9 @@ def _get_base_pipeline(self, pipeline: str) -> str: "compv6": "BaseGemmPipelineAgBgCrCompV6", "comp_async": "BaseGemmPipelineAgBgCrCompAsync", "basic_async_v1": "BaseGemmPipelineAGmemBGmemCRegV1", + # The wavelet pipeline has no separate Base class; it exposes the + # BlockHasHotloop / GetBlockLoopTailNum statics directly. + "wavelet": "GemmPipelineAgBgCrWavelet", } return pipelines.get(pipeline, "BaseGemmPipelineAgBgCrCompV3") @@ -1669,6 +1682,7 @@ class GroupedConvDispatcherWrapperGenerator: "compv6": "Pipeline::CompV6", "preshufflev1": "Pipeline::PreShuffleV1", "preshufflev2": "Pipeline::PreShuffleV2", + "wavelet": "Pipeline::Wavelet", } SCHEDULER_TO_DISPATCHER = { @@ -1731,7 +1745,7 @@ def generate( host_args_type = "GroupedConvBwdWeightHostArgs" conv_type_str = "bwd_weight" - layout = config.layout if is_depthwise else "nhwgc" + layout = config.layout # Algorithm key fields differ between implicit GEMM and depthwise algorithms if is_depthwise: @@ -1803,298 +1817,61 @@ def generate( """ -# ============================================================================ -# Configuration Parser -# ============================================================================ - - -def load_depthwise_configs_from_json( - data: dict, - arch: str = "gfx942", - instance_id: Optional[int] = None, -) -> List[DepthwiseConvKernelConfig]: - """Load depthwise convolution configs from parsed JSON data. - - Args: - data: Parsed JSON config data - arch: Target GPU architecture - instance_id: If specified, load only the instance with this ID - - Returns: - List of DepthwiseConvKernelConfig objects - """ - ndim_spatial = data["ndim_spatial"] - layout = data["layout"] - datatype = data["datatype"] - - instances = data["instances"] - if instance_id is not None: - instances = [inst for inst in instances if inst["id"] == instance_id] - if not instances: - raise ValueError(f"Instance ID {instance_id} not found in depthwise config") - - configs = [] - for inst in instances: - config = DepthwiseConvKernelConfig( - tile_h=inst["tile_h"], - tile_w=inst["tile_w"], - filt=inst["filt"], - str_h=inst["str_h"], - str_w=inst["str_w"], - pad_h=inst["pad_h"], - pad_w=inst["pad_w"], - nbatch=inst["nbatch"], - sub_h=inst["sub_h"], - sub_w=inst["sub_w"], - in_vec=inst["in_vec"], - out_vec=inst["out_vec"], - ndim_spatial=ndim_spatial, - arch=arch, - layout=layout, - datatype=datatype, - ) - configs.append(config) - - log.info( - f"Loaded {len(configs)} depthwise configs " - f"(layout={layout}, dtype={datatype})" - ) - return configs - - -def load_configs_from_json( - config_path: Path, - arch: str = "gfx942", - instance_id: Optional[int] = None, -) -> List[Union[GroupedConvKernelConfig, DepthwiseConvKernelConfig]]: - """Load kernel configurations from a JSON config file. - - Args: - config_path: Path to JSON config file - arch: Target GPU architecture - instance_id: If specified, load only the instance with this ID - - Returns: - List of GroupedConvKernelConfig objects - """ - with open(config_path, "r") as f: - data = json.load(f) - - variant_map = { - "forward": GroupedConvVariant.FORWARD, - "fwd": GroupedConvVariant.FORWARD, - "forward_depthwise": GroupedConvVariant.FORWARD_DEPTHWISE, - "bwd_data": GroupedConvVariant.BACKWARD_DATA, - "bwd_weight": GroupedConvVariant.BACKWARD_WEIGHT, - } - variant = variant_map.get(data["variant"]) - if variant is None: - raise ValueError(f"Unknown variant: {data['variant']}") - - if variant == GroupedConvVariant.FORWARD_DEPTHWISE: - return load_depthwise_configs_from_json(data, arch, instance_id) - - ndim_spatial = data["ndim_spatial"] - layout = data["layout"] - datatype = data["datatype"] - - instances = data["instances"] - if instance_id is not None: - instances = [inst for inst in instances if inst["id"] == instance_id] - if not instances: - raise ValueError(f"Instance ID {instance_id} not found in {config_path}") - - configs = [] - for inst in instances: - # Map specialization to pipeline constraints - # Specializations like filter1x1_stride1_pad0 don't change the pipeline config - # but are tracked in the trait for kernel naming and runtime checks - - trait = GroupedConvTraitConfig( - pipeline=inst["pipeline"], - scheduler=inst["scheduler"], - epilogue=inst["epilogue"], - pad_m=True, - pad_n=True, - pad_k=True, - double_smem_buffer=inst.get("double_smem_buffer", False), - num_groups_to_merge=inst.get("num_groups_to_merge", 1), - split_image=inst.get("split_image", False), - explicit_gemm=inst.get("explicit_gemm", False), - two_stage=inst.get("two_stage", False), - specialization=inst.get("specialization", "default"), - streamk_config=StreamKConfig( - streamk_enabled=inst.get("streamk_enabled", False), - strategy=StreamKReductionStrategy(inst.get("streamk_reduction_strategy", "TREE")), - streamk_persistent=inst.get("streamk_persistent", False) - ) if inst.get("streamk_enabled", False) else StreamKConfig() - ) - - # compv2/basic_v2 (GemmPipelineAGmemBGmemCRegV2) is not compatible with - # CK Tile's GroupedConvolutionBackwardWeightKernel. The builder maps - # PipelineVersion::V2 to GemmPipelineAgBgCrMem (i.e. "mem"), not to - # GemmPipelineAGmemBGmemCRegV2. Skip if any config somehow has compv2. - if variant == GroupedConvVariant.BACKWARD_WEIGHT and trait.pipeline in ("compv2", "basic_v2"): - log.info(f"Skipping instance {inst['id']}: compv2/basic_v2 pipeline not compatible with CK Tile bwd_weight") - continue - - config = GroupedConvKernelConfig( - tile=TileConfig( - tile_m=inst["tile_m"], - tile_n=inst["tile_n"], - tile_k=inst["tile_k"], - warp_m=inst["warp_m"], - warp_n=inst["warp_n"], - warp_k=inst["warp_k"], - warp_tile_m=inst["warp_tile_m"], - warp_tile_n=inst["warp_tile_n"], - warp_tile_k=inst["warp_tile_k"], - ), - trait=trait, - variant=variant, - ndim_spatial=ndim_spatial, - arch=arch, - layout=layout, - vector_size_a=inst["vector_size_a"], - vector_size_b=inst["vector_size_b"], - vector_size_c=inst["vector_size_c"], - num_wave_groups=inst.get("num_wave_groups", 1), - ) - configs.append(config) - - log.info( - f"Loaded {len(configs)} configs from {config_path} " - f"(variant={data['variant']}, layout={layout}, dtype={datatype})" - ) - return configs +# Each rule set maps to a (module, entry-point) pair with the uniform +# get_configs(arch, variants, ndims, datatypes) signature; get_default_configs +# imports the module and calls the named function, so no rule-set-specific logic +# lives in the codegen. Builder-derived sets (profiler/tests) and subset sets +# (tiny) reuse a shared module's entry points rather than thin wrapper modules. +_RULE_SET_MODULES = { + "default": ("grouped_conv.grouped_config_rules_default", "get_configs"), + "full": ("grouped_conv.grouped_config_rules_full", "get_configs"), + "full-tests": ("grouped_conv.grouped_config_rules_full_tests", "get_configs"), + "profiler": ("grouped_conv.grouped_config_rules_builder", "get_configs_profiler"), + "tests": ("grouped_conv.grouped_config_rules_builder", "get_configs_tests"), + "tiny": ("grouped_conv.grouped_config_rules_full_tests", "get_tiny_configs"), +} def get_default_configs( arch: str = "gfx942", variants: Optional[List[GroupedConvVariant]] = None, ndims: Optional[List[int]] = None, -) -> List[GroupedConvKernelConfig]: + datatypes: Optional[List[str]] = None, + rule_set: str = "profiler", +) -> List[Union[GroupedConvKernelConfig, DepthwiseConvKernelConfig]]: """Get default grouped convolution configurations for target architecture. - Uses tile configurations from grouped_conv_instance_builder.py as single source of truth. - """ - configs = [] + Delegates to the selected rule set's uniform ``get_configs`` entry point. + Args: + arch: Target GPU architecture (e.g., "gfx942", "gfx950"). + variants: Conv variants to generate. Defaults to [FORWARD]. + ndims: Spatial dimensions to generate (2 or 3). Defaults to [2]. + datatypes: Data type strings (e.g., ["fp16", "bf16", "fp32"]). + rule_set: "profiler"/"tests" (CK Builder profiler/tests instance sets + generated in memory from the .conf configs, the build sets), + "full" (full rule-derived per-(variant,ndim,datatype) set), + "full-tests" (~20% stratified subset of "full"), "tiny" + (minimal >=10-config subset of "full-tests"), or "default" + (original heuristic rules). + """ if variants is None: variants = [GroupedConvVariant.FORWARD] if ndims is None: ndims = [2] - - # Import tile configs from instance builder (single source of truth) - if not HAS_TILE_CONFIGS or not COMMON_TILES: - log.warning("grouped_config_rules not available, using fallback tile configs") - # Fallback to minimal set if grouped_config_rules unavailable - fwd_bwd_data_tiles = [ - (128, 128, 32, 2, 2, 32, 32, 16), - (64, 64, 32, 1, 4, 16, 16, 16), - (16, 64, 64, 1, 4, 16, 16, 32), - ] - bwd_weight_tiles = [(16, 64, 64, 1, 4, 16, 16, 32)] - else: - # Build tile list from COMMON_TILES with wave/warp mappings - fwd_bwd_data_tiles = [] - for tile_m, tile_n, tile_k in COMMON_TILES: - tile_key = (tile_m, tile_n, tile_k) - if tile_key in TILE_TO_WAVE and tile_key in TILE_TO_WARP: - wave_m, wave_n, wave_k = TILE_TO_WAVE[tile_key] - warp_m, warp_n, warp_k = TILE_TO_WARP[tile_key] - fwd_bwd_data_tiles.append( - (tile_m, tile_n, tile_k, wave_m, wave_n, warp_m, warp_n, warp_k) - ) - - # Backward weight: use BWD_WEIGHT_TILES from config rules - bwd_weight_tiles = [] - for tile_m, tile_n, tile_k in BWD_WEIGHT_TILES: - tile_key = (tile_m, tile_n, tile_k) - if tile_key in TILE_TO_WAVE and tile_key in TILE_TO_WARP: - wave_m, wave_n, wave_k = TILE_TO_WAVE[tile_key] - warp_m, warp_n, warp_k = TILE_TO_WARP[tile_key] - bwd_weight_tiles.append( - (tile_m, tile_n, tile_k, wave_m, wave_n, warp_m, warp_n, warp_k) - ) - - for variant in variants: - # Select tile configs based on variant - if variant == GroupedConvVariant.BACKWARD_WEIGHT: - tile_configs = bwd_weight_tiles - # Backward weight supports compv3 and mem pipelines - # (compv4/compv5 have transpose_tile2d issues) - pipelines = [("compv3", "cshuffle"), ("mem", "default")] - # Also generate two-stage variants (fp32 workspace + elementwise convert) - two_stage_flags = [False, True] - elif variant == GroupedConvVariant.BACKWARD_DATA: - tile_configs = fwd_bwd_data_tiles - # Backward data supports compv3 and mem pipelines - # (compv4/compv5 have get_length issues in bwd_data kernel) - pipelines = [("compv3", "cshuffle"), ("mem", "default")] - two_stage_flags = [False] - else: - tile_configs = fwd_bwd_data_tiles - # Only forward grouped convolution supports both compv3 and compv4 - pipelines = [("compv3", "cshuffle"), ("compv4", "cshuffle")] - two_stage_flags = [False] - for ndim in ndims: - for pipeline, epilogue in pipelines: - for ( - tile_m, - tile_n, - tile_k, - warp_m, - warp_n, - warp_tile_m, - warp_tile_n, - warp_tile_k, - ) in tile_configs: - # Skip tiles incompatible with compv4 - if pipeline == "compv4" and HAS_TILE_CONFIGS: - tile_key = (tile_m, tile_n, tile_k) - if tile_key not in COMPV4_COMPATIBLE_TILES: - continue # Skip this tile for compv4 - - for two_stage in two_stage_flags: - adj_tile_k = tile_k * 2 if pipeline == "compv4" else tile_k - - trait = GroupedConvTraitConfig( - pipeline=pipeline, - scheduler="intrawave", - epilogue=epilogue, - double_smem_buffer=(pipeline == "compv4"), - pad_m=True, - pad_n=True, - pad_k=True, - two_stage=two_stage, - ) - - if not trait.is_valid(): - continue - - config = GroupedConvKernelConfig( - tile=TileConfig( - tile_m=tile_m, - tile_n=tile_n, - tile_k=adj_tile_k, - warp_m=warp_m, - warp_n=warp_n, - warp_k=1, - warp_tile_m=warp_tile_m, - warp_tile_n=warp_tile_n, - warp_tile_k=warp_tile_k, - ), - trait=trait, - variant=variant, - ndim_spatial=ndim, - arch=arch, - ) - - if config.is_valid_for_arch(): - configs.append(config) - - return configs + if datatypes is None: + datatypes = ["fp16"] + + entry = _RULE_SET_MODULES.get(rule_set) + if entry is None: + raise ValueError( + f"Unknown rule_set: {rule_set!r} " + f"(expected one of {sorted(_RULE_SET_MODULES)})" + ) + module_name, func_name = entry + rules_module = importlib.import_module(module_name) + get_configs = getattr(rules_module, func_name) + return get_configs(arch, variants, ndims, datatypes) def get_arch_filter(): @@ -2166,7 +1943,7 @@ def __init__( except ValueError as e: log.warning(f"Could not create arch filter: {e}") - def _get_configs(self) -> List[GroupedConvKernelConfig]: + def _get_configs(self) -> List[GroupedConvKernelConfig | DepthwiseConvKernelConfig]: """Get configurations for this codegen's datatype and ndim_spatial.""" return get_default_configs( arch=self.gpu_target, @@ -2176,6 +1953,7 @@ def _get_configs(self) -> List[GroupedConvKernelConfig]: GroupedConvVariant.BACKWARD_WEIGHT, ], ndims=[self.ndim_spatial], + datatypes=[self.datatype], ) def _get_operator_type( @@ -2241,12 +2019,12 @@ def generate_kernel( # Generate kernel header content = kernel_gen.generate(config) - filepath.write_text(content) + filepath.write_text(content, encoding="utf-8") self.generated_files.append(filepath) wrapper_content = wrapper_gen.generate(config, filepath, self.output_dir) wrapper_path = self.wrapper_dir / f"dispatcher_wrapper_{kernel_name}.hpp" - wrapper_path.write_text(wrapper_content) + wrapper_path.write_text(wrapper_content, encoding="utf-8") self.generated_wrappers.append(wrapper_path) # Generate .cpp compilation unit for per-kernel parallel builds @@ -2262,7 +2040,7 @@ def generate_kernel( volatile bool _{kernel_name.replace("-", "_")}_loaded = true; }} }} """ - cpp_filepath.write_text(cpp_content) + cpp_filepath.write_text(cpp_content, encoding="utf-8") return filepath, wrapper_path @@ -2304,17 +2082,23 @@ def generate_all( for datatype in datatypes: for config in configs: if isinstance(config, DepthwiseConvKernelConfig): - # Depthwise configs skip arch filter validation (not applicable) + # Depthwise configs carry their own dtype — only emit for match + if config.datatype != datatype: + continue valid_tasks.append((config, datatype, GroupedConvVariant.FORWARD_DEPTHWISE)) - elif self.is_config_valid(config, datatype): - valid_tasks.append((config, datatype, config.variant)) - else: - rejected_count += 1 - log.debug( - f"Rejected config for {self.gpu_target}: " - f"{config.tile.tile_m}x{config.tile.tile_n}x{config.tile.tile_k} " - f"variant={config.variant.value}" - ) + elif isinstance(config, GroupedConvKernelConfig): + # GEMM configs may carry a dtype tag — skip mismatches + if config.datatype and config.datatype != datatype: + continue + if self.is_config_valid(config, datatype): + valid_tasks.append((config, datatype, config.variant)) + else: + rejected_count += 1 + log.debug( + f"Rejected config for {self.gpu_target}: " + f"{config.tile.tile_m}x{config.tile.tile_n}x{config.tile.tile_k} " + f"variant={config.variant.value}" + ) if rejected_count > 0: log.info( @@ -2421,7 +2205,7 @@ def _generate_include_all_headers(self): // Default launcher alias (uses first kernel) {launcher_alias} """ - header_path.write_text(content) + header_path.write_text(content, encoding="utf-8") if kernel_headers: log.info(f"Generated: {header_name} ({len(kernel_headers)} kernels)") @@ -2517,7 +2301,7 @@ def _generate_registration_header( }} // namespace ck_tile """ reg_path = self.wrapper_dir / "register_all_grouped_conv_kernels.hpp" - reg_path.write_text(content) + reg_path.write_text(content, encoding="utf-8") log.info(f"Generated registration header: {reg_path}") @@ -2542,7 +2326,7 @@ def main(): "-d", type=str, nargs="+", - default=["fp16"], + default=["fp16", "bf16", "fp32"], choices=["fp16", "bf16", "fp32"], help="Data types to generate", ) @@ -2551,7 +2335,7 @@ def main(): "-v", type=str, nargs="+", - default=["forward"], + default=["forward", "bwd_data", "bwd_weight"], choices=["forward", "bwd_data", "bwd_weight"], help="Grouped convolution variants", ) @@ -2560,7 +2344,7 @@ def main(): "-n", type=int, nargs="+", - default=[2], + default=[2, 3], choices=[1, 2, 3], help="Spatial dimensions", ) @@ -2569,7 +2353,7 @@ def main(): "-a", type=str, default="gfx942", - choices=["gfx90a", "gfx942", "gfx950", "gfx1201"], + choices=["gfx90a", "gfx942", "gfx950", "gfx1201", "gfx1250"], help="Target GPU architecture", ) parser.add_argument("--verbose", action="store_true", help="Verbose output") @@ -2578,21 +2362,13 @@ def main(): action="store_true", help="List configurations without generating", ) - - # JSON config file - parser.add_argument( - "--config-file", - type=Path, - default=None, - help="Path to JSON config file. " - "Overrides --variant, --ndim, and individual tile/pipeline args.", - ) parser.add_argument( - "--instance-id", - type=int, - default=None, - help="Generate only the instance with this ID from the config file. " - "Requires --config-file.", + "--rule-set", + "-r", + type=str, + default="default", + choices=["default", "full", "full-tests", "profiler", "tests", "tiny"], + help="Rule-set used in the instance generation", ) # Individual kernel configuration (when not using predefined configs) @@ -2617,6 +2393,7 @@ def main(): "compv5", "compv6", "comp_async", + "wavelet", ], help="Pipeline type", ) @@ -2693,21 +2470,8 @@ def main(): } requested_variants = [variant_map[v] for v in args.variant] - # Validate --instance-id requires --config-file - if args.instance_id is not None and args.config_file is None: - parser.error("--instance-id requires --config-file") - - # Check if user specified a JSON config file - if args.config_file is not None: - filtered_configs = load_configs_from_json( - args.config_file, arch=args.arch, instance_id=args.instance_id - ) - # Extract datatype from JSON config for code generation - with open(args.config_file, "r") as f: - config_data = json.load(f) - args.datatype = [config_data["datatype"]] - elif args.tile_m is not None or args.tile_n is not None or args.pipeline is not None: - # Build custom config from CLI arguments + # Build custom config from CLI arguments + if args.tile_m is not None or args.tile_n is not None or args.pipeline is not None: tile = TileConfig( tile_m=args.tile_m or 128, tile_n=args.tile_n or 128, @@ -2750,24 +2514,26 @@ def main(): streamk_persistent=args.streamk_persistent, ) if args.streamk_enabled else StreamKConfig() ) - config = GroupedConvKernelConfig( - tile=tile, - trait=trait, - variant=requested_variants[0] - if requested_variants - else GroupedConvVariant.FORWARD, - ndim_spatial=args.ndim[0] if args.ndim else 2, - arch=args.arch, - vector_size_a=args.vector_a, - vector_size_b=args.vector_b, - vector_size_c=args.vector_c, - num_wave_groups=args.num_wave_groups, - ) - filtered_configs = [config] + + filtered_configs = [] + for var in requested_variants: + config = GroupedConvKernelConfig( + tile=tile, + trait=trait, + variant=var, + ndim_spatial=args.ndim[0] if args.ndim else 2, + arch=args.arch, + vector_size_a=args.vector_a, + vector_size_b=args.vector_b, + vector_size_c=args.vector_c, + num_wave_groups=args.num_wave_groups, + ) + filtered_configs.append(config) else: # Get predefined configurations for target arch with requested variants and ndims filtered_configs = get_default_configs( - arch=args.arch, variants=requested_variants, ndims=args.ndim + arch=args.arch, variants=requested_variants, ndims=args.ndim, datatypes=args.datatype, + rule_set=args.rule_set, ) if args.list_configs: @@ -2802,8 +2568,7 @@ def main(): # Generate (disable arch filter when using pre-validated JSON configs) codegen = UnifiedGroupedConvCodegen( output_dir=args.output, - gpu_target=args.arch, - enable_arch_filter=(args.config_file is None), + gpu_target=args.arch ) results = codegen.generate_all( configs=filtered_configs, datatypes=args.datatype, parallel=True diff --git a/dispatcher/examples/gemm/cpp/02_grouped_gemm_driver.cpp b/dispatcher/examples/gemm/cpp/02_grouped_gemm_driver.cpp new file mode 100644 index 00000000000..6f8b20216e1 --- /dev/null +++ b/dispatcher/examples/gemm/cpp/02_grouped_gemm_driver.cpp @@ -0,0 +1,192 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +/** + * Minimal standalone grouped-GEMM driver (dispatcher way). + * + * Grouped GEMM cannot ride the standard dispatcher.run(A,B,C,problem) path: + * that backend hardcodes a single GemmHostArgs. Instead, this driver includes a + * single generated grouped kernel header (CK_TILE_SINGLE_KERNEL_INCLUDE) and + * calls SelectedKernel::launch(descs, stream) directly with a vector of + * descriptors -- the same 2-arg signature the dispatcher generates (workspace is + * allocated INSIDE launch()). It builds per-group tensors, runs, and verifies + * each group against ck_tile::reference_gemm. + * + * Build (single-kernel include style): + * hipcc -std=c++17 --offload-arch=gfx942 \ + * -DCK_TILE_SINGLE_KERNEL_INCLUDE \ + * -I /include -I \ + * -include /_grouped.hpp \ + * 02_grouped_gemm_driver.cpp -o grouped_gemm_driver + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "ck_tile/core.hpp" +#include "ck_tile/host.hpp" +#include "ck_tile/ops/gemm.hpp" + +// The generated grouped kernel header is injected on the command line with +// -include and -DCK_TILE_SINGLE_KERNEL_INCLUDE. It exports into the global +// namespace: SelectedKernel, ADataType, BDataType, CDataType, AccDataType, +// ALayout, BLayout, CLayout, and KERNEL_NAME. + +template +static constexpr inline auto is_row_major(Layout) +{ + return ck_tile::bool_constant< + std::is_same_v, ck_tile::tensor_layout::gemm::RowMajor>>{}; +} + +static std::vector parse_csv_ints(const std::string& s) +{ + std::vector out; + std::string cur; + for(char c : s) + { + if(c == ',') + { + if(!cur.empty()) + { + out.push_back(std::stoi(cur)); + cur.clear(); + } + } + else + cur.push_back(c); + } + if(!cur.empty()) + out.push_back(std::stoi(cur)); + return out; +} + +static std::string get_opt(int argc, char** argv, const std::string& key, const std::string& def) +{ + for(int i = 1; i < argc - 1; ++i) + if(key == argv[i]) + return argv[i + 1]; + return def; +} + +int main(int argc, char** argv) +{ + const int group_count = std::stoi(get_opt(argc, argv, "--groups", "8")); + const int kbatch = std::stoi(get_opt(argc, argv, "--kbatch", "1")); + const int warmup = std::stoi(get_opt(argc, argv, "--warmup", "10")); + const int repeat = std::stoi(get_opt(argc, argv, "--repeat", "50")); + const bool validate = get_opt(argc, argv, "--validate", "1") != "0"; + + std::vector Ms = parse_csv_ints(get_opt(argc, argv, "--Ms", "")); + std::vector Ns = parse_csv_ints(get_opt(argc, argv, "--Ns", "")); + std::vector Ks = parse_csv_ints(get_opt(argc, argv, "--Ks", "")); + + const int dm = std::stoi(get_opt(argc, argv, "--m", "256")); + const int dn = std::stoi(get_opt(argc, argv, "--n", "256")); + const int dk = std::stoi(get_opt(argc, argv, "--k", "512")); + + auto sz = static_cast(group_count); + if(Ms.size() != sz || Ns.size() != sz || Ks.size() != sz) + { + Ms.assign(group_count, dm); + Ns.assign(group_count, dn); + Ks.assign(group_count, dk); + } + + std::cout << "Kernel: " << KERNEL_NAME << "\n"; + std::cout << "groups=" << group_count << " kbatch=" << kbatch << "\n"; + + std::vector> a_host, b_host; + std::vector> c_host; + std::vector> a_dev, b_dev, c_dev; + std::vector sA(group_count), sB(group_count), sC(group_count); + + std::vector> descs; + descs.reserve(group_count); + + for(int i = 0; i < group_count; ++i) + { + const ck_tile::index_t M = Ms[i], N = Ns[i], K = Ks[i]; + sA[i] = ck_tile::get_default_stride(M, K, 0, is_row_major(ALayout{})); + sB[i] = ck_tile::get_default_stride(K, N, 0, is_row_major(BLayout{})); + sC[i] = ck_tile::get_default_stride(M, N, 0, is_row_major(CLayout{})); + + a_host.push_back(ck_tile::HostTensor( + ck_tile::host_tensor_descriptor(M, K, sA[i], is_row_major(ALayout{})))); + b_host.push_back(ck_tile::HostTensor( + ck_tile::host_tensor_descriptor(K, N, sB[i], is_row_major(BLayout{})))); + c_host.push_back(ck_tile::HostTensor( + ck_tile::host_tensor_descriptor(M, N, sC[i], is_row_major(CLayout{})))); + + ck_tile::FillUniformDistribution{-1.f, 1.f}(a_host[i]); + ck_tile::FillUniformDistribution{-1.f, 1.f}(b_host[i]); + c_host[i].SetZero(); + + a_dev.push_back(std::make_unique(a_host[i])); + b_dev.push_back(std::make_unique(b_host[i])); + c_dev.push_back(std::make_unique(c_host[i])); + c_dev[i]->SetZero(); + + descs.push_back(ck_tile::GroupedGemmHostArgs<>{a_dev[i]->GetDeviceBuffer(), + b_dev[i]->GetDeviceBuffer(), + {}, + c_dev[i]->GetDeviceBuffer(), + kbatch, + M, + N, + K, + sA[i], + sB[i], + {}, + sC[i]}); + } + + const ck_tile::stream_config s{nullptr, true, /*log=*/0, warmup, repeat}; + float ave_time = SelectedKernel::launch(descs, s); + + std::size_t flop = 0, bytes = 0; + for(int i = 0; i < group_count; ++i) + { + flop += std::size_t(2) * Ms[i] * Ns[i] * Ks[i]; + bytes += sizeof(ADataType) * Ms[i] * Ks[i] + sizeof(BDataType) * Ks[i] * Ns[i] + + sizeof(CDataType) * Ms[i] * Ns[i]; + } + const float tflops = static_cast(flop) / 1.E9 / ave_time; + const float gbps = static_cast(bytes) / 1.E6 / ave_time; + std::cout << "Perf: " << std::setw(10) << ave_time << " ms, " << tflops << " TFlops, " << gbps + << " GB/s\n"; + + for(int i = 0; i < group_count; ++i) + c_dev[i]->FromDevice(c_host[i].data()); + + bool pass = true; + if(validate) + { + for(int i = 0; i < group_count; ++i) + { + ck_tile::HostTensor ref( + ck_tile::host_tensor_descriptor(Ms[i], Ns[i], sC[i], is_row_major(CLayout{}))); + ref.SetZero(); + ck_tile::reference_gemm( + a_host[i], b_host[i], ref); + const float maxv = *std::max_element(ref.mData.begin(), ref.mData.end()); + const auto rtol = ck_tile::get_relative_threshold( + ck_tile::integer_divide_ceil(Ks[i], kbatch)); + const auto atol = ck_tile::get_absolute_threshold( + maxv / kbatch, ck_tile::integer_divide_ceil(Ks[i], kbatch)); + bool ok = + ck_tile::check_err(c_host[i], ref, "group[" + std::to_string(i) + "]", rtol, atol); + pass &= ok; + } + std::cout << "Verification: " << (pass ? "PASS" : "FAIL") << "\n"; + } + + return pass ? 0 : 1; +} diff --git a/dispatcher/examples/gemm/cpp/03_streamk_gemm_driver.cpp b/dispatcher/examples/gemm/cpp/03_streamk_gemm_driver.cpp new file mode 100644 index 00000000000..f8c032ca4d5 --- /dev/null +++ b/dispatcher/examples/gemm/cpp/03_streamk_gemm_driver.cpp @@ -0,0 +1,148 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +/** + * Minimal standalone stream-K GEMM driver (dispatcher way). + * + * Stream-K is a SINGLE GEMM that splits the K dimension across CUs and reduces + * the partial results through a device workspace. Like grouped GEMM it cannot + * ride the standard dispatcher.run(A,B,C,problem) path, so this driver includes + * a single generated stream-K kernel header (CK_TILE_SINGLE_KERNEL_INCLUDE) and + * calls SelectedKernel::launch(args, stream) directly with a single + * StreamKHostArgs -- the same 2-arg signature the dispatcher generates (the + * workspace is allocated INSIDE launch() via DeviceMem). It builds one A/B/C + * tensor, runs, and verifies against ck_tile::reference_gemm. + * + * Build (single-kernel include style): + * hipcc -std=c++17 --offload-arch=gfx942 -O3 \ + * -DCK_TILE_SINGLE_KERNEL_INCLUDE \ + * -I /include -I \ + * -include /_streamk.hpp \ + * 03_streamk_gemm_driver.cpp -o streamk_gemm_driver + */ + +#include + +#include +#include +#include +#include +#include + +#include "ck_tile/core.hpp" +#include "ck_tile/host.hpp" +#include "ck_tile/ops/gemm.hpp" + +#include "streamk_driver_common.hpp" + +// The generated stream-K kernel header is injected on the command line with +// -include and -DCK_TILE_SINGLE_KERNEL_INCLUDE. It exports into the global +// namespace: SelectedKernel, ADataType, BDataType, CDataType, AccDataType, +// ALayout, BLayout, CLayout, and KERNEL_NAME. + +int main(int argc, char** argv) +{ + const ck_tile::index_t M = std::stoll(get_opt(argc, argv, "--m", "3840")); + const ck_tile::index_t N = std::stoll(get_opt(argc, argv, "--n", "4096")); + const ck_tile::index_t K = std::stoll(get_opt(argc, argv, "--k", "2048")); + int warmup = std::stoi(get_opt(argc, argv, "--warmup", "50")); + int repeat = std::stoi(get_opt(argc, argv, "--repeat", "100")); + const bool validate = get_opt(argc, argv, "--validate", "1") != "0"; + + // Apple-to-apple with tile_engine: time the kernel with the SAME methodology the + // tile_engine benchmark uses (gemm_streamk_profiler.hpp) -- gpu timer and a + // cold-cache measurement that flushes the cache and rotates input buffers each + // iteration. tile_engine defaults: timer=true, flush_cache=true, rotating_count=1000. + // Without these the driver measured a warm-cache best case and over-reported TFlops, + // which is the entire source of the dispatcher-vs-TE "performance gap". + const bool gpu_timer = get_opt(argc, argv, "--timer", "1") != "0"; + bool flush_cache = get_opt(argc, argv, "--flush_cache", "1") != "0"; + int rotating_count = std::stoi(get_opt(argc, argv, "--rotating_count", "1000")); + + // Verification reads C back and compares against the reference for the known A/B. + // Rotating buffers and multi-repeat rotate/accumulate the output, so the C left on + // the device would not correspond to the reference inputs. tile_engine handles this + // with repeat_once_if_verify(); we mirror it -- a validating run times a single cold + // shot. Run a separate --validate 0 pass to collect apple-to-apple perf numbers. + if(validate) + { + warmup = 0; + repeat = 1; + flush_cache = false; + rotating_count = 1; + } + + std::cout << "Kernel: " << KERNEL_NAME << "\n"; + std::cout << "M=" << M << " N=" << N << " K=" << K << "\n"; + + const ck_tile::index_t sA = ck_tile::get_default_stride(M, K, 0, is_row_major(ALayout{})); + const ck_tile::index_t sB = ck_tile::get_default_stride(K, N, 0, is_row_major(BLayout{})); + const ck_tile::index_t sC = ck_tile::get_default_stride(M, N, 0, is_row_major(CLayout{})); + + ck_tile::HostTensor a_host( + ck_tile::host_tensor_descriptor(M, K, sA, is_row_major(ALayout{}))); + ck_tile::HostTensor b_host( + ck_tile::host_tensor_descriptor(K, N, sB, is_row_major(BLayout{}))); + ck_tile::HostTensor c_host( + ck_tile::host_tensor_descriptor(M, N, sC, is_row_major(CLayout{}))); + + ck_tile::FillUniformDistribution{-1.f, 1.f}(a_host); + ck_tile::FillUniformDistribution{-1.f, 1.f}(b_host); + c_host.SetZero(); + + ck_tile::DeviceMem a_dev(a_host); + ck_tile::DeviceMem b_dev(b_host); + ck_tile::DeviceMem c_dev(c_host); + c_dev.SetZero(); + + ck_tile::StreamKHostArgs args{a_dev.GetDeviceBuffer(), + b_dev.GetDeviceBuffer(), + c_dev.GetDeviceBuffer(), + M, + N, + K, + sA, + sB, + sC}; + + const ck_tile::stream_config s{ + nullptr, true, /*log=*/0, warmup, repeat, gpu_timer, flush_cache, rotating_count}; + float ave_time = SelectedKernel::launch(args, s); + + const std::size_t flop = std::size_t(2) * M * N * K; + const std::size_t bytes = + sizeof(ADataType) * M * K + sizeof(BDataType) * K * N + sizeof(CDataType) * M * N; + const float tflops = static_cast(flop) / 1.E9 / ave_time; + const float gbps = static_cast(bytes) / 1.E6 / ave_time; + std::cout << "Perf: " << std::setw(10) << ave_time << " ms, " << tflops << " TFlops, " << gbps + << " GB/s\n"; + + c_dev.FromDevice(c_host.data()); + + bool pass = true; + if(validate) + { + ck_tile::HostTensor ref( + ck_tile::host_tensor_descriptor(M, N, sC, is_row_major(CLayout{}))); + ref.SetZero(); + ck_tile::reference_gemm(a_host, b_host, ref); + const float maxv = *std::max_element(ref.mData.begin(), ref.mData.end()); + + // num_wgs_per_tile is the number of workgroups reducing into a single + // output tile (Stream-K has no fixed split-k), taken from the kernel's + // own tile partitioner so the driver and tile_engine agree on the split + // factor. streamk_tolerance() then widens the verify tolerance for the + // split-K accumulation error (see streamk_driver_common.hpp). + using ComputeType = + std::conditional_t; + auto kargs = SelectedKernel::StreamKGemmKernel::MakeKernelArgs(args); + const ck_tile::index_t num_wgs_per_tile = + std::max(1, kargs.tile_partitioner.estimate_num_wgs_per_tile()); + const auto tol = + streamk_tolerance(K, num_wgs_per_tile, maxv); + pass = ck_tile::check_err(c_host, ref, "streamk", tol.rtol, tol.atol); + std::cout << "Verification: " << (pass ? "PASS" : "FAIL") << "\n"; + } + + return pass ? 0 : 1; +} diff --git a/dispatcher/examples/gemm/cpp/04_streamk_registry_driver.cpp b/dispatcher/examples/gemm/cpp/04_streamk_registry_driver.cpp new file mode 100644 index 00000000000..5cd56d46bca --- /dev/null +++ b/dispatcher/examples/gemm/cpp/04_streamk_registry_driver.cpp @@ -0,0 +1,251 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +/** + * Stream-K GEMM driver through the Registry + Dispatcher (deep-core path). + * + * Unlike 03_streamk_gemm_driver.cpp (which calls SelectedKernel::launch() + * DIRECTLY, bypassing the dispatcher), this driver proves the full deep-core + * path that PR-A..PR-C built: + * + * Registry::register_kernel(GeneratedStreamKKernelInstance) + * -> Dispatcher::run(Problem.stream_k(Atomic)) + * -> Dispatcher::select_first_fit -> SK instance.supports() + * -> GeneratedStreamKKernelInstance::run -> SelectedKernel::launch() + * + * It registers ONE generated Stream-K kernel (force-included via + * -include / -DCK_TILE_SINGLE_KERNEL_INCLUDE), selects it through the registry + * by Problem::reduction_strategy, runs it, and verifies vs reference_gemm. + * + * Build (single-kernel include style): + * hipcc -std=c++17 --offload-arch=gfx942 -O3 \ + * -DCK_TILE_SINGLE_KERNEL_INCLUDE \ + * -I /include -I /dispatcher/include -I \ + * -include /_streamk.hpp \ + * 04_streamk_registry_driver.cpp -o streamk_registry_driver + */ + +#include + +#include +#include +#include +#include +#include + +#include "ck_tile/core.hpp" +#include "ck_tile/host.hpp" +#include "ck_tile/ops/gemm.hpp" + +#include "ck_tile/dispatcher/dispatcher.hpp" +#include "ck_tile/dispatcher/registry.hpp" +#include "ck_tile/dispatcher/backends/generated_tile_backend_streamk.hpp" + +#include "streamk_driver_common.hpp" + +// The generated stream-K kernel header is injected on the command line with +// -include and -DCK_TILE_SINGLE_KERNEL_INCLUDE. It exports into the global +// namespace: SelectedKernel, ADataType, BDataType, CDataType, AccDataType, +// ALayout, BLayout, CLayout, and KERNEL_NAME. + +#ifndef GFX_ARCH +#define GFX_ARCH "gfx942" +#endif + +using namespace ck_tile::dispatcher; +using namespace ck_tile::dispatcher::backends; +using Priority = ck_tile::dispatcher::Registry::Priority; + +// CLI parsing, layout/dtype tags, and the Stream-K verification tolerance are +// shared with the standalone 03 driver via streamk_driver_common.hpp +// (is_row_major, get_opt, dtype_enum_of, layout_tag_of, streamk_tolerance). + +// Build the KernelKey for the force-included Stream-K kernel. Only the Stream-K +// axis (streamk + reduction_strategy) governs selection; the remaining fields +// are populated for a faithful encode_identifier()/registry entry. +static KernelKey make_streamk_key(ReductionStrategy strategy) +{ + KernelKey key; + key.signature.dtype_a = dtype_enum_of(); + key.signature.dtype_b = dtype_enum_of(); + key.signature.dtype_c = dtype_enum_of(); + key.signature.dtype_acc = dtype_enum_of(); + key.signature.layout_a = layout_tag_of(); + key.signature.layout_b = layout_tag_of(); + key.signature.layout_c = layout_tag_of(); + key.signature.transpose_a = false; + key.signature.transpose_b = false; + key.signature.grouped = false; + // Stream-K performs its own K-dimension partitioning through the tile + // partitioner, so classic split-k is always 1 here. A value > 1 would + // describe a two-level K split the Stream-K kernel does not implement. + key.signature.split_k = 1; + key.signature.elementwise_op = "PassThrough"; + key.signature.num_d_tensors = 0; + key.signature.structured_sparsity = false; + + // Derive algorithm metadata from the generated kernel's own static traits so + // the registry identifier describes the kernel that was actually built, + // instead of assuming one tile/wave config. (Selection keys only on the + // Stream-K axis below, but a faithful identifier matters for logging and any + // future key-based lookup.) + key.algorithm.tile_shape = { + SelectedKernel::TileM, SelectedKernel::TileN, SelectedKernel::TileK}; + key.algorithm.warp_tile_shape = {static_cast(SelectedKernel::WarpTileM), + static_cast(SelectedKernel::WarpTileN), + static_cast(SelectedKernel::WarpTileK)}; + key.algorithm.wave_shape = {static_cast(SelectedKernel::WarpPerBlock_M), + static_cast(SelectedKernel::WarpPerBlock_N), + static_cast(SelectedKernel::WarpPerBlock_K)}; + // Pipeline (CompV3) and scheduler (Intrawave) are baked into the generated + // kernel's type, not exposed as standalone enum values, and are not part of + // the Stream-K selection axis -- they stay at the codegen defaults. + key.algorithm.pipeline = Pipeline::CompV3; + key.algorithm.scheduler = Scheduler::Intrawave; + key.algorithm.epilogue = Epilogue::CShuffle; + key.algorithm.block_size = SelectedKernel::BlockSize; + key.algorithm.double_buffer = SelectedKernel::DoubleSmemBuffer; + key.algorithm.persistent = SelectedKernel::UsePersistentKernel; + key.algorithm.preshuffle = SelectedKernel::Preshuffle; + key.algorithm.transpose_c = SelectedKernel::TransposeC; + key.algorithm.num_wave_groups = SelectedKernel::NumWaveGroups; + key.algorithm.pad_m = SelectedKernel::kPadM; + key.algorithm.pad_n = SelectedKernel::kPadN; + key.algorithm.pad_k = SelectedKernel::kPadK; + + // The Stream-K selection axis (the whole point of this path). + key.algorithm.streamk = true; + key.algorithm.reduction_strategy = strategy; + key.algorithm.workspace = (strategy != ReductionStrategy::Atomic); + + key.gfx_arch = GFX_ARCH; + return key; +} + +static ReductionStrategy parse_strategy(const std::string& s) +{ + if(s == "linear") + return ReductionStrategy::Linear; + if(s == "tree") + return ReductionStrategy::Tree; + return ReductionStrategy::Atomic; +} + +int main(int argc, char** argv) +{ + const ck_tile::index_t M = std::stoll(get_opt(argc, argv, "--m", "3840")); + const ck_tile::index_t N = std::stoll(get_opt(argc, argv, "--n", "4096")); + const ck_tile::index_t K = std::stoll(get_opt(argc, argv, "--k", "2048")); + const bool validate = get_opt(argc, argv, "--validate", "1") != "0"; + const ReductionStrategy strategy = parse_strategy(get_opt(argc, argv, "--strategy", "atomic")); + + std::cout << "Kernel: " << KERNEL_NAME << "\n"; + std::cout << "M=" << M << " N=" << N << " K=" << K << " strategy=" << to_string(strategy) + << "\n"; + + // --- Register the kernel into the global registry --------------------------- + KernelKey key = make_streamk_key(strategy); + auto kernel = create_generated_streamk_kernel(key, KERNEL_NAME); + Registry::instance().clear(); + Registry::instance().register_kernel(kernel, Priority::High); + std::cout << "Registered kernels: " << Registry::instance().size() + << " identifier=" << key.encode_identifier() << "\n"; + + // --- Build the problem requesting THIS Stream-K strategy -------------------- + Problem problem(M, N, K); + problem.streamk = true; + problem.reduction_strategy = strategy; + + Dispatcher dispatcher; + auto selected = dispatcher.select_kernel(problem); + if(!selected) + { + std::cout << "Dispatcher selected NO kernel for the Stream-K problem -> FAIL\n"; + return 1; + } + std::cout << "Dispatcher selected: " << selected->get_name() << "\n"; + + // --- Tensors (rcr) --------------------------------------------------------- + const ck_tile::index_t sA = ck_tile::get_default_stride(M, K, 0, is_row_major(ALayout{})); + const ck_tile::index_t sB = ck_tile::get_default_stride(K, N, 0, is_row_major(BLayout{})); + const ck_tile::index_t sC = ck_tile::get_default_stride(M, N, 0, is_row_major(CLayout{})); + + ck_tile::HostTensor a_host( + ck_tile::host_tensor_descriptor(M, K, sA, is_row_major(ALayout{}))); + ck_tile::HostTensor b_host( + ck_tile::host_tensor_descriptor(K, N, sB, is_row_major(BLayout{}))); + ck_tile::HostTensor c_host( + ck_tile::host_tensor_descriptor(M, N, sC, is_row_major(CLayout{}))); + + ck_tile::FillUniformDistribution{-1.f, 1.f}(a_host); + ck_tile::FillUniformDistribution{-1.f, 1.f}(b_host); + c_host.SetZero(); + + ck_tile::DeviceMem a_dev(a_host); + ck_tile::DeviceMem b_dev(b_host); + ck_tile::DeviceMem c_dev(c_host); + c_dev.SetZero(); + + // --- Run through the dispatcher (registry -> Dispatcher::run -> SK backend) - + float ave_time = 0.f; + try + { + ave_time = dispatcher.run( + a_dev.GetDeviceBuffer(), b_dev.GetDeviceBuffer(), c_dev.GetDeviceBuffer(), problem); + } + catch(const std::exception& e) + { + std::cout << "Dispatcher::run threw: " << e.what() << " -> FAIL\n"; + return 1; + } + + const std::size_t flop = std::size_t(2) * M * N * K; + const std::size_t bytes = + sizeof(ADataType) * M * K + sizeof(BDataType) * K * N + sizeof(CDataType) * M * N; + const float tflops = static_cast(flop) / 1.E9 / ave_time; + const float gbps = static_cast(bytes) / 1.E6 / ave_time; + std::cout << "Perf: " << std::setw(10) << ave_time << " ms, " << tflops << " TFlops, " << gbps + << " GB/s\n"; + + c_dev.FromDevice(c_host.data()); + + bool pass = true; + if(validate) + { + ck_tile::HostTensor ref( + ck_tile::host_tensor_descriptor(M, N, sC, is_row_major(CLayout{}))); + ref.SetZero(); + ck_tile::reference_gemm(a_host, b_host, ref); + const float maxv = *std::max_element(ref.mData.begin(), ref.mData.end()); + + // num_wgs_per_tile is the number of workgroups reducing into a single + // output tile (Stream-K has no fixed split-k), taken from the kernel's + // own tile partitioner so this driver and tile_engine agree on the split + // factor. streamk_tolerance() then widens the verify tolerance for the + // split-K accumulation error (see streamk_driver_common.hpp). + ck_tile::StreamKHostArgs sk_args{a_dev.GetDeviceBuffer(), + b_dev.GetDeviceBuffer(), + c_dev.GetDeviceBuffer(), + M, + N, + K, + sA, + sB, + sC}; + using ComputeType = + std::conditional_t; + auto kargs = SelectedKernel::StreamKGemmKernel::MakeKernelArgs(sk_args); + const ck_tile::index_t num_wgs_per_tile = + std::max(1, kargs.tile_partitioner.estimate_num_wgs_per_tile()); + const auto tol = + streamk_tolerance(K, num_wgs_per_tile, maxv); + pass = ck_tile::check_err(c_host, ref, "streamk_registry", tol.rtol, tol.atol); + std::cout << "Verification: " << (pass ? "PASS" : "FAIL") << "\n"; + } + + return pass ? 0 : 1; +} diff --git a/dispatcher/examples/gemm/cpp/README.md b/dispatcher/examples/gemm/cpp/README.md index 79d60d11989..6b84443ea41 100644 --- a/dispatcher/examples/gemm/cpp/README.md +++ b/dispatcher/examples/gemm/cpp/README.md @@ -37,6 +37,7 @@ cd examples | [04_heuristics.cpp](04_heuristics.cpp) | Heuristic-based kernel selection | | [05_json_export.cpp](05_json_export.cpp) | Registry JSON export for external tools | | [06_multi_registry.cpp](06_multi_registry.cpp) | Multiple registries with named kernel sets | +| [02_grouped_gemm_driver.cpp](02_grouped_gemm_driver.cpp) | Standalone grouped (batched) GEMM driver: builds per-group descriptors, launches `GroupedGemmKernel`, verifies each group | ## Example Details @@ -113,6 +114,31 @@ Consolidated example combining performance benchmarking with correctness validat - GPU reference validation using `ck_tile::reference_gemm_gpu` - Configurable tolerances +### 02_grouped_gemm_driver.cpp - Grouped (Batched) GEMM +Standalone driver for the `grouped` codegen variant. One generated grouped kernel header is +injected on the command line (`-include _grouped.hpp -DCK_TILE_SINGLE_KERNEL_INCLUDE`); +the driver reads the kernel's `ADataType/BDataType/CDataType/ALayout/BLayout/CLayout` so it +works for any datatype/layout the kernel was generated for (no hardcoded `fp16`/`rcr`). + +```bash +# Build against one generated grouped kernel +hipcc -std=c++17 --offload-arch=gfx942 -O3 -DCK_TILE_SINGLE_KERNEL_INCLUDE \ + -I ../../../include -I ../../../../include \ + -I generated_kernels \ + -include gemm_fp16_rcr_compv3_..._grouped.hpp \ + 02_grouped_gemm_driver.cpp -o gemm_02_grouped + +# Run: 8 groups, verify each group against the CPU reference +./gemm_02_grouped --groups 8 --Ms 3840 --Ns 4096 --Ks 2048 \ + --warmup 50 --repeat 100 --validate 1 +``` + +**Features:** +- Builds a vector of per-group `GroupedGemmHostArgs` descriptors (per-group M/N/K) +- Layout-driven leading dimensions via `get_default_stride(is_row_major(Layout))` +- Per-group correctness check using `ck_tile::reference_gemm` +- Reports per-group PASS/FAIL plus aggregate TFLOPS + ### 04_heuristics.cpp - Heuristic Selection Demonstrates custom kernel selection based on problem characteristics: diff --git a/dispatcher/examples/gemm/cpp/streamk_driver_common.hpp b/dispatcher/examples/gemm/cpp/streamk_driver_common.hpp new file mode 100644 index 00000000000..e30784619ea --- /dev/null +++ b/dispatcher/examples/gemm/cpp/streamk_driver_common.hpp @@ -0,0 +1,101 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +#pragma once + +/** + * Shared helpers for the Stream-K GEMM example drivers (03 standalone and 04 + * registry). Kept in one place so the two drivers do not duplicate CLI parsing, + * layout/dtype tags, and the Stream-K verification tolerance. + */ + +#include +#include +#include + +#include "ck_tile/core.hpp" +#include "ck_tile/host.hpp" +#include "ck_tile/ops/gemm.hpp" + +#include "ck_tile/dispatcher/kernel_key.hpp" + +template +constexpr auto is_row_major(Layout) +{ + return ck_tile::bool_constant< + std::is_same_v, ck_tile::tensor_layout::gemm::RowMajor>>{}; +} + +inline std::string get_opt(int argc, char** argv, const std::string& key, const std::string& def) +{ + for(int i = 1; i < argc - 1; ++i) + if(key == argv[i]) + return argv[i + 1]; + return def; +} + +// Map a ck_tile element type to the dispatcher's DataType enum so the registry +// key reflects the kernel that was actually generated (fp16/bf16/fp8/bf8/...), +// instead of assuming fp16. Keeps the registry identifier and selection correct +// across every datatype the codegen emits. +template +constexpr ck_tile::dispatcher::DataType dtype_enum_of() +{ + using U = ck_tile::remove_cvref_t; + if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::FP16; + else if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::BF16; + else if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::FP8; + else if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::BF8; + else if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::INT8; + else if constexpr(std::is_same_v) + return ck_tile::dispatcher::DataType::FP32; + else + return ck_tile::dispatcher::DataType::UNKNOWN; +} + +template +constexpr ck_tile::dispatcher::LayoutTag layout_tag_of() +{ + return std::is_same_v, ck_tile::tensor_layout::gemm::RowMajor> + ? ck_tile::dispatcher::LayoutTag::RowMajor + : ck_tile::dispatcher::LayoutTag::ColMajor; +} + +struct StreamKTolerance +{ + double rtol; + double atol; +}; + +// Stream-K verification tolerance. Stream-K splits K across CUs and reduces the +// partials; atomic reduction accumulates them directly into low-precision C, so +// the tolerance must account for the split-K accumulation error -- exactly as +// tile_engine's calculate_rtol_atol does. The plain single-pass +// get_relative/absolute_threshold(K) under-estimates the error and would +// spuriously FAIL correct atomic results on small-M/N, large-K shapes. +// +// `num_wgs_per_tile` is the number of workgroups reducing into a single output +// tile (Stream-K has no fixed split-k), taken from the kernel's own tile +// partitioner so the driver and tile_engine agree on the split factor. +template +inline StreamKTolerance +streamk_tolerance(ck_tile::index_t K, ck_tile::index_t num_wgs_per_tile, float maxv) +{ + const ck_tile::index_t k_per_split = ck_tile::integer_divide_ceil(K, num_wgs_per_tile); + // single-pass (per-split) tolerance + const double rtol_base = + ck_tile::get_relative_threshold(k_per_split); + const double atol_base = ck_tile::get_absolute_threshold( + maxv / num_wgs_per_tile, k_per_split); + // error contributed by reducing num_wgs_per_tile partials in low-precision C + const double rtol_split_k = + ck_tile::get_relative_threshold(num_wgs_per_tile); + const double atol_split_k = + ck_tile::get_absolute_threshold(maxv, num_wgs_per_tile); + return {std::max(rtol_base, rtol_split_k), std::max(atol_base, atol_split_k)}; +} diff --git a/dispatcher/examples/gemm/python/tile_engine_dispatcher_bridge.py b/dispatcher/examples/gemm/python/tile_engine_dispatcher_bridge.py new file mode 100644 index 00000000000..715c11ea30f --- /dev/null +++ b/dispatcher/examples/gemm/python/tile_engine_dispatcher_bridge.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Example 12: Tile Engine -> Dispatcher bridge (gallery) + +Unlike examples 01-11 (which drive the Dispatcher's native ctypes Registry), +this example exercises the *Tile Engine -> Dispatcher bridge* in +``dispatcher/python/gemm_utils.py``. The bridge is the path the Tile Engine +itself uses: one common ``GemmKernelConfig`` feeds codegen, force-include +compile, and a flat extern "C" ABI, and ``GpuGemmRunner`` runs the resulting +.so against a NumPy reference. + +It is a small gallery of three demos that together cover the surface the bridge +gained over its original fp16/rcr-only slice: + + matrix every (dtype, layout) pair the universal GEMM supports -- fp16 and + bf16 across the four row/col A/B combinations (row-major C only). + shapes why padding matters: a padded kernel accepts an awkward, non-tile- + aligned problem (M, N not divisible by the tile) while the equivalent + no-pad kernel rejects it -- the same selection rule the Tile Engine + sees when it sweeps pad on/off. + sweep the "search space" idea: one fixed signature, several *algorithms* + (tile / wave / pipeline), built and ranked by measured TFLOPS -- a + miniature of what the Tile Engine driver does at scale. + +(Kernel *variants* such as Stream-K and grouped GEMM ride the same bridge but +live on separate branches; this example stays within the regular GEMM stack.) + +Usage: + python3 tile_engine_dispatcher_bridge.py # runs all three demos + python3 tile_engine_dispatcher_bridge.py --demo matrix + python3 tile_engine_dispatcher_bridge.py --demo shapes + python3 tile_engine_dispatcher_bridge.py --demo sweep + python3 tile_engine_dispatcher_bridge.py --size 1024 --rtol 2e-2 --arch gfx950 +""" + +import sys +import argparse +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "python")) +import numpy as np # noqa: E402 + +from gemm_utils import ( # noqa: E402 + GemmKernelConfig, + GemmProblem, + GpuGemmRunner, + setup_multiple_gemm_dispatchers, +) +from ctypes_utils import detect_gpu_arch # noqa: E402 + +# A single algorithm known to compile and run on gfx942. Only the Signature +# (dtype + layout) varies in the matrix demo; the Algorithm is held fixed so the +# demo isolates the bridge's dtype/layout generality. +_ALGO = dict( + tile_m=64, tile_n=64, tile_k=64, + wave_m=4, wave_n=1, wave_k=1, + warp_tile_m=16, warp_tile_n=16, warp_tile_k=16, + pipeline="compv3", scheduler="intrawave", epilogue="cshuffle", + pad_m=False, pad_n=False, pad_k=False, +) + +# (dtype, layout) pairs. Column-major C (e.g. rcc) is rejected at build by the +# universal GEMM, so every case keeps row-major C -- which leaves exactly four +# A/B combinations (rcr/rrr/ccr/crr). Both dtypes cover all four. +_CASES = [ + ("fp16", "rcr"), ("fp16", "rrr"), ("fp16", "ccr"), ("fp16", "crr"), + ("bf16", "rcr"), ("bf16", "rrr"), ("bf16", "ccr"), ("bf16", "crr"), +] + +_LAYOUT_WORD = {"r": "row", "c": "col"} + + +def _emulate(x: np.ndarray, dtype: str) -> np.ndarray: + """Round fp32 inputs to the kernel's storage dtype so the CPU reference + matches what the GPU actually multiplies.""" + if dtype == "bf16": + u32 = np.ascontiguousarray(x, dtype=np.float32).view(np.uint32) + rounded = (u32 + ((u32 >> 16) & 1) + np.uint32(0x7FFF)) >> 16 + return (rounded.astype(np.uint32) << 16).view(np.float32) + return x.astype(np.float16).astype(np.float32) + + +def _max_rel(out: np.ndarray, ref: np.ndarray) -> float: + # Global relative error (normalize by the largest reference magnitude): + # per-element ratios explode on the near-zero entries that K-length + # accumulation of zero-mean data produces, so they are not meaningful. + denom = float(np.max(np.abs(ref))) + 1e-12 + return float(np.max(np.abs(out - ref))) / denom + + +def _config(dtype: str, layout: str, arch: str, **algo) -> GemmKernelConfig: + la, lb, lc = layout + return GemmKernelConfig( + dtype_a=dtype, dtype_b=dtype, dtype_c=dtype, + layout_a=_LAYOUT_WORD[la], layout_b=_LAYOUT_WORD[lb], layout_c=_LAYOUT_WORD[lc], + gfx_arch=arch, **(algo or _ALGO), + ) + + +def _reference(A, B, dtype): + # Emulate both input quantization (A,B stored as dtype) and the output store + # (GPU writes C back as dtype_c), so round on both ends before comparing. + return _emulate(_emulate(A, dtype) @ _emulate(B, dtype), dtype) + + +# --------------------------------------------------------------------------- +# Demo 1: dtype x layout matrix +# --------------------------------------------------------------------------- +def demo_matrix(size, rtol, arch): + print(f"\n[matrix] dtype x layout, M=N=K={size}, rtol={rtol:g}") + problem = GemmProblem(M=size, N=size, K=size) + configs = [_config(dt, lay, arch) for dt, lay in _CASES] + so_paths = setup_multiple_gemm_dispatchers(configs, verbose=False) + + rng = np.random.default_rng(42) + A = (rng.standard_normal((problem.M, problem.K)) * 0.1).astype(np.float32) + B = (rng.standard_normal((problem.K, problem.N)) * 0.1).astype(np.float32) + + n_pass = 0 + for (dtype, layout), so in zip(_CASES, so_paths): + tag = f"{dtype}/{layout}" + if so is None: + print(f" {tag:10s} BUILD FAILED") + continue + result = GpuGemmRunner(lib_path=so).run(A, B, problem) + if not result.success: + print(f" {tag:10s} RUN FAILED (status {result.status})") + continue + mr = _max_rel(result.output, _reference(A, B, dtype)) + ok = mr <= rtol + n_pass += ok + print(f" {tag:10s} tflops={result.tflops:7.1f} max_rel={mr:.2e} " + f"{'PASS' if ok else 'FAIL'}") + print(f" -> {n_pass}/{len(_CASES)} passed") + return n_pass, len(_CASES) + + +# --------------------------------------------------------------------------- +# Demo 2: padding vs an awkward (non-tile-aligned) shape +# --------------------------------------------------------------------------- +def demo_shapes(rtol, arch): + print("\n[shapes] padding lets a kernel accept a non-tile-aligned problem") + # 128-tile kernels; awkward M, N do not divide 128 (K stays divisible by 8 + # for the fp16 vectorized reduction load). + algo_pad = dict( + tile_m=128, tile_n=128, tile_k=32, wave_m=2, wave_n=2, wave_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, + pipeline="compv4", scheduler="intrawave", epilogue="cshuffle", + pad_m=True, pad_n=True, pad_k=True, + ) + algo_nopad = dict(algo_pad, pad_m=False, pad_n=False, pad_k=False) + + cfg_pad = _config("fp16", "rcr", arch, **algo_pad) + cfg_nopad = _config("fp16", "rcr", arch, **algo_nopad) + so_pad, so_nopad = setup_multiple_gemm_dispatchers([cfg_pad, cfg_nopad], verbose=False) + + M, N, K = 257, 129, 512 # awkward: 257, 129 not divisible by 128 + problem = GemmProblem(M=M, N=N, K=K) + rng = np.random.default_rng(7) + A = (rng.standard_normal((M, K)) * 0.1).astype(np.float32) + B = (rng.standard_normal((K, N)) * 0.1).astype(np.float32) + ref = _reference(A, B, "fp16") + + print(f" awkward problem M={M} N={N} K={K} (M,N not divisible by tile 128)") + n_pass = 0 + expectations = [("padded", so_pad, True), ("no-pad", so_nopad, False)] + for label, so, should_pass in expectations: + if so is None: + print(f" {label:8s} BUILD FAILED") + continue + result = GpuGemmRunner(lib_path=so).run(A, B, problem) + if result.success: + mr = _max_rel(result.output, ref) + accepted = mr <= rtol + outcome = f"ACCEPTED tflops={result.tflops:7.1f} max_rel={mr:.2e}" + else: + accepted = False + # status -2 == select_kernel found no kernel whose tiling fits. + outcome = f"REJECTED (status {result.status})" + # "Correct" = the no-pad kernel rejects and the padded one accepts. + correct = accepted == should_pass + n_pass += correct + print(f" {label:8s} {outcome:42s} {'as expected' if correct else 'UNEXPECTED'}") + print(f" -> {n_pass}/2 behaved as expected (padded accepts, no-pad rejects)") + return n_pass, 2 + + +# --------------------------------------------------------------------------- +# Demo 3: algorithm sweep over one fixed signature +# --------------------------------------------------------------------------- +def demo_sweep(size, rtol, arch): + print(f"\n[sweep] fixed fp16/rcr signature, several algorithms, M=N=K={size}") + # A handful of distinct algorithms (the Tile Engine sweeps thousands of + # these). Each is a different tile / wave / pipeline point in the search + # space; padding is on so any size is accepted. + algos = [ + dict(tile_m=128, tile_n=128, tile_k=32, wave_m=2, wave_n=2, wave_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, pipeline="compv4"), + dict(tile_m=256, tile_n=128, tile_k=32, wave_m=2, wave_n=2, wave_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, pipeline="compv4"), + dict(tile_m=128, tile_n=128, tile_k=64, wave_m=2, wave_n=2, wave_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, pipeline="compv3"), + dict(tile_m=64, tile_n=64, tile_k=64, wave_m=4, wave_n=1, wave_k=1, + warp_tile_m=16, warp_tile_n=16, warp_tile_k=16, pipeline="compv3"), + ] + common = dict(scheduler="intrawave", epilogue="cshuffle", + pad_m=True, pad_n=True, pad_k=True) + configs = [_config("fp16", "rcr", arch, **dict(a, **common)) for a in algos] + so_paths = setup_multiple_gemm_dispatchers(configs, verbose=False) + + problem = GemmProblem(M=size, N=size, K=size) + rng = np.random.default_rng(123) + A = (rng.standard_normal((size, size)) * 0.1).astype(np.float32) + B = (rng.standard_normal((size, size)) * 0.1).astype(np.float32) + ref = _reference(A, B, "fp16") + + rows = [] + for cfg, so in zip(configs, so_paths): + label = f"{cfg.tile_m}x{cfg.tile_n}x{cfg.tile_k}/{cfg.pipeline}" + if so is None: + rows.append((label, None, None)) + continue + result = GpuGemmRunner(lib_path=so).run(A, B, problem) + if not result.success: + rows.append((label, None, None)) + continue + rows.append((label, result.tflops, _max_rel(result.output, ref))) + + ranked = sorted((r for r in rows if r[1] is not None), + key=lambda r: r[1], reverse=True) + print(f" {'rank':>4} {'algorithm':<24} {'tflops':>9} {'max_rel':>10}") + for i, (label, tflops, mr) in enumerate(ranked, 1): + print(f" {i:>4} {label:<24} {tflops:>9.1f} {mr:>10.2e}") + for label, tflops, _ in rows: + if tflops is None: + print(f" {'-':>4} {label:<24} {'BUILD/RUN FAILED':>20}") + if ranked: + print(f" -> fastest: {ranked[0][0]} at {ranked[0][1]:.1f} TFLOPS") + n_ok = sum(1 for _, _, mr in ranked if mr <= rtol) + return n_ok, len(configs) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Tile Engine -> Dispatcher bridge example (gallery)", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("--demo", choices=["matrix", "shapes", "sweep", "all"], + default="all", help="which demo to run (default: all)") + parser.add_argument("--size", type=int, default=512, help="M=N=K (default 512)") + parser.add_argument("--rtol", type=float, default=2e-2, + help="relative tolerance (default 2e-2)") + parser.add_argument("--arch", default=detect_gpu_arch(), + help="GPU target arch (default: auto-detected via rocminfo)") + args = parser.parse_args() + + demos = ["matrix", "shapes", "sweep"] if args.demo == "all" else [args.demo] + total_pass = 0 + total = 0 + for d in demos: + if d == "matrix": + p, t = demo_matrix(args.size, args.rtol, args.arch) + elif d == "shapes": + p, t = demo_shapes(args.rtol, args.arch) + else: + p, t = demo_sweep(args.size, args.rtol, args.arch) + total_pass += p + total += t + + print(f"\n{total_pass}/{total} checks passed across {len(demos)} demo(s)") + return 0 if total_pass == total else 1 + + +if __name__ == "__main__": + sys.exit(main()) \ No newline at end of file diff --git a/dispatcher/examples/grouped_conv/python/01_basic_grouped_conv.py b/dispatcher/examples/grouped_conv/python/01_basic_grouped_conv.py index 6e6db5f15d5..ab548d60bed 100644 --- a/dispatcher/examples/grouped_conv/python/01_basic_grouped_conv.py +++ b/dispatcher/examples/grouped_conv/python/01_basic_grouped_conv.py @@ -92,7 +92,7 @@ def main(): # ========================================================================= print("\n--- Step 1: Kernel Configuration Patterns ---") - # Tile constraint (TileGemmShape, see grouped_config_rules.COMMON_TILES): + # Tile constraint (TileGemmShape, see grouped_config_rules_default.get_tiles_for_variant): # tile_m == wave_m * warp_tile_m AND LDS fits the pipeline limit # (compv4 limit = 32768 B, default = 65536 B) diff --git a/tile_engine/ops/grouped_conv/compare_ml_vs_oracle.py b/dispatcher/heuristics/validation/grouped_conv/compare_ml_vs_oracle.py similarity index 94% rename from tile_engine/ops/grouped_conv/compare_ml_vs_oracle.py rename to dispatcher/heuristics/validation/grouped_conv/compare_ml_vs_oracle.py index 974b85e4f83..ce8dca980b7 100644 --- a/tile_engine/ops/grouped_conv/compare_ml_vs_oracle.py +++ b/dispatcher/heuristics/validation/grouped_conv/compare_ml_vs_oracle.py @@ -1,4 +1,7 @@ #!/usr/bin/env python3 +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + """ Compare ML heuristic predictions against oracle benchmark results. @@ -114,7 +117,15 @@ def run_end_to_end_workflow(args): elif args.problem_set: print(f"Problem set: {args.problem_set}") # Import problem set dynamically - sys.path.insert(0, str(Path(__file__).parent / "problems")) + # Problem sets live with the benchmarking harness in tile_engine. + _THIS_DIR = Path(__file__).parent + _TILE_ENGINE_GROUPED_CONV = ( + _THIS_DIR.parent.parent.parent.parent + / "tile_engine" + / "ops" + / "grouped_conv" + ) + sys.path.insert(0, str(_TILE_ENGINE_GROUPED_CONV / "problems")) try: problem_module = __import__(args.problem_set) problem_attr = ( @@ -165,15 +176,15 @@ def run_end_to_end_workflow(args): print() print("Please use the manual workflow documented in README.md:") print() - print(" 1. Create problem set file in problems/") + print(" 1. Create problem set file in tile_engine/ops/grouped_conv/problems/") print( - " 2. Run: python grouped_conv_full_benchmark.py --problems --csv oracle.csv" + " 2. Run: cd tile_engine/ops/grouped_conv && python grouped_conv_full_benchmark.py --problems --csv oracle.csv" ) print( - " 3. Run: cd ../../dispatcher/heuristics && python predict_cli.py --problem-module --output ml.csv" + " 3. Run: cd dispatcher/heuristics && python predict_cli.py --problem-module --output ml.csv" ) print( - " 4. Run: cd ../../tile_engine/ops/grouped_conv && python compare_ml_vs_oracle.py --oracle-csv oracle.csv --ml-csv ml.csv --plot result.png" + " 4. Run: cd dispatcher/heuristics/validation/grouped_conv && python compare_ml_vs_oracle.py --oracle-csv oracle.csv --ml-csv ml.csv --plot result.png" ) print() diff --git a/tile_engine/ops/grouped_conv/validate_ml_vs_oracle.py b/dispatcher/heuristics/validation/grouped_conv/validate_ml_vs_oracle.py similarity index 86% rename from tile_engine/ops/grouped_conv/validate_ml_vs_oracle.py rename to dispatcher/heuristics/validation/grouped_conv/validate_ml_vs_oracle.py index 9e5124caf8a..2009cef0c0b 100755 --- a/tile_engine/ops/grouped_conv/validate_ml_vs_oracle.py +++ b/dispatcher/heuristics/validation/grouped_conv/validate_ml_vs_oracle.py @@ -12,23 +12,29 @@ 4. Reports efficiency metrics """ +import argparse import sys from pathlib import Path import pandas as pd import numpy as np _THIS_DIR = Path(__file__).parent -_DISPATCHER_ROOT = _THIS_DIR.parent.parent.parent / "dispatcher" +# This file lives at: /projects/composablekernel/dispatcher/heuristics/validation/grouped_conv/ +# Walk up three levels (validation -> heuristics -> dispatcher) to find the dispatcher root. +_DISPATCHER_ROOT = _THIS_DIR.parent.parent.parent +_CK_ROOT = _DISPATCHER_ROOT.parent +# Problem definitions still live with the benchmarking harness in tile_engine. +_TILE_ENGINE_GROUPED_CONV = _CK_ROOT / "tile_engine" / "ops" / "grouped_conv" sys.path.insert(0, str(_DISPATCHER_ROOT / "python")) sys.path.insert(0, str(_DISPATCHER_ROOT / "heuristics")) sys.path.insert(0, str(_DISPATCHER_ROOT / "codegen")) -sys.path.insert(0, str(_THIS_DIR / "problems")) +sys.path.insert(0, str(_TILE_ENGINE_GROUPED_CONV / "problems")) from validation_holdout import VALIDATION_PROBLEMS # noqa: E402 from predict import Predictor # noqa: E402 from feature_engine_grouped_conv import GroupedConvFeatureEngine # noqa: E402 -from grouped_config_rules import COMMON_TILES, TILE_TO_WAVE, iter_pipeline_variants # noqa: E402 +from grouped_conv.grouped_config_rules_default import COMMON_TILES, TILE_TO_WAVE, iter_pipeline_variants # noqa: E402 # Generate kernel pool (suffix-aware; sourced from grouped_config_rules) @@ -81,11 +87,31 @@ def _build_kernel_name(kconf, ndim): ) -# Load model -model_dir = ( - _DISPATCHER_ROOT - / "heuristics/models/grouped_conv_forward_bf16_gfx950_2d_3d_no_compv5" +# Parse CLI args +_parser = argparse.ArgumentParser(description=__doc__) +_parser.add_argument( + "--oracle-csv", + type=Path, + default=_TILE_ENGINE_GROUPED_CONV / "validation_oracle_results.csv", + help="Oracle benchmark CSV (produced by tile_engine/ops/grouped_conv/grouped_conv_full_benchmark.py)", +) +_parser.add_argument( + "--model-dir", + type=Path, + default=_DISPATCHER_ROOT + / "heuristics/models/grouped_conv_forward_bf16_gfx950_2d_3d_no_compv5", + help="Trained LightGBM model directory.", +) +_parser.add_argument( + "--output", + type=Path, + default=_THIS_DIR / "validation_heuristic_vs_oracle.csv", + help="Where to write the per-problem comparison CSV.", ) +_args = _parser.parse_args() + +# Load model +model_dir = _args.model_dir feature_engine = GroupedConvFeatureEngine() predictor = Predictor(model_dir, feature_engine=feature_engine) @@ -98,7 +124,7 @@ def _build_kernel_name(kconf, ndim): print() # Load oracle benchmark results -oracle_df = pd.read_csv(_THIS_DIR / "validation_oracle_results.csv") +oracle_df = pd.read_csv(_args.oracle_csv) print(f"Oracle measurements: {len(oracle_df)}") print() @@ -281,7 +307,7 @@ def _build_kernel_name(kconf, ndim): print() # Save detailed results - results_df.to_csv(_THIS_DIR / "validation_heuristic_vs_oracle.csv", index=False) - print("Detailed results saved to: validation_heuristic_vs_oracle.csv") + results_df.to_csv(_args.output, index=False) + print(f"Detailed results saved to: {_args.output}") else: print("ERROR: No predictions could be compared with oracle data") diff --git a/dispatcher/include/ck_tile/dispatcher/arch_specs_generated.hpp b/dispatcher/include/ck_tile/dispatcher/arch_specs_generated.hpp index d8168caf01d..3ad2672372c 100644 --- a/dispatcher/include/ck_tile/dispatcher/arch_specs_generated.hpp +++ b/dispatcher/include/ck_tile/dispatcher/arch_specs_generated.hpp @@ -1,11 +1,11 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT -// Copyright (c) 2025, Advanced Micro Devices, Inc. All rights reserved. /** * AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY! * * Generated from: arch_specs.json - * Generated at: 2026-04-10T20:07:11.666441 + * Generated at: 2026-06-01T10:50:15.322672 * * To update this file: * 1. Edit arch_specs.json @@ -111,8 +111,18 @@ inline std::vector get_supported_warp_configs(GpuArch arch) { case GpuArch::GFX_908: return {{1, 4, 1}, {2, 2, 1}, {4, 1, 1}}; case GpuArch::GFX_90A: return {{1, 4, 1}, {2, 2, 1}, {4, 1, 1}}; - case GpuArch::GFX_942: return {{1, 4, 1}, {2, 2, 1}, {4, 1, 1}}; - case GpuArch::GFX_950: return {{1, 4, 1}, {2, 2, 1}, {4, 1, 1}, {8, 2, 1}, {4, 4, 1}}; + case GpuArch::GFX_942: + return {{1, 1, 1}, {1, 2, 1}, {1, 4, 1}, {2, 1, 1}, {2, 1, 2}, {2, 2, 1}, {4, 1, 1}}; + case GpuArch::GFX_950: + return {{1, 1, 1}, + {1, 2, 1}, + {1, 4, 1}, + {2, 1, 1}, + {2, 1, 2}, + {2, 2, 1}, + {4, 1, 1}, + {8, 2, 1}, + {4, 4, 1}}; case GpuArch::GFX_1100: return {{2, 4, 1}, {1, 8, 1}, {8, 1, 1}, {4, 2, 1}}; case GpuArch::GFX_1200: return {{2, 4, 1}, {1, 8, 1}, {8, 1, 1}, {4, 2, 1}}; case GpuArch::GFX_1201: return {{2, 4, 1}, {1, 8, 1}, {8, 1, 1}, {4, 2, 1}}; diff --git a/dispatcher/include/ck_tile/dispatcher/backends/generated_conv_backend.hpp b/dispatcher/include/ck_tile/dispatcher/backends/generated_conv_backend.hpp index b8e4964b132..75a71777b46 100644 --- a/dispatcher/include/ck_tile/dispatcher/backends/generated_conv_backend.hpp +++ b/dispatcher/include/ck_tile/dispatcher/backends/generated_conv_backend.hpp @@ -148,7 +148,7 @@ inline GroupedConvKernelInstance::RunFn make_conv_bwd_weight_run_fn() } // ------------------------------------------------------------------------- -// IsSupportedFn factories — check kernel applicability without launching +// IsSupportedFn factories -- check kernel applicability without launching // ------------------------------------------------------------------------- template @@ -181,7 +181,7 @@ inline GroupedConvKernelInstance::IsSupportedFn make_conv_bwd_data_is_supported_ } // ------------------------------------------------------------------------- -// Instance string extraction — get CK Tile GetInstanceString() representation +// Instance string extraction -- get CK Tile GetInstanceString() representation // ------------------------------------------------------------------------- #ifdef CK_EXPERIMENTAL_BUILDER diff --git a/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend.hpp b/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend.hpp index be22d94b333..d529be3b310 100644 --- a/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend.hpp +++ b/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend.hpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include namespace ck_tile { namespace dispatcher { @@ -50,26 +52,46 @@ class GeneratedTileKernelInstance : public KernelInstance bool supports(const Problem& problem) const override { - // Check dimension divisibility if padding not enabled + // Tile-divisibility gate, mirroring ck_tile::GemmKernel::IsSupportedArgument + // exactly. A dimension only needs to be a multiple of its tile size when an + // operand whose contiguous (inner) axis is that dimension participates AND + // padding for it is disabled. This is layout-dependent: + // + // layout RowMajor A -> inner axis K | layout ColMajor A -> inner axis M + // layout RowMajor B -> inner axis N | layout ColMajor B -> inner axis K + // layout RowMajor C -> inner axis N | layout ColMajor C -> inner axis M + // + // The old check blindly required M % TileM == 0 for every layout, which + // wrongly rejected e.g. rcr kernels (RowMajor A & C never gate M) on + // M-indivisible problems that Old-TE runs fine. Anything this lets through + // is still validated by the kernel's own IsSupportedArgument inside launch(), + // so the bridge stays a strict functional equivalent of Old-TE. constexpr bool pad_m = SelectedKernel::kPadM; constexpr bool pad_n = SelectedKernel::kPadN; constexpr bool pad_k = SelectedKernel::kPadK; - if(pad_m && pad_n && pad_k) - { - return true; // Padding enabled - supports any size - } - - // Check divisibility constexpr int tile_m = SelectedKernel::TileM; constexpr int tile_n = SelectedKernel::TileN; constexpr int tile_k = SelectedKernel::TileK; - if(!pad_m && problem.M % tile_m != 0) + const auto is_row = [](LayoutTag l) { return l == LayoutTag::RowMajor; }; + const bool row_a = is_row(key_.signature.layout_a); + const bool row_b = is_row(key_.signature.layout_b); + const bool row_c = is_row(key_.signature.layout_c); + + // Which problem dimensions are actually constrained for this layout combo. + const bool require_m = (!row_a) || (!row_c); // ColMajor A or C gate M + const bool require_n = row_b || row_c; // RowMajor B or C gate N + const bool require_k = row_a || (!row_b); // RowMajor A or ColMajor B gate K + + const std::int64_t k_grain = + static_cast(tile_k) * (problem.k_batch > 0 ? problem.k_batch : 1); + + if(require_m && !pad_m && problem.M % tile_m != 0) return false; - if(!pad_n && problem.N % tile_n != 0) + if(require_n && !pad_n && problem.N % tile_n != 0) return false; - if(!pad_k && problem.K % tile_k != 0) + if(require_k && !pad_k && problem.K % k_grain != 0) return false; return true; @@ -86,7 +108,16 @@ class GeneratedTileKernelInstance : public KernelInstance { (void)d_ptrs; // Not used in basic GEMM - // Create arguments using constructor (correct order!) + // Leading dimensions depend on each operand's layout, NOT a fixed + // rcr assumption: RowMajor A/B/C -> inner axis is K/N/N; ColMajor -> + // M/K/M. Hard-coding {K, K, N} only happens to be right for rcr and for + // square problems (M==N==K); it corrupts every non-square rrr/ccr/crr + // launch. Derive each stride from the kernel's real layout instead. + const auto is_row = [](LayoutTag l) { return l == LayoutTag::RowMajor; }; + const auto stride_a = is_row(key_.signature.layout_a) ? problem.K : problem.M; + const auto stride_b = is_row(key_.signature.layout_b) ? problem.N : problem.K; + const auto stride_c = is_row(key_.signature.layout_c) ? problem.N : problem.M; + // Order from GemmHostArgs constructor: a_ptr, b_ptr, e_ptr, k_batch, M, N, K, stride_A, // stride_B, stride_E ck_tile::GemmHostArgs args(a_ptr, // a_ptr @@ -96,9 +127,9 @@ class GeneratedTileKernelInstance : public KernelInstance problem.M, // M problem.N, // N problem.K, // K - problem.K, // stride_A (row-major A: stride = K) - problem.K, // stride_B (column-major B: stride = K) - problem.N // stride_E/C (row-major C: stride = N) + stride_a, // stride_A + stride_b, // stride_B + stride_c // stride_E/C ); const bool bench = this->benchmarking_; @@ -106,11 +137,11 @@ class GeneratedTileKernelInstance : public KernelInstance stream_cfg.stream_id_ = reinterpret_cast(stream); stream_cfg.time_kernel_ = bench; stream_cfg.log_level_ = 0; - stream_cfg.cold_niters_ = bench ? 5 : 0; - stream_cfg.nrepeat_ = bench ? 10 : 1; + stream_cfg.cold_niters_ = bench ? env_int("CK_TILE_BENCH_WARMUP", 50) : 0; + stream_cfg.nrepeat_ = bench ? env_int("CK_TILE_BENCH_REPEAT", 100) : 1; stream_cfg.is_gpu_timer_ = bench; - stream_cfg.flush_cache_ = false; - stream_cfg.rotating_count_ = 1; + stream_cfg.flush_cache_ = bench && env_bool("CK_TILE_BENCH_FLUSH", true); + stream_cfg.rotating_count_ = bench ? env_int("CK_TILE_BENCH_ROTATING", 1000) : 1; // Call the generated kernel's launch method return SelectedKernel::launch(args, stream_cfg); @@ -134,6 +165,33 @@ class GeneratedTileKernelInstance : public KernelInstance } private: + // Read an integer benchmark knob from the environment, falling back to + // `fallback` when unset or unparseable. + static int env_int(const char* name, int fallback) + { + const char* v = std::getenv(name); + if(v == nullptr || *v == '\0') + return fallback; + char* end = nullptr; + const long out = std::strtol(v, &end, 10); + if(end == v) + return fallback; + return static_cast(out); + } + + // Read a boolean benchmark knob ("0"/"false"/"off", any case => false, else true). + static bool env_bool(const char* name, bool fallback) + { + const char* v = std::getenv(name); + if(v == nullptr || *v == '\0') + return fallback; + std::string s(v); + for(char& c : s) + if(c >= 'A' && c <= 'Z') + c = static_cast(c - 'A' + 'a'); + return !(s == "0" || s == "false" || s == "off"); + } + KernelKey key_; std::string name_; }; @@ -154,4 +212,4 @@ std::shared_ptr create_generated_tile_kernel(const KernelKey& ke } // namespace backends } // namespace dispatcher -} // namespace ck_tile +} // namespace ck_tile \ No newline at end of file diff --git a/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend_streamk.hpp b/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend_streamk.hpp new file mode 100644 index 00000000000..7badf449004 --- /dev/null +++ b/dispatcher/include/ck_tile/dispatcher/backends/generated_tile_backend_streamk.hpp @@ -0,0 +1,257 @@ +// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +// SPDX-License-Identifier: MIT + +#pragma once + +#include "ck_tile/dispatcher/kernel_instance.hpp" +#include "ck_tile/core.hpp" +#include "ck_tile/host.hpp" +#include "ck_tile/ops/gemm.hpp" +#include "ck_tile/ops/gemm/kernel/streamk_gemm/streamk_gemm_kernel.hpp" +#include "ck_tile/ops/common/streamk_common.hpp" +#include +#include +#include +#include +#include + +namespace ck_tile { +namespace dispatcher { +namespace backends { + +// Lock the dispatcher's ReductionStrategy (defined in kernel_key.hpp, which is +// deliberately kept ck_tile-free -- same policy as the void* workspace in +// dispatcher.hpp) to ck_tile::StreamKReductionStrategy so the two enums cannot +// silently drift. The dispatcher enum carries an extra None=0 sentinel, so the +// three real strategies are offset by one. This backend header is the single +// place that includes both definitions, so the check belongs here rather than in +// the public key header. +static_assert(static_cast(ReductionStrategy::Atomic) == + static_cast(ck_tile::StreamKReductionStrategy::Atomic) + 1u, + "dispatcher ReductionStrategy drifted from ck_tile::StreamKReductionStrategy"); +static_assert(static_cast(ReductionStrategy::Linear) == + static_cast(ck_tile::StreamKReductionStrategy::Linear) + 1u, + "dispatcher ReductionStrategy drifted from ck_tile::StreamKReductionStrategy"); +static_assert(static_cast(ReductionStrategy::Tree) == + static_cast(ck_tile::StreamKReductionStrategy::Tree) + 1u, + "dispatcher ReductionStrategy drifted from ck_tile::StreamKReductionStrategy"); + +/** + * Kernel-instance wrapper for unified_gemm_codegen.py Stream-K kernels. + * + * Counterpart of GeneratedTileKernelInstance (regular GEMM) for the Stream-K + * variant. The difference is the host-args type: Stream-K needs + * ck_tile::StreamKHostArgs (workspace pointer + reduction strategy), which is + * ABI-incompatible with the GemmHostArgs path -- this is exactly why Stream-K + * could not previously ride the registry. With this backend it can: the + * Dispatcher selects the instance by KernelKey (which now carries streamk + + * reduction_strategy) and calls run(). + * + * supports() gates on the requested reduction strategy so that the registry can + * hold atomic/linear/tree side by side and the Dispatcher's first-fit selection + * picks the one the caller asked for via Problem::reduction_strategy. + * + * NOTE (PR-C): the generated SelectedKernel::launch(StreamKHostArgs, stream) + * still owns the reduction workspace internally (DeviceMem) and does the + * per-iter reset. PR-D relocates workspace ownership + reset to Dispatcher::run() + * via get_workspace_size()/the workspace-aware run() overload. + */ +template +class GeneratedStreamKKernelInstance : public KernelInstance +{ + public: + using ADataType = ADataType_; + using BDataType = BDataType_; + using CDataType = CDataType_; + using AccDataType = AccDataType_; + using SelectedKernel = SelectedKernelType; + + GeneratedStreamKKernelInstance(const KernelKey& key, const std::string& name) + : key_(key), name_(name) + { + } + + const KernelKey& get_key() const override { return key_; } + + std::string get_name() const override { return name_; } + + /// Accept ONLY when the caller requested a Stream-K kernel with THIS + /// instance's reduction strategy. Lets atomic/linear/tree coexist in the + /// registry and be selected by Problem::reduction_strategy. + bool supports(const Problem& problem) const override + { + if(!problem.streamk) + return false; + if(problem.reduction_strategy != key_.algorithm.reduction_strategy) + return false; + + // Stream-K distributes K-iterations across workgroups; padding flags + // mirror the regular backend's divisibility guard. + constexpr bool pad_m = SelectedKernel::kPadM; + constexpr bool pad_n = SelectedKernel::kPadN; + constexpr bool pad_k = SelectedKernel::kPadK; + if(!pad_m && problem.M % SelectedKernel::TileM != 0) + return false; + if(!pad_n && problem.N % SelectedKernel::TileN != 0) + return false; + if(!pad_k && problem.K % SelectedKernel::TileK != 0) + return false; + + // Final feasibility: enough tiles to partition across CUs. Rejecting here + // (instead of throwing at launch) lets the dispatcher's first-fit fall back + // to a non-Stream-K kernel for too-small problems. + return SelectedKernel::IsSupported(make_args(problem)); + } + + /// Device workspace (bytes) needed for `problem`. 0 for Atomic; >0 for + /// Linear/Tree. The Dispatcher uses this to size the buffer it owns and then + /// passes that buffer to the workspace-aware run() below. + std::size_t get_workspace_size(const Problem& problem) const override + { + return SelectedKernel::GetWorkSpaceSize(make_args(problem)); + } + + /// No-workspace entry point: delegates to the workspace-aware overload with a + /// null buffer, so the generated launch() falls back to its internal + /// (self-allocating) path. Used when the caller does not own a workspace. + float run(const void* a_ptr, + const void* b_ptr, + void* c_ptr, + const void** d_ptrs, + const Problem& problem, + void* stream) const override + { + return run(a_ptr, b_ptr, c_ptr, d_ptrs, /*workspace=*/nullptr, problem, stream); + } + + /// Workspace-aware execution (PR-D). `workspace` is the Dispatcher-owned + /// reduction buffer (may be null for Atomic, which needs none). When non-null + /// the generated launch() binds it instead of allocating its own DeviceMem. + float run(const void* a_ptr, + const void* b_ptr, + void* c_ptr, + const void** d_ptrs, + void* workspace, + const Problem& problem, + void* stream) const override + { + (void)d_ptrs; // Not used for Stream-K GEMM + + auto args = make_args(problem, a_ptr, b_ptr, c_ptr); + + const bool bench = this->benchmarking_; + ck_tile::stream_config stream_cfg; + stream_cfg.stream_id_ = reinterpret_cast(stream); + stream_cfg.time_kernel_ = bench; + stream_cfg.log_level_ = 0; + stream_cfg.cold_niters_ = bench ? 5 : 0; + stream_cfg.nrepeat_ = bench ? 10 : 1; + stream_cfg.is_gpu_timer_ = bench; + // Flush the L2 between timed iterations so the measurement is cold, like + // tile_engine and the standalone 03 driver. Leaving the cache warm here was + // the methodology artifact that over-reported TFlops and produced the + // spurious dispatcher-vs-TE "performance gap"; do not present a warm number + // as parity evidence. + stream_cfg.flush_cache_ = bench; + // NOTE: input-buffer rotation is intentionally NOT enabled (rotating_count + // = 1). Atomic reduction accumulates straight into C, and this same run() + // serves the functional path that callers verify against the reference, so + // rotating/accumulating would corrupt the output left on the device. This + // means the timing here is cold-but-non-rotated and is therefore NOT the + // fully apple-to-apple surface: for TE-calibrated numbers use the 03 driver + // (or a --validate 0 pass) which rotates 1000 input copies like tile_engine. + stream_cfg.rotating_count_ = 1; + + if(workspace != nullptr) + return SelectedKernel::launch(args, stream_cfg, workspace); + return SelectedKernel::launch(args, stream_cfg); + } + + bool validate(const void* a_ptr, + const void* b_ptr, + const void* c_ptr, + const void** d_ptrs, + const Problem& problem, + float tolerance) const override + { + (void)d_ptrs; + (void)tolerance; + // This backend owns no host reference, so a numeric correctness check is + // out of scope here (the TE/driver harness does that). But returning a + // blind "true" would mis-report an unrunnable config as valid, so validate + // what we CAN without a reference: non-null operands, a well-formed + // problem, and that THIS Stream-K instance actually supports it. + if(a_ptr == nullptr || b_ptr == nullptr || c_ptr == nullptr) + return false; + if(!problem.is_valid()) + return false; + return supports(problem); + } + + private: + /// Build StreamKHostArgs for `problem`. Leading dims are derived from the + /// kernel key's layouts so every layout works (rcr/rrr/ccr/crr, ...), not + /// just rcr: A is MxK (row->K, col->M), B is KxN (row->N, col->K), C is MxN + /// (row->N, col->M). k_batch is owned by the Stream-K tile partitioner, not + /// passed here. Pointers default to null for sizing-only use + /// (GetWorkSpaceSize). StreamKHostArgs uses ck_tile::index_t (int32); cast + /// from Problem's int64. + ck_tile::StreamKHostArgs make_args(const Problem& problem, + const void* a_ptr = nullptr, + const void* b_ptr = nullptr, + void* c_ptr = nullptr) const + { + using idx = ck_tile::index_t; + // StreamKHostArgs uses int32 index_t while Problem carries int64 dims. + // Guard the narrowing so an oversized M/N/K (or a derived leading dim) + // fails loudly instead of silently wrapping to a negative/garbage extent. + // The dimension parser was widened to std::stoll specifically to avoid + // overflow, so dropping back to int32 here must be checked, not assumed. + auto to_idx = [](std::int64_t v, const char* what) -> idx { + if(v < 0 || v > static_cast(std::numeric_limits::max())) + throw std::runtime_error(std::string("StreamK make_args: ") + what + " (" + + std::to_string(v) + + ") exceeds int32 ck_tile::index_t range"); + return static_cast(v); + }; + + const auto& sig = key_.signature; + const bool a_row = sig.layout_a == LayoutTag::RowMajor; + const bool b_row = sig.layout_b == LayoutTag::RowMajor; + const bool c_row = sig.layout_c == LayoutTag::RowMajor; + const idx M = to_idx(problem.M, "M"); + const idx N = to_idx(problem.N, "N"); + const idx K = to_idx(problem.K, "K"); + const idx stride_a = to_idx(a_row ? problem.K : problem.M, "stride_a"); + const idx stride_b = to_idx(b_row ? problem.N : problem.K, "stride_b"); + const idx stride_c = to_idx(c_row ? problem.N : problem.M, "stride_c"); + return ck_tile::StreamKHostArgs{a_ptr, b_ptr, c_ptr, M, N, K, stride_a, stride_b, stride_c}; + } + + KernelKey key_; + std::string name_; +}; + +/// Helper to create a Stream-K kernel-instance wrapper. +template +std::shared_ptr create_generated_streamk_kernel(const KernelKey& key, + const std::string& name) +{ + return std::make_shared>(key, name); +} + +} // namespace backends +} // namespace dispatcher +} // namespace ck_tile diff --git a/dispatcher/include/ck_tile/dispatcher/backends/tile_backend.hpp b/dispatcher/include/ck_tile/dispatcher/backends/tile_backend.hpp index a3a0b046856..968588a1c45 100644 --- a/dispatcher/include/ck_tile/dispatcher/backends/tile_backend.hpp +++ b/dispatcher/include/ck_tile/dispatcher/backends/tile_backend.hpp @@ -29,27 +29,37 @@ class TileKernelInstance : public KernelInstance bool supports(const Problem& problem) const override { - // Check dimension divisibility if padding not enabled + // Tile-divisibility gate, layout-aware to match + // ck_tile::GemmKernel::IsSupportedArgument (see generated_tile_backend.hpp + // for the full rationale). A dimension is only constrained when an operand + // whose inner axis is that dimension participates and its padding is off: + // RowMajor A->K, ColMajor A->M; RowMajor B->N, ColMajor B->K; + // RowMajor C->N, ColMajor C->M. constexpr bool pad_m = SelectedKernel::kPadM; constexpr bool pad_n = SelectedKernel::kPadN; constexpr bool pad_k = SelectedKernel::kPadK; - if(pad_m && pad_n && pad_k) - { - // Padding enabled - supports any size - return true; - } - - // Check divisibility constexpr int tile_m = SelectedKernel::TileM; constexpr int tile_n = SelectedKernel::TileN; constexpr int tile_k = SelectedKernel::TileK; - if(!pad_m && problem.M % tile_m != 0) + const auto is_row = [](LayoutTag l) { return l == LayoutTag::RowMajor; }; + const bool row_a = is_row(key_.signature.layout_a); + const bool row_b = is_row(key_.signature.layout_b); + const bool row_c = is_row(key_.signature.layout_c); + + const bool require_m = (!row_a) || (!row_c); + const bool require_n = row_b || row_c; + const bool require_k = row_a || (!row_b); + + const std::int64_t k_grain = + static_cast(tile_k) * (problem.k_batch > 0 ? problem.k_batch : 1); + + if(require_m && !pad_m && problem.M % tile_m != 0) return false; - if(!pad_n && problem.N % tile_n != 0) + if(require_n && !pad_n && problem.N % tile_n != 0) return false; - if(!pad_k && problem.K % tile_k != 0) + if(require_k && !pad_k && problem.K % k_grain != 0) return false; // Check shared memory budget if specified @@ -170,4 +180,4 @@ std::shared_ptr create_tile_kernel_instance(const KernelKey& key } // namespace backends } // namespace dispatcher -} // namespace ck_tile +} // namespace ck_tile \ No newline at end of file diff --git a/dispatcher/include/ck_tile/dispatcher/dispatcher.hpp b/dispatcher/include/ck_tile/dispatcher/dispatcher.hpp index d266d693daf..80a90ea0644 100644 --- a/dispatcher/include/ck_tile/dispatcher/dispatcher.hpp +++ b/dispatcher/include/ck_tile/dispatcher/dispatcher.hpp @@ -27,6 +27,7 @@ #include "ck_tile/dispatcher/kernel_instance.hpp" #include "ck_tile/dispatcher/problem.hpp" #include "ck_tile/dispatcher/registry.hpp" +#include #include #include #include @@ -41,6 +42,16 @@ using HeuristicFunction = std::function(const Problem&) /// Dispatcher: Top-level orchestration for kernel selection and execution /// Provides unified interface for kernel dispatch across different backends +/// +/// Concurrency contract: a Dispatcher instance is NOT safe for concurrent use +/// from multiple threads / HIP streams. It owns a single reduction workspace for +/// Stream-K linear/tree kernels (see workspace_ below), which would be corrupted +/// by two overlapping dispatches. Callers that need concurrency should create one +/// Dispatcher per stream/thread (the object is a lightweight handle -- just a +/// Registry* + arch string + heuristic), exactly as one would use per-stream +/// library handles. This mirrors how the workspace is zeroed on the caller's +/// stream in run() (hipMemsetAsync), so a per-stream Dispatcher stays correctly +/// ordered without any cross-stream synchronization. class Dispatcher { public: @@ -56,6 +67,18 @@ class Dispatcher /// @param gfx_arch Target GPU architecture (e.g. "gfx950") explicit Dispatcher(Registry* registry = nullptr, const std::string& gfx_arch = ""); + /// Frees the dispatcher-owned Stream-K reduction workspace, if any. + ~Dispatcher(); + + /// The Dispatcher owns a raw HIP reduction workspace that it frees in the + /// destructor, so it must not be copied (a copy would double-free the buffer) + /// nor moved (no use-case, and consistent with the single-stream contract + /// above). Non-copyable, non-movable. + Dispatcher(const Dispatcher&) = delete; + Dispatcher& operator=(const Dispatcher&) = delete; + Dispatcher(Dispatcher&&) = delete; + Dispatcher& operator=(Dispatcher&&) = delete; + void set_arch(const std::string& arch) { gfx_arch_ = arch; } [[nodiscard]] const std::string& arch() const { return gfx_arch_; } @@ -149,6 +172,19 @@ class Dispatcher std::string gfx_arch_; bool benchmarking_ = true; + // Dispatcher-owned, grow-on-demand reduction workspace for Stream-K kernels + // (linear/tree). Sized via KernelInstance::get_workspace_size() and reused + // across calls so we don't hipMalloc/hipFree on the hot path. Held as a raw + // pointer to keep HIP/ck_tile out of this public header. + mutable void* workspace_ = nullptr; + mutable std::size_t workspace_bytes_ = 0; + + /// Ensure the owned workspace holds at least `bytes`, growing it if needed, + /// and zero the first `bytes` on `stream` (hipMemsetAsync). Not thread-safe -- + /// see the Dispatcher concurrency contract above (one Dispatcher per stream). + /// `stream` is a hipStream_t held as void* to keep HIP out of this header. + void ensure_workspace(std::size_t bytes, void* stream) const; + /// Select kernel using first-fit strategy [[nodiscard]] KernelInstancePtr select_first_fit(const Problem& problem) const; diff --git a/dispatcher/include/ck_tile/dispatcher/kernel_instance.hpp b/dispatcher/include/ck_tile/dispatcher/kernel_instance.hpp index b6ef76e4f87..9b577ece358 100644 --- a/dispatcher/include/ck_tile/dispatcher/kernel_instance.hpp +++ b/dispatcher/include/ck_tile/dispatcher/kernel_instance.hpp @@ -5,6 +5,7 @@ #include "ck_tile/dispatcher/kernel_key.hpp" #include "ck_tile/dispatcher/problem.hpp" +#include #include #include @@ -45,6 +46,30 @@ class KernelInstance const Problem& problem, void* stream = nullptr) const = 0; + /// Device workspace (in bytes) this kernel needs for `problem` (0 = none). + /// Non-zero only for Stream-K linear/tree reductions; the caller (Dispatcher) + /// sizes and owns the buffer and passes it to the workspace-aware run(). + [[nodiscard]] virtual std::size_t get_workspace_size(const Problem& problem) const + { + (void)problem; + return 0; + } + + /// Workspace-aware execution. Default forwards to the no-workspace run(), so + /// existing (non-Stream-K) kernels need no change; the Stream-K backend + /// overrides this to set the reduction workspace pointer before launch. + [[nodiscard]] virtual float run(const void* a_ptr, + const void* b_ptr, + void* c_ptr, + const void** d_ptrs, + void* workspace, + const Problem& problem, + void* stream = nullptr) const + { + (void)workspace; + return run(a_ptr, b_ptr, c_ptr, d_ptrs, problem, stream); + } + /// Validate kernel output against reference implementation /// @param a_ptr Pointer to matrix A (device memory) /// @param b_ptr Pointer to matrix B (device memory) diff --git a/dispatcher/include/ck_tile/dispatcher/kernel_key.hpp b/dispatcher/include/ck_tile/dispatcher/kernel_key.hpp index 24b20ecd9b8..637eea74412 100644 --- a/dispatcher/include/ck_tile/dispatcher/kernel_key.hpp +++ b/dispatcher/include/ck_tile/dispatcher/kernel_key.hpp @@ -48,7 +48,8 @@ enum class Pipeline : std::uint8_t CompV5, // Compute pipeline v5 CompV6, // Compute pipeline v6 PreShuffleV1, // Weight preshuffle pipeline v1 - PreShuffleV2 // Weight preshuffle pipeline v2 (optimized) + PreShuffleV2, // Weight preshuffle pipeline v2 (optimized) + Wavelet // Wavelet pipeline (specialized math + load waves) }; /// Epilogue strategies for output processing @@ -71,6 +72,30 @@ enum class Scheduler : std::uint8_t Interwave }; +/// Stream-K partial-sum reduction strategy. `None` = not a Stream-K kernel. +/// Mirrors ck_tile::StreamKReductionStrategy (Atomic/Linear/Tree). +enum class ReductionStrategy : std::uint8_t +{ + None = 0, + Atomic, + Linear, + Tree +}; + +/// Canonical lower-case name for a reduction strategy. Matches the codegen suffix +/// scheme (atomic -> "atomic", etc.) so callers/drivers share one spelling. +inline const char* to_string(ReductionStrategy r) +{ + switch(r) + { + case ReductionStrategy::Atomic: return "atomic"; + case ReductionStrategy::Linear: return "linear"; + case ReductionStrategy::Tree: return "tree"; + case ReductionStrategy::None: return "none"; + } + return "none"; +} + /// KernelKey: Compile-time kernel configuration metadata /// Organized into Signature (what operation) and Algorithm (how it's implemented) struct KernelKey @@ -146,6 +171,11 @@ struct KernelKey bool pad_m = true; // Support arbitrary M dimensions via padding bool pad_n = true; // Support arbitrary N dimensions via padding bool pad_k = true; // Support arbitrary K dimensions via padding + + // Stream-K (workgroup K-stream) parameters + bool streamk = false; // is a Stream-K kernel + ReductionStrategy reduction_strategy = ReductionStrategy::None; // atomic / linear / tree + bool workspace = false; // needs a device accumulation buffer (linear/tree) } algorithm; std::string gfx_arch; // e.g. "gfx942", "gfx90a", "gfx908" @@ -194,7 +224,10 @@ struct KernelKey algorithm.num_wave_groups, algorithm.pad_m, algorithm.pad_n, - algorithm.pad_k); + algorithm.pad_k, + algorithm.streamk, + algorithm.reduction_strategy, + algorithm.workspace); } /// Equality comparison @@ -291,6 +324,7 @@ inline std::string to_string(Pipeline pipeline) case Pipeline::CompV6: return "compv6"; case Pipeline::PreShuffleV1: return "preshufflev1"; case Pipeline::PreShuffleV2: return "preshufflev2"; + case Pipeline::Wavelet: return "wavelet"; default: return "unknown"; } } @@ -316,6 +350,8 @@ inline Pipeline string_to_pipeline(const std::string& str) return Pipeline::PreShuffleV1; if(str == "preshufflev2") return Pipeline::PreShuffleV2; + if(str == "wavelet") + return Pipeline::Wavelet; return Pipeline::Mem; // Default } @@ -369,6 +405,11 @@ inline Scheduler string_to_scheduler(const std::string& str) { if(str == "auto") return Scheduler::Auto; + // Preshuffle kernels emit "default"; the codegen maps it to Scheduler::Auto + // (see codegen_common.py SCHEDULER_TO_DISPATCHER), so mirror that here + // instead of silently falling through to Intrawave. + if(str == "default") + return Scheduler::Auto; if(str == "intrawave") return Scheduler::Intrawave; if(str == "interwave") @@ -436,6 +477,18 @@ inline std::string KernelKey::encode_identifier() const if(algorithm.preshuffle) oss << "_preshuffle"; + // Stream-K suffix -- must match unified_gemm_codegen.py KernelNaming.generate(): + // atomic -> "..._streamk" linear -> "..._streamk_linear" tree -> "..._streamk_tree" + // Guarded by algorithm.streamk so non-Stream-K identifiers stay byte-identical. + if(algorithm.streamk) + { + oss << "_streamk"; + if(algorithm.reduction_strategy == ReductionStrategy::Linear) + oss << "_linear"; + else if(algorithm.reduction_strategy == ReductionStrategy::Tree) + oss << "_tree"; + } + return oss.str(); } diff --git a/dispatcher/include/ck_tile/dispatcher/ml_heuristic.hpp b/dispatcher/include/ck_tile/dispatcher/ml_heuristic.hpp index 6ae584f6174..dd164894c41 100644 --- a/dispatcher/include/ck_tile/dispatcher/ml_heuristic.hpp +++ b/dispatcher/include/ck_tile/dispatcher/ml_heuristic.hpp @@ -340,8 +340,9 @@ class MLHeuristic auto f = extract_features(prob, key, hw_); int64_t ol = 0; double pred = 0; + // data_type=1 (C_API_DTYPE_FLOAT64): f is std::array. if(LGBM_BoosterPredictForMat( - b_, f.data(), 0, 1, NUM_FEATURES, 1, 0, 0, 0, "", &ol, &pred) != 0) + b_, f.data(), 1, 1, NUM_FEATURES, 1, 0, 0, 0, "", &ol, &pred) != 0) return 0; return log_t_ ? std::expm1(pred) : pred; } diff --git a/dispatcher/include/ck_tile/dispatcher/problem.hpp b/dispatcher/include/ck_tile/dispatcher/problem.hpp index 5bffb56b49b..266a5683281 100644 --- a/dispatcher/include/ck_tile/dispatcher/problem.hpp +++ b/dispatcher/include/ck_tile/dispatcher/problem.hpp @@ -7,6 +7,8 @@ #include #include +#include "ck_tile/dispatcher/kernel_key.hpp" // ReductionStrategy + namespace ck_tile { namespace dispatcher { @@ -58,6 +60,10 @@ struct Problem // Validation control bool enable_validation; // Enable output validation against reference + // Stream-K request: which reduction strategy the caller wants (None = non-Stream-K) + bool streamk = false; + ReductionStrategy reduction_strategy = ReductionStrategy::None; + /// Default constructor with sensible defaults Problem() : M(0), @@ -66,7 +72,9 @@ struct Problem k_batch(1), smem_budget(0), prefer_persistent(false), - enable_validation(false) + enable_validation(false), + streamk(false), + reduction_strategy(ReductionStrategy::None) { } @@ -78,7 +86,9 @@ struct Problem k_batch(1), smem_budget(0), prefer_persistent(false), - enable_validation(false) + enable_validation(false), + streamk(false), + reduction_strategy(ReductionStrategy::None) { } @@ -293,6 +303,14 @@ class ProblemBuilder return *this; } + /// Request a Stream-K kernel with a given reduction strategy + ProblemBuilder& stream_k(ReductionStrategy strategy = ReductionStrategy::Atomic) + { + problem_.streamk = true; + problem_.reduction_strategy = strategy; + return *this; + } + /// Build the Problem [[nodiscard]] Problem build() const { diff --git a/dispatcher/library/CMakeLists.txt b/dispatcher/library/CMakeLists.txt index a0e07fd3ede..3e5d94400e7 100644 --- a/dispatcher/library/CMakeLists.txt +++ b/dispatcher/library/CMakeLists.txt @@ -14,8 +14,7 @@ # ---- Configuration (inherits from parent scope) ---- set(DISPATCHER_DIR "${PROJECT_SOURCE_DIR}/dispatcher") -set(DISPATCHER_CODEGEN "${DISPATCHER_DIR}/codegen/unified_grouped_conv_codegen.py") -set(DISPATCHER_CONFIG_SET "tests" CACHE STRING "Dispatcher config set: tests or profiler") +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}") @@ -24,10 +23,6 @@ list(GET _GPU_TARGETS_LIST 0 _GPU_TARGET) # ---- Variant-to-path mapping tables ---- -set(_DISP_CONFIG_SUBDIR_fwd "forward") -set(_DISP_CONFIG_SUBDIR_bwd_weight "backward_weight") -set(_DISP_CONFIG_SUBDIR_bwd_data "backward_data") - set(_DISP_GEN_SCRIPT "generate_profiler_kernels.py") set(_DISP_HEADER_PREFIX_fwd "grouped_conv_fwd_") @@ -45,31 +40,27 @@ set(_DISP_HEADER_PREFIX_bwd_data "grouped_conv_bwd_data_") # ============================================================================= function(ck_add_dispatcher_conv_instances VARIANT) # Look up variant-specific paths - set(CONFIG_SUBDIR "${_DISP_CONFIG_SUBDIR_${VARIANT}}") set(HEADER_PREFIX "${_DISP_HEADER_PREFIX_${VARIANT}}") - if(NOT CONFIG_SUBDIR) + if(NOT HEADER_PREFIX) message(FATAL_ERROR "Unknown dispatcher variant: ${VARIANT}") endif() - set(CONFIG_DIR "${DISPATCHER_DIR}/codegen/configs/grouped_conv/${CONFIG_SUBDIR}") 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_CONFIG_SET is a CACHE variable, so changing it + # 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} - --config-dir ${CONFIG_DIR} - --codegen ${DISPATCHER_CODEGEN} --output-dir ${KERNEL_DIR} --arch ${_GPU_TARGET} - --config-set ${DISPATCHER_CONFIG_SET} + --rule-set ${DISPATCHER_RULE_SET} RESULT_VARIABLE ret OUTPUT_VARIABLE output ERROR_VARIABLE error @@ -78,7 +69,7 @@ function(ck_add_dispatcher_conv_instances VARIANT) 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 (config set: ${DISPATCHER_CONFIG_SET}): ${output}") + 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") @@ -115,12 +106,15 @@ function(ck_add_dispatcher_conv_instances VARIANT) ) target_compile_options(${TARGET_NAME} PRIVATE -DCK_TILE_FLOAT_TO_BFLOAT16_DEFAULT=0 - -mllvm -enable-noalias-to-md-conversion=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) diff --git a/dispatcher/parity_diag/regression/ab_efficient_sweep.py b/dispatcher/parity_diag/regression/ab_efficient_sweep.py new file mode 100644 index 00000000000..c7a332e9b93 --- /dev/null +++ b/dispatcher/parity_diag/regression/ab_efficient_sweep.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +"""Efficient A/B sweep: bridge .so vs Old-TE binary, all layouts + fp16/bf16. + +Faster successor to run_alllayout_sweep.py: the bridge side batches all shapes +for a stem into ONE run_one_gemm_kernel.py worker call (one Python+numpy+CDLL +startup per stem instead of one per measurement). Old-TE binaries are run once +per shape; their internal warmup=50/repeat=100 already yields a stable median, +matching the prior methodology. + +- Bridge .so : main worktree dispatcher/build/examples (built from the FIXED source). +- Old-TE bin : develop-parity worktree build/bin (develop branch), per user instruction. + +Writes allresult_fp16_bf16.csv with resume support (keyed on stem,shape). + +CSV fields: stem,pipeline,dtype,layout,shape,bridge_tflops,old_tflops,gap_pct, + bridge_verified,oldte_built +""" +import csv, json, os, re, subprocess, sys, time +from pathlib import Path + +ROOT = Path("/home/AMD/muozturk/New_project/rocm-libraries/projects/composablekernel") +DISP = ROOT / "dispatcher" +WORKER = ROOT / "tile_engine/ops/gemm/run_one_gemm_kernel.py" +SO_DIR = DISP / "build" / "examples" +GEN_DIR = DISP / "build" / "generated_kernels" +OLD_BIN_DIR = Path( + "/home/AMD/muozturk/New_project/rocm-libraries/.claude/worktrees" + "/develop-parity/projects/composablekernel/build/bin" +) +REG = DISP / "parity_diag" / "regression" +STEMS_FILE = REG / "stems_selected.txt" +CSV_OUT = REG / "allresult_fp16_bf16.csv" + +PYPATH = os.pathsep.join([str(DISP / "python"), str(ROOT / "tile_engine/ops/gemm")]) +DEVICE = os.environ.get("PARITY_DEVICE", "0") + +SHAPES = [(512, 512, 512), (1024, 1024, 1024), (2048, 2048, 2048), + (1024, 512, 256), (4096, 4096, 4096)] + +FIELDS = ["stem", "pipeline", "dtype", "layout", "shape", + "bridge_tflops", "old_tflops", "gap_pct", + "bridge_verified", "oldte_built"] + +_TFLOPS_RE = re.compile(r'"tflops\(TFlops\)":\s*([0-9.]+)') + + +def pipeline_of(stem): + for p in ("compv3", "compv4", "mem"): + if f"_{p}_" in stem: + return p + return "other" + + +def base_env(): + env = os.environ.copy() + env["HIP_VISIBLE_DEVICES"] = DEVICE + env["GEMM_PYPATH"] = PYPATH + env["LD_LIBRARY_PATH"] = "/opt/rocm/lib:" + env.get("LD_LIBRARY_PATH", "") + return env + + +def run_bridge_all(stem): + """One batched worker call over all SHAPES. Returns {shape_str: tflops|None}.""" + so = SO_DIR / f"libgemm_{stem}.so" + out = {f"{M}x{N}x{K}": None for (M, N, K) in SHAPES} + if not so.exists(): + return out + # Staleness guard: a .so older than its generated header was built from an + # obsolete codegen and must NOT be measured -- doing so reports phantom + # regressions (the big 256-tile gaps in allresult_fp16_bf16_2.csv were all + # stale binaries that recovered to parity on rebuild). Treat stale as missing. + hdr = GEN_DIR / f"gemm_{stem}.hpp" + if hdr.exists() and so.stat().st_mtime < hdr.stat().st_mtime: + print(f" STALE .so (older than header), skipping: {stem}", file=sys.stderr, flush=True) + return out + items = [{"so_path": str(so), "problem": {"M": M, "N": N, "K": K}, + "kernel_name": f"gemm_{stem}"} for (M, N, K) in SHAPES] + payload = json.dumps({"items": items, "verify": False}) + try: + p = subprocess.run([sys.executable, str(WORKER)], input=payload.encode(), + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, + env=base_env(), timeout=900) + except subprocess.TimeoutExpired: + return out + for line in p.stdout.decode().strip().splitlines(): + try: + d = json.loads(line) + except json.JSONDecodeError: + continue + idx = d.get("idx") + if isinstance(idx, int) and 0 <= idx < len(SHAPES) and d.get("ok"): + M, N, K = SHAPES[idx] + out[f"{M}x{N}x{K}"] = d.get("tflops") + return out + + +def run_oldte(stem, M, N, K): + binp = OLD_BIN_DIR / f"benchmark_gemm_universal_{stem}" + if not binp.exists(): + return None + try: + p = subprocess.run([str(binp), f"-m={M}", f"-n={N}", f"-k={K}", + "-warmup=50", "-repeat=100"], + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, + env=base_env(), timeout=300) + except subprocess.TimeoutExpired: + return None + m = _TFLOPS_RE.search(p.stdout.decode()) + return float(m.group(1)) if m else None + + +def main(): + stems = [l.strip() for l in STEMS_FILE.read_text().splitlines() if l.strip()] + total = len(stems) * len(SHAPES) + done = set() + if CSV_OUT.exists(): + with open(CSV_OUT) as f: + for row in csv.DictReader(f): + done.add((row["stem"], row["shape"])) + mode = "a" if done else "w" + print(f"stems={len(stems)} shapes={len(SHAPES)} total={total} resume={len(done)}", flush=True) + + t0 = time.time(); n = len(done) + with open(CSV_OUT, mode, newline="") as fh: + w = csv.DictWriter(fh, fieldnames=FIELDS) + if mode == "w": + w.writeheader() + for stem in stems: + shapes_todo = [(M, N, K) for (M, N, K) in SHAPES + if (stem, f"{M}x{N}x{K}") not in done] + if not shapes_todo: + continue + parts = stem.split("_") + dtype, layout = parts[0], parts[1] + pipeline = pipeline_of(stem) + oldte_built = (OLD_BIN_DIR / f"benchmark_gemm_universal_{stem}").exists() + + bridge = run_bridge_all(stem) + for (M, N, K) in shapes_todo: + shape = f"{M}x{N}x{K}" + bt = bridge.get(shape) + ot = run_oldte(stem, M, N, K) + if bt is not None and ot not in (None, 0): + gap = (bt - ot) / ot * 100.0 + else: + gap = float("nan") + w.writerow(dict( + stem=stem, pipeline=pipeline, dtype=dtype, layout=layout, shape=shape, + bridge_tflops=f"{bt:.4f}" if bt is not None else "nan", + old_tflops=f"{ot:.4f}" if ot is not None else "nan", + gap_pct=f"{gap:.4f}" if gap == gap else "nan", + bridge_verified="None", oldte_built=str(oldte_built))) + fh.flush() + n += 1 + el = time.time() - t0 + rate = (n - len(done)) / el if el > 0 else 0 + eta = (total - n) / rate / 3600 if rate > 0 else 0 + print(f"[{n}/{total}] {stem[:48]:48} rate={rate:.1f}/s ETA={eta:.1f}h", flush=True) + print(f"DONE rows={n} -> {CSV_OUT}", flush=True) + + +if __name__ == "__main__": + main() diff --git a/dispatcher/parity_diag/regression/ab_same_harness.py b/dispatcher/parity_diag/regression/ab_same_harness.py new file mode 100644 index 00000000000..91910717449 --- /dev/null +++ b/dispatcher/parity_diag/regression/ab_same_harness.py @@ -0,0 +1,310 @@ +#!/usr/bin/env python3 +"""Apples-to-apples GEMM A/B: bridge kernel vs old-TE kernel, ONE harness. + +Why this exists +--------------- +The earlier sweep (allsweep6144rcrfp16.py) compared the bridge's dispatcher +measurement against old TE's *standalone benchmark binary* +(benchmark_gemm_universal_). That comparison is NOT apples-to-apples: +the device kernel is byte-identical, yet old TE's standalone binary reports +~18-20% lower TFLOPS at e.g. 1024^3 / compv4. rocprof shows the identical +kernel genuinely runs longer in that process -- ~+8% cycles plus a lower +sustained SCLK -- a power/clock + execution-environment artifact of that +binary, NOT a bridge speedup, compiler difference, or kernel difference. +(See diagnose.md sec.4.) + +This harness removes the artifact: it builds the OLD-TE kernel into a .so from +old TE's own generated header and runs BOTH the bridge kernel and the old-TE +kernel through the SAME worker (run_one_gemm_kernel.py). Measured this way the +gap collapses to ~1%, which is the honest result. + +The old-TE generated-header directory is derived per stem as +``///`` (e.g. fp16/rcr, bf16/crr), so a single +run covers every dtype/layout. Set OLD_TE_GEN to pin one explicit leaf dir for +all stems (legacy behavior); set OLD_TE_GEN_BASE to relocate the base. + +Usage: + python3 ab_same_harness.py # default kernel list + shapes + python3 ab_same_harness.py [...] # explicit stems + python3 ab_same_harness.py --stems-file F [--csv OUT] # sweep a stems file +""" +import argparse +import csv +import json +import os +import statistics +import subprocess +import sys +from pathlib import Path + +# composablekernel root: .../composablekernel/dispatcher/parity_diag/regression/ +ROOT = Path(__file__).resolve().parents[3] +DISP = ROOT / "dispatcher" +GEN = DISP / "build" / "generated_kernels" +SRC = DISP / "bindings" / "ctypes" / "gemm_ctypes_lib.cpp" +STATIC = DISP / "build" / "libck_tile_dispatcher.a" +BR_SO_DIR = DISP / "build" / "examples" +WORKER = ROOT / "tile_engine/ops/gemm/run_one_gemm_kernel.py" +# Base dir of old-TE generated single-kernel headers; the per-stem leaf +# (/) is appended in old_gen_dir(). Points at a sibling +# develop-parity worktree under the rocm-libraries root by default. +OLD_GEN_BASE = Path(os.environ.get( + "OLD_TE_GEN_BASE", + str(ROOT.parents[1] / ".claude/worktrees/develop-parity" + "/projects/composablekernel/build/tile_engine/ops/gemm/gemm_universal"), +)) +# Legacy explicit override: when set, this exact leaf dir is used for ALL stems. +OLD_GEN_PIN = os.environ.get("OLD_TE_GEN") +OUT = DISP / "parity_diag" / "regression" / "_ab_same_harness_build" +ARCH = os.environ.get("GFX_ARCH", "gfx942") +DEVICE = os.environ.get("PARITY_DEVICE", "0") +REPEATS = int(os.environ.get("AB_REPEATS", "3")) + +SHAPES = [(512, 512, 512), (1024, 1024, 1024), (2048, 2048, 2048), + (1024, 512, 256), (4096, 4096, 4096)] + +DEFAULT_STEMS = [ + "fp16_rcr_compv4_default_intrawave_False_False_False_False_64x128x64_2x2x1_32x32x16", + "fp16_rcr_compv4_cshuffle_intrawave_False_False_False_False_64x128x64_1x4x1_32x32x16", + "fp16_rcr_compv4_default_intrawave_False_False_False_False_128x128x64_4x1x1_32x32x16", +] + +PYPATH = os.pathsep.join([str(DISP / "python"), str(ROOT / "tile_engine/ops/gemm")]) + + +def old_gen_dir(stem: str) -> Path: + """Old-TE header dir for a stem: // (or the pinned dir). + + Stems are named ``__...`` (e.g. fp16_rcr_..., bf16_crr_...), + which is exactly the develop-parity gen-tree layout, so the leaf is derived + from the stem itself -- no per-layout hardcoding. + """ + if OLD_GEN_PIN: + return Path(OLD_GEN_PIN) + parts = stem.split("_") + dtype, layout = parts[0], parts[1] + return OLD_GEN_BASE / dtype / layout + + +def build_old_so(stem: str) -> Path | None: + """Compile old TE's generated kernel header into a bridge-loadable .so. + + Cached: if the .so already exists it is reused, so a parallel --build-only + pre-pass (CPU-bound hipcc) can be separated from the serial GPU measurement. + """ + hdr = old_gen_dir(stem) / f"gemm_universal_single_{stem}.hpp" + if not hdr.exists(): + return None + OUT.mkdir(parents=True, exist_ok=True) + obj = OUT / f"{stem}.o" + lib = OUT / f"libold_{stem}.so" + if lib.exists(): + return lib + common = [ + "-fPIC", "-O3", + f"-I{DISP / 'include'}", f"-I{ROOT / 'include'}", f"-I{ROOT}", f"-I{GEN}", + "-DCK_TILE_SINGLE_KERNEL_INCLUDE", f"-include{hdr}", "-D__HIP_PLATFORM_AMD__", + f"--offload-arch={ARCH}", f'-DGFX_ARCH="{ARCH}"', + # Match the bridge build's AMDGPU codegen flags (gemm_utils.py + # _build_compile_jobs / _TILE_ENGINE_CODEGEN_FLAGS), which are also what + # Tile Engine's own CMake passes. Without these the old-TE side is built + # with a *different* instruction schedule (notably -enable-post-misched + # defaults back on) and runs ~10-40% faster than real old-TE, making the + # bridge look regressed when it is actually at parity. Build BOTH sides + # identically so the A/B measures the kernel, not a flag asymmetry. + "-mllvm", "-enable-noalias-to-md-conversion=0", + "-mllvm", "--lsr-drop-solution=1", + "-mllvm", "-enable-post-misched=0", + "-mllvm", "-amdgpu-early-inline-all=true", + "-mllvm", "-amdgpu-function-calls=false", + "-fno-offload-uniform-block", + "-Wno-undefined-func-template", "-Wno-float-equal", + ] + cc = subprocess.run(["/opt/rocm/bin/hipcc", "-c", *common, str(SRC), "-o", str(obj)], + capture_output=True) + if cc.returncode != 0: + return None + ln = subprocess.run(["/opt/rocm/bin/hipcc", "-shared", "-fPIC", + f"--offload-arch={ARCH}", "--hip-link", + str(obj), str(STATIC), "-o", str(lib)], capture_output=True) + return lib if ln.returncode == 0 else None + + +def meas(so: Path, M: int, N: int, K: int) -> float | None: + """Median TFLOPS over REPEATS worker calls (each call does its own + warmup=50/repeat=100 internally). Median, not max, to match the sweep + methodology and stay robust to the occasional clock-warmup outlier.""" + if not so or not Path(so).exists(): + return None + payload = json.dumps({"so_path": str(so), "problem": {"M": M, "N": N, "K": K}, + "kernel_name": "x"}) + env = os.environ.copy() + env["HIP_VISIBLE_DEVICES"] = DEVICE + env["GEMM_PYPATH"] = PYPATH + env["LD_LIBRARY_PATH"] = "/opt/rocm/lib:" + env.get("LD_LIBRARY_PATH", "") + samples = [] + for _ in range(REPEATS): + p = subprocess.run([sys.executable, str(WORKER)], input=payload.encode(), + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, env=env) + for line in p.stdout.decode().splitlines(): + try: + d = json.loads(line) + except json.JSONDecodeError: + continue + if d.get("ok"): + samples.append(d["tflops"]) + return statistics.median(samples) if samples else None + + +def meas_all(so: Path) -> dict: + """Median TFLOPS per shape from REPEATS *batched* worker calls. + + One worker call measures ALL shapes (5x fewer python+numpy+CDLL startups + than per-shape meas()), which is the throughput lever for a full sweep on a + single GPU. Returns {shape_str: tflops|None}.""" + out = {f"{M}x{N}x{K}": None for (M, N, K) in SHAPES} + if not so or not Path(so).exists(): + return out + items = [{"so_path": str(so), "problem": {"M": M, "N": N, "K": K}, + "kernel_name": "x"} for (M, N, K) in SHAPES] + payload = json.dumps({"items": items, "verify": False}) + env = os.environ.copy() + env["HIP_VISIBLE_DEVICES"] = DEVICE + env["GEMM_PYPATH"] = PYPATH + env["LD_LIBRARY_PATH"] = "/opt/rocm/lib:" + env.get("LD_LIBRARY_PATH", "") + samples = {s: [] for s in out} + for _ in range(REPEATS): + p = subprocess.run([sys.executable, str(WORKER)], input=payload.encode(), + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, + env=env, timeout=900) + for line in p.stdout.decode().splitlines(): + try: + d = json.loads(line) + except json.JSONDecodeError: + continue + idx = d.get("idx") + if isinstance(idx, int) and 0 <= idx < len(SHAPES) and d.get("ok"): + M, N, K = SHAPES[idx] + samples[f"{M}x{N}x{K}"].append(d["tflops"]) + for s, xs in samples.items(): + if xs: + out[s] = statistics.median(xs) + return out + + +def pipeline_of(stem: str) -> str: + for p in ("compv3", "compv4", "mem"): + if f"_{p}_" in stem: + return p + return "other" + + +def main(): + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("stems", nargs="*", help="kernel stems to A/B") + ap.add_argument("--stems-file", help="file with one stem per line") + ap.add_argument("--csv", help="write results to CSV (resume-aware)") + ap.add_argument("--build-only", action="store_true", + help="parallel-compile old-TE .so for all stems, then exit " + "(CPU pre-pass; GPU measurement reuses the cache)") + ap.add_argument("--jobs", type=int, default=min(os.cpu_count() or 8, 16), + help="parallel compile jobs for --build-only") + args = ap.parse_args() + + stems = list(args.stems) + if args.stems_file: + stems += [l.strip() for l in Path(args.stems_file).read_text().splitlines() + if l.strip()] + stems = stems or DEFAULT_STEMS + + # Parallel CPU pre-compile of every old-TE .so (no GPU touched). + if args.build_only: + from concurrent.futures import ProcessPoolExecutor, as_completed + ok = miss = fail = 0 + print(f"build-only: {len(stems)} stems, jobs={args.jobs}", flush=True) + with ProcessPoolExecutor(max_workers=args.jobs) as ex: + futs = {ex.submit(build_old_so, s): s for s in stems} + for i, fut in enumerate(as_completed(futs), 1): + try: + r = fut.result() + except Exception: + r = None + s = futs[fut] + if r is None: + # distinguish "no header" from "compile failed" + if (old_gen_dir(s) / f"gemm_universal_single_{s}.hpp").exists(): + fail += 1 + else: + miss += 1 + else: + ok += 1 + if i % 100 == 0: + print(f" [{i}/{len(stems)}] ok={ok} no_header={miss} fail={fail}", + flush=True) + print(f"build-only DONE: ok={ok} no_header={miss} fail={fail}", flush=True) + return + + # CSV sweep mode: same columns as the (now-corrected) sweep, resume-aware. + if args.csv: + fields = ["stem", "pipeline", "dtype", "layout", "shape", + "bridge_tflops", "old_tflops", "gap_pct", "oldte_built"] + out = Path(args.csv) + done = set() + if out.exists(): + with open(out) as f: + for row in csv.DictReader(f): + done.add((row["stem"], row["shape"])) + mode = "a" if done else "w" + print(f"stems={len(stems)} shapes={len(SHAPES)} resume={len(done)} -> {out}", + flush=True) + with open(out, mode, newline="") as fh: + w = csv.DictWriter(fh, fieldnames=fields) + if mode == "w": + w.writeheader() + for stem in stems: + todo = [(M, N, K) for (M, N, K) in SHAPES + if (stem, f"{M}x{N}x{K}") not in done] + if not todo: + continue + parts = stem.split("_") + dtype, layout = parts[0], parts[1] + old_so = build_old_so(stem) + br_so = BR_SO_DIR / f"libgemm_{stem}.so" + # Batched: one worker call per side covers all shapes. + bridge = meas_all(br_so) + old = meas_all(old_so) if old_so else {} + for (M, N, K) in todo: + shape = f"{M}x{N}x{K}" + b = bridge.get(shape) + o = old.get(shape) + gap = (b - o) / o * 100 if (b and o) else float("nan") + w.writerow(dict( + stem=stem, pipeline=pipeline_of(stem), dtype=dtype, + layout=layout, shape=shape, + bridge_tflops=f"{b:.4f}" if b is not None else "nan", + old_tflops=f"{o:.4f}" if o is not None else "nan", + gap_pct=f"{gap:.4f}" if gap == gap else "nan", + oldte_built=str(old_so is not None))) + fh.flush() + print(f" done {stem[:60]}", flush=True) + print(f"DONE -> {out}", flush=True) + return + + # Pretty-print mode. + print(f"{'shape':>14} {'bridge':>9} {'oldTE':>9} {'gap%':>7} kernel") + for stem in stems: + old_so = build_old_so(stem) + br_so = BR_SO_DIR / f"libgemm_{stem}.so" + if old_so is None: + print(f" [skip: no old-TE header] {stem}") + continue + for (M, N, K) in SHAPES: + b = meas(br_so, M, N, K) + o = meas(old_so, M, N, K) + gap = (b - o) / o * 100 if (b and o) else float("nan") + print(f"{f'{M}x{N}x{K}':>14} {b or float('nan'):9.2f} " + f"{o or float('nan'):9.2f} {gap:7.2f} {stem[:40]}") + + +if __name__ == "__main__": + main() diff --git a/dispatcher/python/ctypes_utils.py b/dispatcher/python/ctypes_utils.py index d719d1405e5..56ea9ea5a88 100644 --- a/dispatcher/python/ctypes_utils.py +++ b/dispatcher/python/ctypes_utils.py @@ -1073,7 +1073,7 @@ def _generate_single_kernel_subprocess(args: dict) -> Tuple[bool, Optional[str], "--config", config_file, "--variants", - "standard", + args.get("variant", "standard"), ] res = subprocess.run(cmd, capture_output=True, text=True, timeout=300) @@ -1389,7 +1389,7 @@ class KernelConfig: gfx_arch: str = "gfx942" # GEMM variant (affects arch filter validation) - # "standard", "preshuffle", or "multi_d" + # "standard", "preshuffle", "multi_d", or "stream_k" variant: str = "standard" @property diff --git a/dispatcher/python/gemm_utils.py b/dispatcher/python/gemm_utils.py new file mode 100644 index 00000000000..52417e9a995 --- /dev/null +++ b/dispatcher/python/gemm_utils.py @@ -0,0 +1,1403 @@ +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT +""" +GEMM Tile Engine <-> Dispatcher bridge. + +This is the GEMM counterpart of ``grouped_conv_utils.py`` / ``fmha_utils.py``: +a single shared config dataclass (``GemmKernelConfig``) that Tile Engine imports +and hands back to the dispatcher. There is no translator between two +vocabularies -- both sides share the one object whose ``.name`` mirrors the +kernel identifier baked into the generated kernel header. + +Public surface (mirrors the grouped_conv bridge): + + GemmKernelConfig -- the shared contract dataclass + .name -- registry/runtime lookup key (byte-exact) + .to_codegen_json() -- feeds unified_gemm_codegen.py + GemmProblem -- a single (M, N, K) problem + setup_multiple_gemm_dispatchers -- codegen + hipcc -> .so paths (NO GPU) + GemmDispatcherLib -- thin ctypes ABI wrapper + GpuGemmRunner -- GPU memory + run + time (from a .so path) + expand_sweep -- TE JSON sweep config -> [GemmKernelConfig] + +The heavy lifting for codegen and compilation is reused from ``ctypes_utils`` +so there is a single source of truth for how a kernel header is produced and +how it is compiled into a ``.so``. +""" + +from __future__ import annotations + +import ctypes +import functools +import itertools +import json +import multiprocessing +import subprocess +import tempfile +from concurrent.futures import ProcessPoolExecutor, as_completed +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import numpy as np + +# Reuse the proven codegen/compile leaf helpers from the dispatcher's own +# python layer. gemm_utils is a thin bridge on top of these. +import ctypes_utils as _cu + + +# ============================================================================ +# Layout / dtype helpers +# ============================================================================ + +_LAYOUT_CHAR = {"row": "r", "col": "c", "r": "r", "c": "c"} +_LAYOUT_WORD = {"r": "row", "c": "col"} + + +def _cap(flag: bool) -> str: + """Reproduce Python ``str(bool).capitalize()`` -> 'True' / 'False'.""" + return "True" if flag else "False" + + +# --------------------------------------------------------------------------- +# Dtype codecs: map a bridge dtype token -> numpy dtype for host operands. +# +# fp16 maps to plain numpy; bf16/fp8/bf8 need ml_dtypes. fp8/bf8 use the FNUZ +# encodings (E4M3FNUZ / E5M2FNUZ) that the gfx942 MFMA path expects -- matching +# the regular bridge's fp8/bf8 codec (PR #8887). ml_dtypes is imported lazily so +# the fp16-only path keeps working where ml_dtypes is unavailable. +# --------------------------------------------------------------------------- + +# Canonicalize common spellings to a single token. +_DTYPE_ALIASES = { + "fp16": "fp16", + "f16": "fp16", + "half": "fp16", + "float16": "fp16", + "bf16": "bf16", + "bfloat16": "bf16", + "fp8": "fp8", + "fp8_e4m3": "fp8", + "e4m3": "fp8", + "bf8": "bf8", + "fp8_e5m2": "bf8", + "e5m2": "bf8", +} + + +def numpy_dtype_for(dtype: str): + """Return the numpy dtype object used for host operands of ``dtype``. + + fp16 -> np.float16; bf16/fp8/bf8 require the ``ml_dtypes`` package (imported + lazily) and use FNUZ fp8 encodings for gfx942 parity. + """ + token = _DTYPE_ALIASES.get(str(dtype).lower()) + if token is None: + raise ValueError(f"Unsupported grouped GEMM dtype: {dtype!r}") + if token == "fp16": + return np.float16 + try: + import ml_dtypes # noqa: WPS433 (lazy: optional dep) + except ImportError as exc: # pragma: no cover - env-dependent + raise RuntimeError( + f"dtype {dtype!r} requires the 'ml_dtypes' package (pip install ml_dtypes)" + ) from exc + if token == "bf16": + return np.dtype(ml_dtypes.bfloat16) + if token == "fp8": + return np.dtype(ml_dtypes.float8_e4m3fnuz) + if token == "bf8": + return np.dtype(ml_dtypes.float8_e5m2fnuz) + raise ValueError(f"Unsupported grouped GEMM dtype: {dtype!r}") # pragma: no cover + + +def output_dtype_for(dtype: str) -> str: + """Return the bridge dtype token of a kernel's OUTPUT for input ``dtype``. + + Mirrors ``codegen_common.CommonTypeMappings.get_output_dtype`` (fp8/bf8 -> + fp16, else identity): the generated grouped kernel emits an fp16 ``CDataType`` + for fp8/bf8 inputs, so the host C buffer must be sized/typed by the OUTPUT + dtype, not the INPUT dtype. ``codegen_common`` lives on the dispatcher + ``codegen`` dir which ctypes_utils already puts on ``sys.path``; import it + lazily so the fp16-only path has no extra dependency. + """ + token = _DTYPE_ALIASES.get(str(dtype).lower()) + if token is None: + raise ValueError(f"Unsupported grouped GEMM dtype: {dtype!r}") + try: + from codegen_common import CommonTypeMappings # noqa: WPS433 (lazy) + except ImportError: # pragma: no cover - fall back to the documented mapping + return "fp16" if token in ("fp8", "bf8") else token + return CommonTypeMappings.get_output_dtype(token) + + +def output_numpy_dtype_for(dtype: str): + """Numpy dtype of a kernel's OUTPUT buffer for input ``dtype``. + + Composition of :func:`output_dtype_for` + :func:`numpy_dtype_for`. For + fp8/bf8 this resolves to ``np.float16`` (2 bytes) because the kernel's + ``CDataType`` is fp16; for fp16/bf16 it equals the input dtype. + """ + return numpy_dtype_for(output_dtype_for(dtype)) + + +# ============================================================================ +# The shared contract: GemmKernelConfig +# ============================================================================ + + +@dataclass +class GemmKernelConfig: + """The common config struct shared by Tile Engine and the Dispatcher. + + Naming convention (the "warp/wave trap" lives here, in ONE place): + * ``wave_m/n/k`` -- warps per block (C++ ``wave_shape``; TE "warp"). + * ``warp_tile_m/n/k`` -- MFMA instruction shape (C++ ``warp_tile_shape``; + TE "warp_tile"). + """ + + # --- Signature: what operation is computed ----------------------------- + dtype_a: str = "fp16" + dtype_b: str = "fp16" + dtype_c: str = "fp16" + dtype_acc: str = "fp32" + layout_a: str = "row" + layout_b: str = "col" + layout_c: str = "row" + + # --- Algorithm: how it is implemented ---------------------------------- + tile_m: int = 128 + tile_n: int = 128 + tile_k: int = 32 + wave_m: int = 2 + wave_n: int = 2 + wave_k: int = 1 + warp_tile_m: int = 32 + warp_tile_n: int = 32 + warp_tile_k: int = 16 + + pipeline: str = "compv4" + scheduler: str = "intrawave" + epilogue: str = "cshuffle" + + pad_m: bool = True + pad_n: bool = True + pad_k: bool = True + persistent: bool = False + + gfx_arch: str = "gfx942" + variant: str = "standard" + # Stream-K reduction strategy: "atomic" (default), "linear", or "tree". + # Only meaningful when variant == "stream_k". + reduction_strategy: str = "atomic" + + # ------------------------------------------------------------------ # + # Derived string fragments + # ------------------------------------------------------------------ # + @property + def layout(self) -> str: + """3-char layout string, e.g. 'rcr'.""" + return ( + _LAYOUT_CHAR[self.layout_a] + + _LAYOUT_CHAR[self.layout_b] + + _LAYOUT_CHAR[self.layout_c] + ) + + @property + def tile_str(self) -> str: + return f"{self.tile_m}x{self.tile_n}x{self.tile_k}" + + @property + def wave_str(self) -> str: + return f"{self.wave_m}x{self.wave_n}x{self.wave_k}" + + @property + def warp_tile_str(self) -> str: + return f"{self.warp_tile_m}x{self.warp_tile_n}x{self.warp_tile_k}" + + @property + def name(self) -> str: + """Registry / runtime lookup key. + + Reproduces, byte-for-byte, the ``KERNEL_NAME`` that + ``unified_gemm_codegen.py::KernelNaming.generate`` bakes into the + generated kernel header (and that the .so reports via + ``dispatcher_get_kernel_name``). This is the single thread tying + config -> codegen -> runtime together. + """ + name = ( + f"gemm_{self.dtype_a}_{self.layout}" + f"_{self.pipeline}_{self.epilogue}_{self.scheduler}" + f"_{_cap(self.pad_m)}_{_cap(self.pad_n)}_{_cap(self.pad_k)}" + f"_{_cap(self.persistent)}" + f"_{self.tile_str}_{self.wave_str}_{self.warp_tile_str}" + ) + if self.variant == "preshuffle": + name += "_preshuffle" + elif self.variant == "stream_k": + name += "_streamk" + # Atomic keeps the bare "_streamk" suffix (original parity); linear + # and tree are disambiguated, matching KernelNaming.generate. + if self.reduction_strategy != "atomic": + name += f"_{self.reduction_strategy}" + elif self.variant == "grouped": + name += "_grouped" + return name + + # ------------------------------------------------------------------ # + # Serialization + # ------------------------------------------------------------------ # + def to_codegen_json(self) -> Dict[str, Any]: + """Single-config JSON consumed by unified_gemm_codegen.py. + + Note the warp/wave mapping: the codegen calls the warps-per-block + triple ``warp_*`` and the MFMA triple ``warp_tile_*``. We translate + from dispatcher semantics here so the mapping cannot drift. + """ + cfg = { + "tile_config": { + "tile_m": [self.tile_m], + "tile_n": [self.tile_n], + "tile_k": [self.tile_k], + # dispatcher wave_* -> codegen warp_* (warps per block) + "warp_m": [self.wave_m], + "warp_n": [self.wave_n], + "warp_k": [self.wave_k], + # dispatcher warp_tile_* -> codegen warp_tile_* (MFMA shape) + "warp_tile_m": [self.warp_tile_m], + "warp_tile_n": [self.warp_tile_n], + "warp_tile_k": [self.warp_tile_k], + }, + "trait_config": { + "pipeline": [self.pipeline], + "epilogue": [self.epilogue], + "scheduler": [self.scheduler], + "pad_m": [self.pad_m], + "pad_n": [self.pad_n], + "pad_k": [self.pad_k], + "persistent": [self.persistent], + }, + } + # Pin the single reduction strategy so stream-K codegen emits exactly this + # kernel (the generator otherwise expands all strategies in its default). + if self.variant == "stream_k": + cfg["streamk_config"] = {"reduction_strategy": [self.reduction_strategy]} + return cfg + + def to_dict(self) -> Dict[str, Any]: + return { + "dtype_a": self.dtype_a, + "dtype_b": self.dtype_b, + "dtype_c": self.dtype_c, + "dtype_acc": self.dtype_acc, + "layout": self.layout, + "tile": [self.tile_m, self.tile_n, self.tile_k], + "wave": [self.wave_m, self.wave_n, self.wave_k], + "warp_tile": [self.warp_tile_m, self.warp_tile_n, self.warp_tile_k], + "pipeline": self.pipeline, + "scheduler": self.scheduler, + "epilogue": self.epilogue, + "pad": [self.pad_m, self.pad_n, self.pad_k], + "persistent": self.persistent, + "gfx_arch": self.gfx_arch, + "variant": self.variant, + "name": self.name, + } + + def to_ctypes_config(self) -> "_cu.KernelConfig": + """Convert to the ctypes_utils.KernelConfig used by the codegen/validate + helpers. ctypes_utils renames the MFMA triple ``warp_*`` (no _tile).""" + return _cu.KernelConfig( + dtype_a=self.dtype_a, + dtype_b=self.dtype_b, + dtype_c=self.dtype_c, + dtype_acc=self.dtype_acc, + layout_a=_LAYOUT_WORD[_LAYOUT_CHAR[self.layout_a]], + layout_b=_LAYOUT_WORD[_LAYOUT_CHAR[self.layout_b]], + layout_c=_LAYOUT_WORD[_LAYOUT_CHAR[self.layout_c]], + tile_m=self.tile_m, + tile_n=self.tile_n, + tile_k=self.tile_k, + wave_m=self.wave_m, + wave_n=self.wave_n, + wave_k=self.wave_k, + warp_m=self.warp_tile_m, + warp_n=self.warp_tile_n, + warp_k=self.warp_tile_k, + pipeline=self.pipeline, + scheduler=self.scheduler, + epilogue=self.epilogue, + pad_m=self.pad_m, + pad_n=self.pad_n, + pad_k=self.pad_k, + gfx_arch=self.gfx_arch, + variant=self.variant, + ) + + +# ============================================================================ +# Problem +# ============================================================================ + + +@dataclass +class GemmProblem: + """A single GEMM problem: C[MxN] = A[MxK] @ B[KxN].""" + + M: int + N: int + K: int + + @property + def flops(self) -> float: + return 2.0 * self.M * self.N * self.K + + def to_dict(self) -> Dict[str, int]: + return {"M": self.M, "N": self.N, "K": self.K} + + @classmethod + def from_dict(cls, d: Dict[str, int]) -> "GemmProblem": + return cls(M=int(d["M"]), N=int(d["N"]), K=int(d["K"])) + + +@dataclass +class GroupedGemmProblem: + """A grouped GEMM problem: a list of independent (M, N, K) sub-problems + all run by a single grouped kernel launch. + + Each group g computes C_g[M_g x N_g] = A_g[M_g x K_g] @ B_g[K_g x N_g]. + """ + + groups: List[Tuple[int, int, int]] + + @classmethod + def uniform( + cls, group_count: int, M: int, N: int, K: int + ) -> "GroupedGemmProblem": + """All groups share the same (M, N, K) shape.""" + return cls(groups=[(int(M), int(N), int(K)) for _ in range(int(group_count))]) + + @property + def group_count(self) -> int: + return len(self.groups) + + @property + def flops(self) -> float: + return sum(2.0 * m * n * k for (m, n, k) in self.groups) + + def to_dict(self) -> Dict[str, Any]: + return {"groups": [[int(m), int(n), int(k)] for (m, n, k) in self.groups]} + + @classmethod + def from_dict(cls, d: Dict[str, Any]) -> "GroupedGemmProblem": + return cls(groups=[(int(m), int(n), int(k)) for (m, n, k) in d["groups"]]) + + +@dataclass +class GemmResult: + output: np.ndarray + time_ms: float + status: int + tflops: float + kernel_name: str + + @property + def success(self) -> bool: + return self.status == 0 + + +@dataclass +class GroupedGemmResult: + """Result of a grouped GEMM launch: one output per group plus aggregate + timing/throughput across the whole batch.""" + + outputs: List[np.ndarray] + time_ms: float + status: int + tflops: float + kernel_name: str + + @property + def success(self) -> bool: + return self.status == 0 + + +# ============================================================================ +# ctypes ABI wrapper +# ============================================================================ + + +class GemmDispatcherLib: + """Thin ctypes wrapper around a compiled GEMM dispatcher .so. + + Supports both the legacy single-kernel ABI (``dispatcher_get_kernel_name``) + and the multi-kernel ABI (``dispatcher_get_kernel_name_at(index, buf, n)``) + so one .so can report a whole batch and be selected by name. + """ + + def __init__(self, so_path: Path): + self._path = Path(so_path) + self._lib = ctypes.CDLL(str(self._path)) + self._has_indexed = hasattr(self._lib, "dispatcher_get_kernel_name_at") + self._has_grouped = hasattr(self._lib, "dispatcher_run_grouped_gemm") + self._has_single = hasattr(self._lib, "dispatcher_run_gemm") + self._setup_functions() + + def _setup_functions(self) -> None: + lib = self._lib + + lib.dispatcher_initialize.argtypes = [] + lib.dispatcher_initialize.restype = ctypes.c_int + + lib.dispatcher_get_kernel_count.argtypes = [] + lib.dispatcher_get_kernel_count.restype = ctypes.c_int + + lib.dispatcher_get_kernel_name.argtypes = [] + lib.dispatcher_get_kernel_name.restype = ctypes.c_char_p + + if self._has_indexed: + lib.dispatcher_get_kernel_name_at.argtypes = [ + ctypes.c_int, + ctypes.c_char_p, + ctypes.c_int, + ] + lib.dispatcher_get_kernel_name_at.restype = ctypes.c_int + + # Single-problem ABI (regular GEMM .so). Absent on grouped libs. + if self._has_single: + lib.dispatcher_run_gemm.argtypes = [ + ctypes.c_void_p, # A (host) + ctypes.c_void_p, # B (host) + ctypes.c_void_p, # C (host) + ctypes.c_int64, # M + ctypes.c_int64, # N + ctypes.c_int64, # K + ctypes.POINTER(ctypes.c_float), # time_ms + ] + lib.dispatcher_run_gemm.restype = ctypes.c_int + + # Multi-problem ABI (grouped GEMM .so). Absent on regular libs. + if self._has_grouped: + lib.dispatcher_run_grouped_gemm.argtypes = [ + ctypes.c_int, # group_count + ctypes.POINTER(ctypes.c_int64), # Ms[] + ctypes.POINTER(ctypes.c_int64), # Ns[] + ctypes.POINTER(ctypes.c_int64), # Ks[] + ctypes.POINTER(ctypes.c_void_p), # A_ptrs[] + ctypes.POINTER(ctypes.c_void_p), # B_ptrs[] + ctypes.POINTER(ctypes.c_void_p), # C_ptrs[] + ctypes.POINTER(ctypes.c_float), # time_ms + ] + lib.dispatcher_run_grouped_gemm.restype = ctypes.c_int + + lib.dispatcher_cleanup.argtypes = [] + lib.dispatcher_cleanup.restype = None + + @property + def path(self) -> Path: + return self._path + + def initialize(self) -> bool: + return self._lib.dispatcher_initialize() == 0 + + def get_kernel_count(self) -> int: + return int(self._lib.dispatcher_get_kernel_count()) + + @property + def kernel_names(self) -> List[str]: + """List every kernel the .so exposes, by index when available.""" + if self._has_indexed: + names: List[str] = [] + count = self.get_kernel_count() + buf = ctypes.create_string_buffer(256) + for i in range(count): + if self._lib.dispatcher_get_kernel_name_at(i, buf, 256) == 0: + names.append(buf.value.decode("utf-8")) + if names: + return names + # Legacy single-kernel fallback. + raw = self._lib.dispatcher_get_kernel_name() + return [raw.decode("utf-8")] if raw else [] + + def run( + self, A: np.ndarray, B: np.ndarray, C: np.ndarray, M: int, N: int, K: int + ) -> Tuple[int, float]: + time_ms = ctypes.c_float(0.0) + status = self._lib.dispatcher_run_gemm( + A.ctypes.data_as(ctypes.c_void_p), + B.ctypes.data_as(ctypes.c_void_p), + C.ctypes.data_as(ctypes.c_void_p), + M, + N, + K, + ctypes.byref(time_ms), + ) + return status, time_ms.value + + def run_grouped( + self, + A_list: List[np.ndarray], + B_list: List[np.ndarray], + C_list: List[np.ndarray], + Ms: List[int], + Ns: List[int], + Ks: List[int], + ) -> Tuple[int, float]: + """Launch the grouped kernel over a batch of (M, N, K) sub-problems. + + Each A/B/C entry is a host numpy array already laid out (dtype + row/col + transpose) as the kernel expects for its compile-time layout; the caller + (GpuGroupedGemmRunner) does that per-dtype/per-layout packing. Pointers + are marshalled into ctypes pointer arrays. + """ + if not self._has_grouped: + raise RuntimeError( + f"{self._path} does not expose dispatcher_run_grouped_gemm" + ) + + g = len(A_list) + c_int64_arr = (ctypes.c_int64 * g) + c_void_arr = (ctypes.c_void_p * g) + + ms = c_int64_arr(*[int(m) for m in Ms]) + ns = c_int64_arr(*[int(n) for n in Ns]) + ks = c_int64_arr(*[int(k) for k in Ks]) + + a_ptrs = c_void_arr(*[A.ctypes.data_as(ctypes.c_void_p) for A in A_list]) + b_ptrs = c_void_arr(*[B.ctypes.data_as(ctypes.c_void_p) for B in B_list]) + c_ptrs = c_void_arr(*[C.ctypes.data_as(ctypes.c_void_p) for C in C_list]) + + time_ms = ctypes.c_float(0.0) + status = self._lib.dispatcher_run_grouped_gemm( + g, + ms, + ns, + ks, + a_ptrs, + b_ptrs, + c_ptrs, + ctypes.byref(time_ms), + ) + return status, time_ms.value + + def cleanup(self) -> None: + self._lib.dispatcher_cleanup() + + +# ============================================================================ +# GPU runner (constructed from a .so path; loaded only inside a worker) +# ============================================================================ + + +def _fp32_to_bf16_u16(x: np.ndarray) -> np.ndarray: + """Encode fp32 -> bfloat16 bit pattern in a uint16 array (round-to-nearest-even). + + numpy has no native bf16, but the C ABI only cares about the 2-byte memory + layout (sizeof(bf16_t) == 2 == sizeof(uint16)). Truncating the low 16 bits of + the fp32 representation with round-to-nearest-even matches ck_tile's bf16. + """ + u32 = np.ascontiguousarray(x, dtype=np.float32).view(np.uint32) + # round-to-nearest-even: add (lsb-of-kept-bits + 0x7FFF) before truncating + rounding = ((u32 >> 16) & 1) + np.uint32(0x7FFF) + return ((u32 + rounding) >> 16).astype(np.uint16) + + +def _bf16_u16_to_fp32(u16: np.ndarray) -> np.ndarray: + """Decode a uint16 bf16 bit pattern back to fp32 (low 16 mantissa bits zero).""" + return (u16.astype(np.uint32) << 16).view(np.float32) + + +# --------------------------------------------------------------------------- +# fp8 (E4M3) / bf8 (E5M2) -- FNUZ ("NANOO") encoding used by gfx942/MI300. +# +# numpy has no native 8-bit float, and the C ABI only cares about the 1-byte +# memory layout (sizeof(fp8_t) == sizeof(bf8_t) == 1). We carry the value as a +# uint8 bit pattern. As with bf16, the DECODE is the load-bearing half: it must +# return the exact value the device's fp8_t/bf8_t represents for a byte, so the +# NumPy reference multiplies bit-for-bit what the GPU multiplies. The ENCODE only +# needs to land on the nearest representable byte. +# +# FNUZ format (gfx942): bias = 2^(exp_bits-1); the all-1s exponent is a normal +# number (no Inf), the sole NaN is the sign=1/exp=0/mant=0 byte (0x80), and there +# is no negative zero. gfx950/MI350 uses the OCP fp8 format instead; this codec +# targets the gfx942 default and the OCP path needs separate handling. +# --------------------------------------------------------------------------- + + +@functools.lru_cache(maxsize=None) +def _fnuz_decode_table(exp_bits: int, mant_bits: int) -> np.ndarray: + """Build the 256-entry byte -> fp32 value table for an 8-bit FNUZ float. + + The table is a pure function of (exp_bits, mant_bits), so it is cached; the + returned array is marked read-only because callers share the one instance. + """ + bias = (1 << (exp_bits - 1)) + mant_max = 1 << mant_bits + sign_shift = exp_bits + mant_bits + exp_mask = (1 << exp_bits) - 1 + table = np.zeros(256, dtype=np.float32) + for b in range(256): + sign = (b >> sign_shift) & 1 + exp = (b >> mant_bits) & exp_mask + mant = b & (mant_max - 1) + if exp == 0 and mant == 0: + # +0 (0x00); the negative-zero slot (0x80) is the lone NaN. + table[b] = np.float32(np.nan) if sign else np.float32(0.0) + continue + if exp == 0: + val = (mant / mant_max) * (2.0 ** (1 - bias)) # subnormal + else: + val = (1.0 + mant / mant_max) * (2.0 ** (exp - bias)) # normal + table[b] = np.float32(-val if sign else val) + table.flags.writeable = False # shared cached instance -- do not mutate + return table + + +def _fnuz_encode(x: np.ndarray, exp_bits: int, mant_bits: int) -> np.ndarray: + """Encode fp32 -> nearest 8-bit FNUZ float, returned as a uint8 bit pattern.""" + table = _fnuz_decode_table(exp_bits, mant_bits) + sign_byte = np.uint8(1 << (exp_bits + mant_bits)) # 0x80 + + # Positive half (bytes 0..127) holds every non-negative magnitude, sorted. + # Compare in float64: for very large inputs the gap between the two top + # magnitudes is below fp32 resolution, which would tie and mis-saturate. + pos_mag = table[: int(sign_byte)].astype(np.float64) + order = np.argsort(pos_mag) + sorted_mag = pos_mag[order] + sorted_byte = order.astype(np.uint8) + + xf = np.ascontiguousarray(x, dtype=np.float32) + ax = np.abs(xf).astype(np.float64) + # Both neighbours come from the raw insertion point: raw==size saturates to + # the top magnitude (lo==hi), raw==0 pins to zero, otherwise compare the two. + raw = np.searchsorted(sorted_mag, ax) + hi = np.clip(raw, 0, sorted_mag.size - 1) + lo = np.clip(raw - 1, 0, sorted_mag.size - 1) + pick_lo = np.abs(sorted_mag[lo] - ax) <= np.abs(sorted_mag[hi] - ax) + chosen = np.where(pick_lo, lo, hi) + out = sorted_byte[chosen] + + # Apply sign, but never the 0x80 (-0 == NaN) slot: zeros stay +0. + is_zero = sorted_mag[chosen] == 0 + out = np.where((xf < 0) & ~is_zero, out | sign_byte, out) + out = np.where(np.isnan(xf), sign_byte, out) # NaN inputs -> NaN byte + return out.astype(np.uint8).reshape(np.shape(x)) + + +def _fp32_to_fp8_u8(x: np.ndarray) -> np.ndarray: + """Encode fp32 -> fp8 E4M3 (FNUZ) bit pattern in a uint8 array.""" + return _fnuz_encode(x, exp_bits=4, mant_bits=3) + + +def _fp8_u8_to_fp32(u8: np.ndarray) -> np.ndarray: + """Decode an fp8 E4M3 (FNUZ) bit pattern back to fp32.""" + return _fnuz_decode_table(4, 3)[u8.astype(np.intp)] + + +def _fp32_to_bf8_u8(x: np.ndarray) -> np.ndarray: + """Encode fp32 -> bf8 E5M2 (FNUZ) bit pattern in a uint8 array.""" + return _fnuz_encode(x, exp_bits=5, mant_bits=2) + + +def _bf8_u8_to_fp32(u8: np.ndarray) -> np.ndarray: + """Decode a bf8 E5M2 (FNUZ) bit pattern back to fp32.""" + return _fnuz_decode_table(5, 2)[u8.astype(np.intp)] + + +# Output (C) element dtype for an A/B element dtype, mirroring the codegen's +# CommonTypeMappings.get_output_dtype: fp8/bf8 accumulate into fp16, int8 into +# int32, everything else stores in its own dtype. +_OUTPUT_DTYPE = {"fp8": "fp16", "bf8": "fp16", "int8": "int32"} + + +def _output_dtype(dtype: str) -> str: + return _OUTPUT_DTYPE.get(dtype, dtype) + + +def _dtype_from_kernel_name(name: str) -> str: + """Extract the dtype token from a kernel name like ``gemm___...``.""" + parts = name.split("_") + return parts[1] if len(parts) > 1 else "fp16" + + +def _layout_from_kernel_name(name: str) -> str: + """Extract the 3-char layout token (e.g. 'rcr') from a kernel name. + + Name format is ``gemm___...``; each char is 'r' (row-major) + or 'c' (column-major) for operands A, B, C respectively. + """ + parts = name.split("_") + if len(parts) > 2 and len(parts[2]) == 3 and set(parts[2]) <= {"r", "c"}: + return parts[2] + return "rcr" + + +class GpuGemmRunner: + """High-level runner: construct from a .so path, call run(A, B, problem). + + The GEMM ctypes ABI takes HOST pointers and manages GPU memory internally + (hipMalloc/hipMemcpy/hipFree), so this runner stays simple -- it hands + numpy arrays straight to the .so. + """ + + def __init__(self, lib_path: Path): + self.lib = GemmDispatcherLib(lib_path) + if not self.lib.initialize(): + raise RuntimeError(f"Failed to initialize dispatcher .so: {lib_path}") + names = self.lib.kernel_names + self._kernel_name = names[0] if names else "unknown" + + @property + def kernel_name(self) -> str: + return self._kernel_name + + def run( + self, A: np.ndarray, B: np.ndarray, problem: GemmProblem + ) -> GemmResult: + M, N, K = problem.M, problem.N, problem.K + + # Caller passes logical A (MxK) and B (KxN) row-major. The compiled + # kernel dictates both the element dtype and the memory layout of each + # operand (encoded in its name, e.g. gemm_bf16_rcr_...). The C ABI sizes + # its device buffers from sizeof(ADataType) and the kernel computes + # strides from its compiled layout + M,N,K -- so the host buffers must + # be laid out byte-for-byte in the order the kernel expects. + # + # For a 'c' (column-major) operand we transpose so the contiguous host + # buffer's flat memory matches column-major order: + # col-major A (MxK) <=> ascontiguousarray(A.T) (KxM row-major) + # Likewise column-major C (MxN) lands in memory as NxM row-major, so we + # allocate (N,M) and transpose the result back to logical MxN. + dtype = _dtype_from_kernel_name(self._kernel_name) + la, lb, lc = _layout_from_kernel_name(self._kernel_name) + + A_lay = A if la == "r" else A.T + B_lay = B if lb == "r" else B.T + C_shape = (M, N) if lc == "r" else (N, M) + + # Build A/B host buffers in the kernel's element dtype. The encode + # helpers (bf16/fp8/bf8) already force a contiguous float32 source, so an + # outer ascontiguousarray would only add a redundant copy; the native + # numpy dtypes (fp16/int8) still need it. + if dtype == "bf16": + A_h = _fp32_to_bf16_u16(A_lay) + B_h = _fp32_to_bf16_u16(B_lay) + elif dtype == "fp8": + A_h = _fp32_to_fp8_u8(A_lay) + B_h = _fp32_to_fp8_u8(B_lay) + elif dtype == "bf8": + A_h = _fp32_to_bf8_u8(A_lay) + B_h = _fp32_to_bf8_u8(B_lay) + elif dtype == "int8": + A_h = np.ascontiguousarray(A_lay, dtype=np.int8) + B_h = np.ascontiguousarray(B_lay, dtype=np.int8) + else: # fp16 (default) + A_h = np.ascontiguousarray(A_lay, dtype=np.float16) + B_h = np.ascontiguousarray(B_lay, dtype=np.float16) + + # The C buffer's element size must equal sizeof(CDataType): fp8/bf8 + # accumulate into fp16, int8 into int32, otherwise the input dtype. + out_dtype = _output_dtype(dtype) + _C_NP = {"fp16": np.float16, "bf16": np.uint16, "int32": np.int32} + if out_dtype not in _C_NP: + # A silent fp16 fallback would size the host C buffer wrong for an + # unrecognized dtype (sizeof(CDataType) mismatch -> corrupt results + # across the C ABI). Fail loudly so a new dtype is added here. + raise ValueError( + f"unsupported C dtype {out_dtype!r} (from input dtype {dtype!r}); " + "add it to _C_NP so the host buffer matches sizeof(CDataType)" + ) + C_h = np.zeros(C_shape, dtype=_C_NP[out_dtype]) + + status, time_ms = self.lib.run(A_h, B_h, C_h, M, N, K) + + # Decode the output back to a comparable numeric array. + if out_dtype == "bf16": + C_dec = _bf16_u16_to_fp32(C_h) + else: # fp16 / int32 are already directly comparable + C_dec = C_h + C_out = C_dec if lc == "r" else C_dec.T + + tflops = (problem.flops / (time_ms * 1e-3)) / 1e12 if time_ms > 0 else 0.0 + return GemmResult( + output=C_out, + time_ms=time_ms, + status=status, + tflops=tflops, + kernel_name=self._kernel_name, + ) + + +class GpuGroupedGemmRunner: + """High-level runner for the GROUPED variant: construct from a grouped .so + path, call run(A_list, B_list, problem). + + Like GpuGemmRunner, the ctypes ABI takes HOST pointers and manages GPU + memory internally (per group), so this runner only marshals the host operand + arrays. The runner is parameterized by ``(dtype, layout)`` (mirroring + ``GpuGemmRunner``/``GemmProblem``): the A/B operands are cast to the per-dtype + INPUT numpy codec (fp16/bf16/fp8-E4M3FNUZ/bf8-E5M2FNUZ) and transposed per the + A/B/C layout so the contiguous host buffer matches the layout the kernel was + generated with (the ctypes lib derives strides from the same layouts). + + The C/output buffer is sized/typed by the kernel's OUTPUT dtype, not the input + dtype: for fp8/bf8 inputs the generated kernel's ``CDataType`` is fp16, so the + host C buffer is fp16 (2 bytes) even though A/B are 1-byte fp8/bf8. Sizing C by + the input dtype would under-allocate by 2x and the ctypes copy-back would + overrun the host buffer (heap corruption). See :func:`output_numpy_dtype_for`. + """ + + def __init__(self, lib_path: Path, dtype: str = "fp16", layout: str = "rcr"): + self.lib = GemmDispatcherLib(lib_path) + if not self.lib.initialize(): + raise RuntimeError( + f"Failed to initialize grouped dispatcher .so: {lib_path}" + ) + names = self.lib.kernel_names + self._kernel_name = names[0] if names else "unknown" + self._dtype = dtype + # A/B (input) codec vs C (output) codec: they differ for fp8/bf8 + # (output is fp16), so keep them distinct to size the C buffer correctly. + self._np_dtype = numpy_dtype_for(dtype) + self._c_np_dtype = output_numpy_dtype_for(dtype) + if len(layout) != 3 or any(ch not in ("r", "c") for ch in layout): + raise ValueError(f"layout must be a 3-char r/c string, got {layout!r}") + self._layout = layout + + @property + def kernel_name(self) -> str: + return self._kernel_name + + def run( + self, + A_list: List[np.ndarray], + B_list: List[np.ndarray], + problem: GroupedGemmProblem, + ) -> GroupedGemmResult: + groups = problem.groups + if len(A_list) != len(groups) or len(B_list) != len(groups): + raise ValueError( + "A_list/B_list length must match the number of groups " + f"({len(A_list)}/{len(B_list)} vs {len(groups)})" + ) + + Ms = [g[0] for g in groups] + Ns = [g[1] for g in groups] + Ks = [g[2] for g in groups] + + la, lb, _lc = self._layout[0], self._layout[1], self._layout[2] + nd = self._np_dtype + c_nd = self._c_np_dtype # OUTPUT dtype (fp16 for fp8/bf8); see __init__. + + A_h: List[np.ndarray] = [] + B_h: List[np.ndarray] = [] + C_h: List[np.ndarray] = [] + for A, B, (M, N, _K) in zip(A_list, B_list, groups): + # A logically MxK, B logically KxN, C row-major MxN (CLayout is always + # RowMajor for grouped). Store each operand so its contiguous buffer + # matches its layout: row-major -> as-is, col-major -> transpose. + A_buf = A if la == "r" else A.T + B_buf = B if lb == "r" else B.T + A_h.append(np.ascontiguousarray(A_buf, dtype=nd)) + B_h.append(np.ascontiguousarray(B_buf, dtype=nd)) + # Size C by the kernel's CDataType (output dtype), NOT the input dtype: + # fp8/bf8 inputs produce fp16 output, so a 1-byte C would be overrun. + C_h.append(np.zeros((M, N), dtype=c_nd)) + + status, time_ms = self.lib.run_grouped(A_h, B_h, C_h, Ms, Ns, Ks) + + tflops = (problem.flops / (time_ms * 1e-3)) / 1e12 if time_ms > 0 else 0.0 + return GroupedGemmResult( + outputs=C_h, + time_ms=time_ms, + status=status, + tflops=tflops, + kernel_name=self._kernel_name, + ) + + +# ============================================================================ +# Build API: codegen + hipcc -> .so paths (no GPU) +# ============================================================================ + +# AMDGPU codegen flags Tile Engine passes to hipcc for GEMM kernels. These MUST +# match, flag-for-flag, the set the Tile Engine gemm_universal benchmark TU is +# compiled with (projects/composablekernel/CMakeLists.txt) -- they steer inlining +# and register allocation, and because persistent kernels size their grid by +# occupancy, any mismatch produces large perf gaps vs Tile Engine and makes the +# parity comparison no longer apples-to-apples. +# +# Tile Engine's actual GEMM benchmark flags (verified from its compile_commands): +# -fno-offload-uniform-block +# -mllvm --lsr-drop-solution=1 +# -mllvm -enable-post-misched=0 +# -mllvm -amdgpu-early-inline-all=true +# -mllvm -amdgpu-function-calls=false +# -mllvm -amdgpu-coerce-illegal-types=1 (CMake adds this only when the +# compiler accepts it; see below) +# NOTE: -enable-noalias-to-md-conversion=0 is NOT a Tile Engine GEMM flag (it only +# appears in the standalone CK examples/tests), so it deliberately is NOT here. +_TILE_ENGINE_CODEGEN_FLAGS = ( + "-mllvm", "--lsr-drop-solution=1", + "-mllvm", "-enable-post-misched=0", + "-mllvm", "-amdgpu-early-inline-all=true", + "-mllvm", "-amdgpu-function-calls=false", + "-fno-offload-uniform-block", +) + +# Flags Tile Engine's CMake only adds when ``check_cxx_compiler_flag`` passes +# (newer -mllvm options that some clang builds reject). We mirror that probe so +# the bridge stays matched to Tile Engine on every toolchain: the flag is present +# exactly where TE would have it, and absent where TE's CMake would also skip it. +_PROBED_CODEGEN_FLAGS = ( + ("-mllvm", "-amdgpu-coerce-illegal-types=1"), +) + +# The single hipcc used for BOTH the flag-acceptance probe and the actual +# compile/link. Pinned to match Old-TE, which builds via CMake's +# CMAKE_CXX_COMPILER (== /opt/rocm/bin/hipcc in CK CI) and never reads $HIPCC; +# ctypes_utils uses the same path. Keeping probe == compiler guarantees the +# -mllvm flag decision reflects the compiler that actually builds the kernel. +_HIPCC = "/opt/rocm/bin/hipcc" + + +def _resolve_hipcc() -> str: + return _HIPCC + + +@functools.lru_cache(maxsize=None) +def _hipcc_accepts(flag_tuple: Tuple[str, ...]) -> bool: + """Mirror CMake check_cxx_compiler_flag: does hipcc compile a trivial TU with + these flags? Cached so the probe runs at most once per distinct flag set.""" + hipcc = _resolve_hipcc() + try: + with tempfile.TemporaryDirectory() as d: + src = Path(d) / "probe.cpp" + src.write_text("int main(){}\n") + r = subprocess.run( + [hipcc, *flag_tuple, "-c", str(src), "-o", str(Path(d) / "probe.o")], + capture_output=True, timeout=120, + ) + return r.returncode == 0 + except Exception: + return False + + +@functools.lru_cache(maxsize=1) +def _tile_engine_codegen_flags() -> Tuple[str, ...]: + """Tile Engine's GEMM codegen flags plus any probe-gated flags the compiler + accepts -- the exact backend flag set the TE benchmark is built with.""" + flags = list(_TILE_ENGINE_CODEGEN_FLAGS) + for pair in _PROBED_CODEGEN_FLAGS: + if _hipcc_accepts(pair): + flags = list(pair) + flags + return tuple(flags) + + +def _ctypes_source_name(config: GemmKernelConfig) -> str: + """Pick the ctypes ABI source for a config's variant. + + Variants whose launch ABI differs from the single-problem + ``dispatcher_run_gemm`` path need their own lib: + * stream_k keeps the single-problem C ABI (single A/B/C, M/N/K) but its + lib builds a ``StreamKHostArgs`` and calls ``SelectedKernel::launch`` + directly instead of routing through the registry. + * grouped has a multi-problem launch signature the single-problem + ``gemm_ctypes_lib.cpp`` cannot express. + """ + if config.variant == "stream_k": + return "streamk_gemm_ctypes_lib.cpp" + if config.variant == "grouped": + return "grouped_gemm_ctypes_lib.cpp" + return "gemm_ctypes_lib.cpp" + + +def _build_compile_jobs( + config: GemmKernelConfig, header: Path +) -> Tuple[Dict[str, Any], Path]: + """Replicate the (validated) compile+link commands from ctypes_utils.""" + root = _cu.get_dispatcher_root() + ck_root = root.parent + build_dir = _cu.get_build_dir() + output_dir = _cu.get_generated_kernels_dir() + ctypes_source = root / "bindings" / "ctypes" / _ctypes_source_name(config) + static_lib = build_dir / "libck_tile_dispatcher.a" + + lib_path = build_dir / "examples" / f"lib{config.name}.so" + obj_file = lib_path.with_suffix(".o") + # The Stream-K path skips the cmake build that would normally create this + # directory, so ensure it exists before hipcc writes the object/.so here. + lib_path.parent.mkdir(parents=True, exist_ok=True) + + # Per-variant AMDGPU codegen flags. The regular path matches Tile Engine's + # gemm_universal build via _tile_engine_codegen_flags(). Stream-K must instead + # match TE's gemm_streamk build EXACTLY for a fair A/B: -enable-post-misched=0 + # is applied unconditionally (not persistent-gated) and it does NOT use + # -enable-noalias-to-md-conversion=0. + is_streamk = getattr(config, "variant", "") == "stream_k" + variant_flags = ( + [ + "-std=c++20", + "-fno-offload-uniform-block", + "-mllvm", "--lsr-drop-solution=1", + "-mllvm", "-enable-post-misched=0", + "-mllvm", "-amdgpu-early-inline-all=true", + "-mllvm", "-amdgpu-function-calls=false", + "--offload-compress", + ] + if is_streamk + else list(_tile_engine_codegen_flags()) + ) + + compile_cmd = [ + _resolve_hipcc(), + "-c", + "-fPIC", + "-O3", + f"-I{root / 'include'}", + f"-I{ck_root / 'include'}", + f"-I{ck_root}", + f"-I{str(output_dir)}", + "-DCK_TILE_SINGLE_KERNEL_INCLUDE", + f"-include{header}", + "-D__HIP_PLATFORM_AMD__", + f"--offload-arch={config.gfx_arch}", + f'-DGFX_ARCH="{config.gfx_arch}"', + # Match Tile Engine's AMDGPU codegen flags exactly (see variant_flags / + # _tile_engine_codegen_flags). Without them the kernel is compiled with + # different inlining/register allocation, which changes occupancy; + # persistent kernels size their grid by occupancy + # (UniversalGemmKernel::MaxOccupancyGridSize = #CUs x occupancy), so a + # mismatch shows up as large perf gaps vs Tile Engine on persistent tiles. + *variant_flags, + "-Wno-undefined-func-template", + "-Wno-float-equal", + str(ctypes_source), + "-o", + str(obj_file), + ] + link_cmd = [ + _resolve_hipcc(), + "-shared", + "-fPIC", + f"--offload-arch={config.gfx_arch}", + "--hip-link", + str(obj_file), + # The Stream-K ctypes lib launches the force-included kernel directly and + # references no registry/dispatcher symbols, so its .so does not need the + # dispatcher static lib. The regular path still links it. + *([] if is_streamk else [str(static_lib)]), + "-o", + str(lib_path), + ] + job = {"compile_cmd": compile_cmd, "link_cmd": link_cmd, "lib_path": str(lib_path)} + return job, lib_path + + +def setup_multiple_gemm_dispatchers( + configs: List[GemmKernelConfig], + verbose: bool = True, + max_workers: Optional[int] = None, +) -> List[Optional[Path]]: + """Codegen + compile each config into its own .so. Returns .so paths. + + This is the build half of the bridge. It touches NO GPU -- pure CPU + codegen + hipcc, run massively in parallel -- and returns only ``Path`` + objects (``None`` for configs that failed to generate/compile), aligned to + the input order. Benchmarking happens later, in an isolated worker. + """ + import sys + + n = len(configs) + results: List[Optional[Path]] = [None] * n + if n == 0: + return results + + max_workers = max_workers or min(multiprocessing.cpu_count(), 8) + + # Dedupe identical configs by name; compile once, share the path. + first_index: Dict[str, int] = {} + unique: List[int] = [] + for i, c in enumerate(configs): + key = c.name + if key not in first_index: + first_index[key] = i + unique.append(i) + + codegen_script = _cu.get_codegen_path() + output_dir = _cu.get_generated_kernels_dir() + static_lib = _cu.get_build_dir() / "libck_tile_dispatcher.a" + ctypes_dir = _cu.get_dispatcher_root() / "bindings" / "ctypes" + needed_sources = {ctypes_dir / _ctypes_source_name(c) for c in configs} + missing = [str(p) for p in needed_sources if not p.exists()] + # Stream-K .so links only the force-included kernel (no registry/dispatcher + # symbols), so it does not need the dispatcher static lib; only the regular + # path requires it. + streamk_build = all(c.variant == "stream_k" for c in configs) + if (not streamk_build and not static_lib.exists()) or missing: + raise FileNotFoundError( + "Missing static lib or ctypes source required for compilation:\n" + f" {static_lib}\n " + "\n ".join(missing) + "\n" + "Build the dispatcher first (cmake + make)." + ) + + # -- Step 1: parallel codegen (one header per unique config) ----------- + codegen_args = [] + for i in unique: + c = configs[i] + codegen_args.append( + { + "index": i, + "python": sys.executable, + "codegen_script": str(codegen_script), + "output_dir": str(output_dir), + "dtype": c.dtype_a, + "layout": c.layout, + "gpu_target": c.gfx_arch, + "tile_config_json": c.to_codegen_json(), + "hpp_glob_pattern": f"{c.name}.hpp", + # Honor the config's variant so non-standard kernels are codegen'd + # as themselves; the kernel name (and thus hpp_glob_pattern) already + # carries the variant suffix, so a missing/standard value here would + # produce a header whose name never matches the requested pattern. + "variant": c.variant, + } + ) + + if verbose: + print( + f"[gemm-bridge] codegen: {len(codegen_args)} headers " + f"(workers={max_workers})..." + ) + + headers: Dict[int, Path] = {} + with ProcessPoolExecutor(max_workers=max_workers) as ex: + futs = { + ex.submit(_cu._generate_single_kernel_subprocess, a): a["index"] + for a in codegen_args + } + for fut in as_completed(futs): + i = futs[fut] + ok, hdr, err = fut.result() + if ok and hdr: + headers[i] = Path(hdr) + if verbose: + print(f" OK codegen [{i}] {configs[i].name}") + elif verbose: + print(f" FAIL codegen [{i}] {configs[i].name}: {err}") + + # -- Step 2: parallel compile + link ----------------------------------- + compile_jobs = [] + job_index: List[int] = [] + for i in unique: + hdr = headers.get(i) + if hdr is None: + continue + job, _ = _build_compile_jobs(configs[i], hdr) + compile_jobs.append(job) + job_index.append(i) + + if verbose and compile_jobs: + print( + f"[gemm-bridge] compile: {len(compile_jobs)} .so " + f"(workers={max_workers})..." + ) + + with ProcessPoolExecutor(max_workers=max_workers) as ex: + futs = { + ex.submit(_cu._run_hipcc_subprocess, job): job_index[j] + for j, job in enumerate(compile_jobs) + } + for fut in as_completed(futs): + i = futs[fut] + ok, lp, err = fut.result() + if ok and lp: + results[i] = Path(lp) + if verbose: + print(f" OK compile [{i}] {Path(lp).name}") + elif verbose: + print(f" FAIL compile [{i}] {configs[i].name}: {err}") + + # -- Fan the deduped result back out to every input index -------------- + for i, c in enumerate(configs): + if results[i] is None: + results[i] = results[first_index[c.name]] + + if verbose: + ok_count = sum(1 for r in results if r is not None) + print(f"[gemm-bridge] setup complete: {ok_count}/{n} configs -> .so") + + return results + + +# ============================================================================ +# TE sweep config expansion +# ============================================================================ + + +def _expand_range(entry: Dict[str, Any]) -> List[int]: + """Expand a tile_config entry: either {min,max,step} or {values:[...]}.""" + if "values" in entry: + return list(entry["values"]) + lo = int(entry["min"]) + hi = int(entry["max"]) + step = int(entry.get("step", 1)) + return list(range(lo, hi + 1, step)) + + +def _expand_values(entry: Optional[Dict[str, Any]], default: List[Any]) -> List[Any]: + if entry is None: + return list(default) + return list(entry.get("values", default)) + + +def _is_power_of_two(x: int) -> bool: + return x > 0 and (x & (x - 1)) == 0 + + +def expand_sweep( + config_path: str, + arch: str, + dtype: str = "fp16", + layout: str = "rcr", + variant: str = "standard", +) -> List[GemmKernelConfig]: + """Expand a Tile Engine GEMM JSON sweep config into GemmKernelConfig list. + + The TE config uses ``tile_config`` (ranges/value-lists for tile, warp and + warp_tile triples) and ``trait_config`` (value-lists for pipeline, + scheduler, epilogue, pad_*, persistent). Every valid combination becomes + one GemmKernelConfig. Invalid combinations are dropped via the dispatcher's + own validator, and duplicates (by .name) are collapsed. + + The operand signature (``dtype``, ``layout``) is applied to every emitted + GemmKernelConfig, so the same sweep expands across any supported dtype/layout. + """ + with open(config_path) as f: + cfg = json.load(f) + + tc = cfg.get("tile_config", {}) + tr = cfg.get("trait_config", {}) + + tile_ms = _expand_range(tc["tile_m"]) + tile_ns = _expand_range(tc["tile_n"]) + tile_ks = _expand_range(tc["tile_k"]) + wave_ms = _expand_range(tc["warp_m"]) # TE "warp" == wave count + wave_ns = _expand_range(tc["warp_n"]) + wave_ks = _expand_range(tc["warp_k"]) + wt_ms = _expand_range(tc["warp_tile_m"]) + wt_ns = _expand_range(tc["warp_tile_n"]) + wt_ks = _expand_range(tc["warp_tile_k"]) + + pipelines = _expand_values(tr.get("pipeline"), ["compv3"]) + schedulers = _expand_values(tr.get("scheduler"), ["intrawave"]) + epilogues = _expand_values(tr.get("epilogue"), ["cshuffle"]) + pad_ms = _expand_values(tr.get("pad_m"), [False]) + pad_ns = _expand_values(tr.get("pad_n"), [False]) + pad_ks = _expand_values(tr.get("pad_k"), [False]) + persistents = _expand_values(tr.get("persistent"), [False]) + + # Stream-K only: sweep reduction strategies (atomic/linear/tree). Other + # variants keep a single dummy value so the product is unaffected. + if variant == "stream_k": + sk = cfg.get("streamk_config", {}) + reductions = _expand_values(sk.get("reduction_strategy"), ["atomic"]) + else: + reductions = ["atomic"] + + la, lb, lc = layout[0], layout[1], layout[2] + + configs: List[GemmKernelConfig] = [] + seen: set = set() + for ( + tm, + tn, + tk, + wm, + wn, + wk, + wtm, + wtn, + wtk, + pipe, + sched, + epi, + pm, + pn, + pk, + persist, + red, + ) in itertools.product( + tile_ms, + tile_ns, + tile_ks, + wave_ms, + wave_ns, + wave_ks, + wt_ms, + wt_ns, + wt_ks, + pipelines, + schedulers, + epilogues, + pad_ms, + pad_ns, + pad_ks, + persistents, + reductions, + ): + c = GemmKernelConfig( + dtype_a=dtype, + dtype_b=dtype, + dtype_c=_output_dtype(dtype), + dtype_acc=("int32" if dtype == "int8" else "fp32"), + layout_a=_LAYOUT_WORD[la], + layout_b=_LAYOUT_WORD[lb], + layout_c=_LAYOUT_WORD[lc], + tile_m=tm, + tile_n=tn, + tile_k=tk, + wave_m=wm, + wave_n=wn, + wave_k=wk, + warp_tile_m=wtm, + warp_tile_n=wtn, + warp_tile_k=wtk, + pipeline=pipe, + scheduler=sched, + epilogue=epi, + pad_m=bool(pm), + pad_n=bool(pn), + pad_k=bool(pk), + persistent=bool(persist), + gfx_arch=arch, + variant=variant, + reduction_strategy=red, + ) + if c.name in seen: + continue + val = _cu.validate_kernel_config(c.to_ctypes_config()) + if not val.is_valid: + continue + # Tile/CShuffle correctness gate (mirrors unified_gemm_codegen's + # TileConfig.is_valid + the power-of-two repeat rule; the ctypes + # validate_kernel_config above does NOT enforce either). A block tile must + # split evenly across its waves -- tile % (wave * warp_tile) == 0 -- and + # the CShuffle epilogue stores the accumulator through LDS in power-of-two + # MRepeat/NRepeat chunks, so the per-wave repeat must be a power of two. + # Tiles that violate either still compile but produce numerically WRONG + # results at runtime. Observed on MI350 for tile_m=192 (MRepeat=3) and + # tile_n=192 (e.g. 64x192x64_1x4x1, 192 not divisible by 4*32) -- both + # verified incorrect on the bridge and Tile Engine. Power-of-two tiles + # (64/128/256) are unaffected. + m_div = wm * wtm + n_div = wn * wtn + if m_div <= 0 or n_div <= 0 or tm % m_div != 0 or tn % n_div != 0: + continue + if epi == "cshuffle": + if not _is_power_of_two(tm // m_div) or not _is_power_of_two(tn // n_div): + continue + seen.add(c.name) + configs.append(c) + + return configs diff --git a/dispatcher/scripts/generate_profiler_kernels.py b/dispatcher/scripts/generate_profiler_kernels.py index 4b610b9d3be..27d2d272348 100755 --- a/dispatcher/scripts/generate_profiler_kernels.py +++ b/dispatcher/scripts/generate_profiler_kernels.py @@ -5,19 +5,17 @@ # Generates dispatcher-based kernels for the CK Profiler (all directions). # # This script: -# 1. Reads JSON config files -# 2. Calls load_configs_from_json + UnifiedGroupedConvCodegen.generate_all() for each JSON +# 1. Generates GEMM + depthwise configs from tile_math rules via get_default_configs() +# 2. Calls UnifiedGroupedConvCodegen.generate_all() to emit C++ kernel headers # 3. Generates include_all_grouped_conv__kernels.hpp # 4. Generates chunked register_*_chunk_N.cpp files + register_all_grouped_conv_kernels.cpp # # Usage: # python3 generate_profiler_kernels.py \ # --variant {fwd,bwd_data,bwd_weight} \ -# --config-dir \ -# --codegen \ # --output-dir \ # --arch gfx950 \ -# [--config-set tests|profiler] +# [--mode tests|profiler] import argparse import sys @@ -55,26 +53,18 @@ }, } +VARIANT_MAP = { + "fwd": "FORWARD", + "bwd_data": "BACKWARD_DATA", + "bwd_weight": "BACKWARD_WEIGHT", +} -def generate_kernels_from_config(config_file, output_dir, arch): - """Generate kernels for a single JSON config via direct Python API.""" - import json - from unified_grouped_conv_codegen import UnifiedGroupedConvCodegen, load_configs_from_json - try: - configs = load_configs_from_json(config_file, arch=arch) - # Extract datatype from JSON config (matches old --config-file behavior) - with open(config_file, "r") as f: - config_data = json.load(f) - datatype = config_data["datatype"] - # The JSON configs are valid for all architectures. - # Hence, disable the arch_filter. - codegen = UnifiedGroupedConvCodegen(output_dir=output_dir, gpu_target=arch, enable_arch_filter=False) - codegen.generate_all(configs, datatypes=[datatype]) - return True - except Exception as e: - print(f"ERROR generating from {config_file}: {e}", file=sys.stderr) - return False +def _ensure_codegen_importable(): + """Ensure the codegen directory is on sys.path.""" + codegen_dir = str(Path(__file__).resolve().parent.parent / "codegen") + if codegen_dir not in sys.path: + sys.path.insert(0, codegen_dir) def collect_kernel_headers(output_dir, glob_pattern): @@ -106,47 +96,58 @@ def main(): description="Generate dispatcher-based kernels for CK Profiler." ) parser.add_argument("--variant", required=True, choices=list(VARIANT_CONFIG.keys())) - parser.add_argument("--config-dir", required=True) - parser.add_argument("--codegen", required=True) parser.add_argument("--output-dir", required=True) parser.add_argument("--arch", default="gfx950") - parser.add_argument("--config-set", default="tests", choices=["tests", "profiler"]) + parser.add_argument("--rule-set", default="tests", + choices=["profiler", "tests", "full", "full-tests", "tiny", "default"], + help="Rule set: 'profiler'/'tests' (CK Builder " + "profiler/tests instance sets generated in memory " + "from the .conf configs), 'full' (full rule-derived " + "per-(variant,ndim,datatype) set), 'full-tests' " + "(~20% stratified subset of 'full'), 'tiny' " + "(minimal >=10-config subset of 'full-tests'), or " + "'default' (original hand-curated heuristics)") args = parser.parse_args() cfg = VARIANT_CONFIG[args.variant] - config_dir = Path(args.config_dir) / args.config_set - codegen_path = Path(args.codegen) output_dir = Path(args.output_dir) output_dir.mkdir(parents=True, exist_ok=True) - # Add the codegen directory to sys.path so unified_grouped_conv_codegen - # and its siblings are importable regardless of working directory. - codegen_dir = str(codegen_path.parent.resolve()) - if codegen_dir not in sys.path: - sys.path.insert(0, codegen_dir) - - if not config_dir.exists(): - print(f"ERROR: Config directory not found: {config_dir}", file=sys.stderr) - sys.exit(1) + _ensure_codegen_importable() + from unified_grouped_conv_codegen import ( + UnifiedGroupedConvCodegen, + GroupedConvVariant, + get_default_configs, + ) - json_configs = sorted(config_dir.glob("*.json")) - if not json_configs: - print(f"ERROR: No JSON config files in {config_dir}", file=sys.stderr) - sys.exit(1) + variant_enum = GroupedConvVariant[VARIANT_MAP[args.variant]] + datatypes = ["fp16", "bf16", "fp32"] - print(f"Found {len(json_configs)} config files in {config_dir}") + # --- Step 1: Generate configs from rules --- + print(f"Generating configs from rules (variant={args.variant}, " + f"arch={args.arch}, rule_set={args.rule_set})...") - success = True - for config_file in json_configs: - print(f"Generating from {config_file.name}...") - if not generate_kernels_from_config(config_file, output_dir, args.arch): - success = False + configs = get_default_configs( + arch=args.arch, + variants=[variant_enum], + ndims=[2, 3], + datatypes=datatypes, + rule_set=args.rule_set, + ) + print(f"Generated {len(configs)} configs from rules") - if not success: - print("ERROR: Some kernel generations failed", file=sys.stderr) + if not configs: + print("ERROR: No configs generated from rules", file=sys.stderr) sys.exit(1) + # --- Step 2: Generate kernel headers --- + codegen = UnifiedGroupedConvCodegen( + output_dir=output_dir, gpu_target=args.arch, enable_arch_filter=False, + ) + codegen.generate_all(configs, datatypes=datatypes) + + # --- Step 3: Collect headers and generate registration --- headers = collect_kernel_headers(output_dir, cfg["glob_pattern"]) print(f"Found {len(headers)} generated kernel headers") diff --git a/dispatcher/scripts/registration_codegen.py b/dispatcher/scripts/registration_codegen.py index 184fd559186..8b18c3e301e 100644 --- a/dispatcher/scripts/registration_codegen.py +++ b/dispatcher/scripts/registration_codegen.py @@ -163,7 +163,7 @@ def parse_kernel_metadata(kname): return { "ndim": ndim, "dtype": dtype, - "layout": "nhwgc", + "layout": "ndhwgc" if "_ndhwgc_" in kname else "nhwgc", "tile_m": tile_m, "tile_n": tile_n, "tile_k": tile_k, "wave_m": wave_m, "wave_n": wave_n, "wave_k": wave_k, "warp_m": warp_m, "warp_n": warp_n, "warp_k": warp_k, diff --git a/dispatcher/src/dispatcher.cpp b/dispatcher/src/dispatcher.cpp index 133485b2487..3aad515c3db 100644 --- a/dispatcher/src/dispatcher.cpp +++ b/dispatcher/src/dispatcher.cpp @@ -3,6 +3,7 @@ #include "ck_tile/dispatcher/dispatcher.hpp" #include "ck_tile/dispatcher/dispatcher_error.hpp" +#include #include #include @@ -17,6 +18,54 @@ Dispatcher::Dispatcher(Registry* registry, const std::string& gfx_arch) { } +Dispatcher::~Dispatcher() +{ + if(workspace_) + { + (void)hipFree(workspace_); + workspace_ = nullptr; + workspace_bytes_ = 0; + } +} + +void Dispatcher::ensure_workspace(std::size_t bytes, void* stream) const +{ + // Not thread-safe: mutates the Dispatcher-owned buffer. Safe because a + // Dispatcher is used from a single stream/thread (see the concurrency + // contract in dispatcher.hpp) -- there is no shared-buffer contention to + // guard against, so no lock is needed. + if(bytes > workspace_bytes_) + { + if(workspace_) + { + (void)hipFree(workspace_); + workspace_ = nullptr; + workspace_bytes_ = 0; + } + + if(hipMalloc(&workspace_, bytes) != hipSuccess) + { + workspace_ = nullptr; + workspace_bytes_ = 0; + throw DispatcherError("Dispatcher: failed to allocate Stream-K reduction workspace"); + } + workspace_bytes_ = bytes; + } + + // Zero the region the kernel will use. Linear/Tree reductions accumulate into + // this buffer and read it before writing, so a stale/garbage buffer corrupts + // results. Doing it here makes correctness independent of whether the backend's + // per-iteration preprocess reset runs (e.g. on the non-benchmarking nrepeat=1 + // path), mirroring the internal DeviceMem::SetZero() the standalone launch does. + // Zeroed on the caller's stream so the reset is ordered against the kernel + // launch that follows (same stream) without an implicit device-wide sync. + if(bytes > 0 && + hipMemsetAsync(workspace_, 0, bytes, static_cast(stream)) != hipSuccess) + { + throw DispatcherError("Dispatcher: failed to zero Stream-K reduction workspace"); + } +} + void Dispatcher::set_heuristic(HeuristicFunction heuristic) { heuristic_ = heuristic; @@ -66,7 +115,21 @@ float Dispatcher::run_fused(const void* a_ptr, } kernel->set_benchmarking(benchmarking_); - return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, problem, stream); + + // Size and own the reduction workspace (0 for non-Stream-K and for Atomic). + // For Linear/Tree the Dispatcher owns and reuses the buffer; no lock is taken + // because a Dispatcher is single-stream (see the concurrency contract in + // dispatcher.hpp). The buffer is zeroed on the caller's stream and the kernel + // launches on the same stream, so the reset is correctly ordered. + const std::size_t ws_bytes = kernel->get_workspace_size(problem); + if(ws_bytes > 0) + { + ensure_workspace(ws_bytes, stream); // grows if needed AND zeroes ws_bytes on `stream` + return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, workspace_, problem, stream); + } + + // No workspace needed (non-Stream-K / Atomic): nothing to size or zero. + return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, nullptr, problem, stream); } float Dispatcher::run_explicit(const std::string& kernel_id, @@ -92,7 +155,21 @@ float Dispatcher::run_explicit(const std::string& kernel_id, } kernel->set_benchmarking(benchmarking_); - return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, problem, stream); + + // Size and own the reduction workspace (0 for non-Stream-K and for Atomic). + // For Linear/Tree the Dispatcher owns and reuses the buffer; no lock is taken + // because a Dispatcher is single-stream (see the concurrency contract in + // dispatcher.hpp). The buffer is zeroed on the caller's stream and the kernel + // launches on the same stream, so the reset is correctly ordered. + const std::size_t ws_bytes = kernel->get_workspace_size(problem); + if(ws_bytes > 0) + { + ensure_workspace(ws_bytes, stream); // grows if needed AND zeroes ws_bytes on `stream` + return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, workspace_, problem, stream); + } + + // No workspace needed (non-Stream-K / Atomic): nothing to size or zero. + return kernel->run(a_ptr, b_ptr, c_ptr, d_ptrs, nullptr, problem, stream); } bool Dispatcher::validate(const void* a_ptr, diff --git a/dispatcher/tests/CMakeLists.txt b/dispatcher/tests/CMakeLists.txt index a18663f76d5..bd19859e5f2 100644 --- a/dispatcher/tests/CMakeLists.txt +++ b/dispatcher/tests/CMakeLists.txt @@ -27,6 +27,19 @@ set_tests_properties(dispatcher_test_autocorrect PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python:${CMAKE_CURRENT_SOURCE_DIR}/../codegen:${CMAKE_CURRENT_SOURCE_DIR}/../scripts" ) +# Operator tile-constraints table regression test +add_test( + NAME dispatcher_test_arch_filter_constraints + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_arch_filter_constraints.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.. +) + +set_tests_properties(dispatcher_test_arch_filter_constraints PROPERTIES + LABELS "dispatcher;python;validation" + TIMEOUT 60 + ENVIRONMENT "PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python:${CMAKE_CURRENT_SOURCE_DIR}/../codegen:${CMAKE_CURRENT_SOURCE_DIR}/../scripts" +) + # Verbose version of the test add_test( NAME dispatcher_test_autocorrect_verbose @@ -126,6 +139,36 @@ set_tests_properties(dispatcher_test_fmha_parity PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python:${CMAKE_CURRENT_SOURCE_DIR}/../codegen:${CMAKE_CURRENT_SOURCE_DIR}/../scripts" ) +# Stream-K deep-core registry test (requires GPU + hipcc; SKIPs otherwise). +# Pass the gfx target CMake already configured with so the test does not have to +# detect it at runtime (no rocminfo dependency); it falls back to ROCm env vars +# / amdgpu-arch if none is set here. +set(_streamk_test_arch "") +if(GPU_TARGETS) + list(GET GPU_TARGETS 0 _streamk_test_arch) +elseif(CMAKE_HIP_ARCHITECTURES) + list(GET CMAKE_HIP_ARCHITECTURES 0 _streamk_test_arch) +elseif(AMDGPU_TARGETS) + list(GET AMDGPU_TARGETS 0 _streamk_test_arch) +endif() +set(_streamk_arch_arg "") +if(_streamk_test_arch) + set(_streamk_arch_arg --arch ${_streamk_test_arch}) +endif() + +add_test( + NAME dispatcher_test_streamk_registry + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_streamk_registry.py ${_streamk_arch_arg} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.. +) + +set_tests_properties(dispatcher_test_streamk_registry PROPERTIES + LABELS "dispatcher;python;streamk;gpu" + TIMEOUT 900 + SKIP_RETURN_CODE 77 + ENVIRONMENT "PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/../python:${CMAKE_CURRENT_SOURCE_DIR}/../codegen:${CMAKE_CURRENT_SOURCE_DIR}/../scripts" +) + # Stress Test Script add_test( NAME dispatcher_stress_test diff --git a/dispatcher/tests/test_arch_filter_constraints.py b/dispatcher/tests/test_arch_filter_constraints.py new file mode 100644 index 00000000000..333721a1a81 --- /dev/null +++ b/dispatcher/tests/test_arch_filter_constraints.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Regression tests for OPERATOR_TILE_CONSTRAINTS in arch_filter.py. + +Guards against a malformed constraints table (e.g. an operator entry left +without a body/closing brace), which raises a SyntaxError on import and +breaks all GEMM codegen -- and therefore every downstream build/test that +imports unified_gemm_codegen. + +Can be run as: + python3 tests/test_arch_filter_constraints.py + ctest -R test_arch_filter_constraints +""" + +import sys +import unittest +from pathlib import Path + +# Setup paths +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "codegen")) + +# Importing at all fails if arch_filter.py has a syntax error. +from arch_filter import OPERATOR_TILE_CONSTRAINTS, OperatorType # noqa: E402 + +REQUIRED_KEYS = { + "min_tile_m", + "min_tile_n", + "min_tile_k", + "tile_m_alignment", + "tile_n_alignment", + "tile_k_alignment", +} + + +class TestOperatorTileConstraints(unittest.TestCase): + """Validate the OPERATOR_TILE_CONSTRAINTS table is well-formed.""" + + def test_every_operator_has_an_entry(self): + """Every OperatorType must have a constraints entry.""" + for op in OperatorType: + self.assertIn( + op, + OPERATOR_TILE_CONSTRAINTS, + f"{op} is missing from OPERATOR_TILE_CONSTRAINTS", + ) + + def test_every_entry_is_a_well_formed_dict(self): + """Each entry must be a dict with the required integer keys.""" + for op, constraints in OPERATOR_TILE_CONSTRAINTS.items(): + self.assertIsInstance( + constraints, dict, f"{op} constraints should be a dict" + ) + self.assertEqual( + REQUIRED_KEYS, + set(constraints.keys()), + f"{op} constraints keys mismatch", + ) + for key, value in constraints.items(): + self.assertIsInstance( + value, int, f"{op}[{key}] should be an int, got {type(value)}" + ) + self.assertGreater(value, 0, f"{op}[{key}] should be positive") + + def test_gemm_grouped_entry_present(self): + """Regression: GEMM_GROUPED must have its own distinct constraints dict.""" + self.assertIn(OperatorType.GEMM_GROUPED, OPERATOR_TILE_CONSTRAINTS) + grouped = OPERATOR_TILE_CONSTRAINTS[OperatorType.GEMM_GROUPED] + self.assertEqual(REQUIRED_KEYS, set(grouped.keys())) + # GEMM_GROUPED and GEMM_STREAMK are separate entries, not a merged one. + self.assertIn(OperatorType.GEMM_STREAMK, OPERATOR_TILE_CONSTRAINTS) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/dispatcher/tests/test_depthwise_tile_math.py b/dispatcher/tests/test_depthwise_tile_math.py new file mode 100644 index 00000000000..17a712d256d --- /dev/null +++ b/dispatcher/tests/test_depthwise_tile_math.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Unit tests for depthwise convolution rules in codegen/tile_math.py. + +Ground truth: all 20 profiler depthwise configs extracted from +configs/grouped_conv/forward/profiler/ngchw_fp16.json (identical +across fp16/bf16/fp32). + +Run: + cd projects/composablekernel/dispatcher + python3 -m unittest tests/test_depthwise_tile_math.py -v +""" + +import sys +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "codegen")) + +from grouped_conv.tile_math import ( # noqa: E402 + DepthwiseConfig, + is_valid_depthwise_config, + get_valid_depthwise_configs, +) + +# ============================================================================= +# Reference configs from JSON ground truth +# ============================================================================= +# Tuple order: (tile_h, tile_w, filt, str_h, str_w, pad_h, pad_w, +# nbatch, sub_h, sub_w, in_vec, out_vec) + +DEPTHWISE_PROFILER_CONFIGS = [ + (8, 8, 3, 1, 1, 1, 1, 8, 2, 2, 2, 2), + (16, 16, 3, 1, 1, 1, 1, 8, 1, 4, 8, 8), + (16, 16, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2), + (28, 28, 3, 1, 1, 1, 1, 1, 4, 4, 8, 8), + (32, 32, 3, 1, 1, 1, 1, 1, 4, 4, 8, 8), + (16, 16, 3, 2, 2, 1, 1, 2, 1, 4, 8, 8), + (16, 16, 3, 2, 2, 1, 1, 1, 1, 4, 8, 8), + (16, 16, 3, 2, 2, 1, 1, 1, 2, 2, 8, 8), + (16, 16, 3, 2, 2, 1, 1, 1, 2, 2, 2, 2), + (14, 28, 3, 2, 2, 1, 1, 1, 2, 4, 8, 8), + (32, 32, 3, 2, 2, 1, 1, 2, 4, 4, 8, 8), + (32, 32, 3, 2, 2, 1, 1, 1, 4, 4, 4, 4), + (32, 32, 3, 2, 2, 1, 1, 1, 4, 4, 8, 8), + (32, 32, 3, 2, 2, 1, 1, 1, 2, 8, 8, 8), + (8, 8, 5, 1, 1, 2, 2, 1, 1, 1, 1, 1), + (8, 8, 5, 1, 1, 2, 2, 8, 2, 2, 2, 2), + (16, 16, 5, 1, 1, 2, 2, 1, 1, 4, 8, 8), + (16, 16, 5, 1, 1, 2, 2, 8, 1, 4, 8, 8), + (28, 28, 5, 1, 1, 2, 2, 8, 4, 4, 8, 8), + (32, 32, 5, 1, 1, 2, 2, 4, 4, 4, 8, 8), +] + +DEPTHWISE_TEST_CONFIGS = [ + (8, 8, 3, 1, 1, 1, 1, 8, 2, 2, 2, 2), + (32, 32, 3, 1, 1, 1, 1, 1, 4, 4, 8, 8), + (16, 16, 3, 2, 2, 1, 1, 2, 1, 4, 8, 8), + (32, 32, 3, 2, 2, 1, 1, 1, 2, 8, 8, 8), + (8, 8, 5, 1, 1, 2, 2, 1, 1, 1, 1, 1), + (32, 32, 5, 1, 1, 2, 2, 4, 4, 4, 8, 8), +] + +# Tile/filter/stride space matching grouped_config_rules_default.py +TILE_SIZES = [(8, 8), (14, 28), (16, 16), (28, 28), (32, 32)] +FILTER_SIZES = [3, 5] +STRIDES = [(1, 1), (2, 2)] + + +def _tuple_to_cfg(t): + """Convert a 12-tuple to a DepthwiseConfig.""" + return DepthwiseConfig(*t) + + +def _cfg_to_tuple(c): + """Convert a DepthwiseConfig to a 12-tuple.""" + return (c.tile_h, c.tile_w, c.filt, c.str_h, c.str_w, + c.pad_h, c.pad_w, c.nbatch, c.sub_h, c.sub_w, + c.in_vec, c.out_vec) + + +# ============================================================================= +# Tests +# ============================================================================= + +class TestIsValidDepthwiseConfig(unittest.TestCase): + """Tests for is_valid_depthwise_config().""" + + def test_all_reference_configs_valid(self): + """Every JSON reference config must pass validation.""" + for t in DEPTHWISE_PROFILER_CONFIGS: + cfg = _tuple_to_cfg(t) + self.assertTrue( + is_valid_depthwise_config(cfg), + f"Reference config should be valid: {t}", + ) + + def test_all_reference_configs_valid_fp32(self): + """Reference configs must also be valid with fp32 dtype_size=4.""" + for t in DEPTHWISE_PROFILER_CONFIGS: + cfg = _tuple_to_cfg(t) + self.assertTrue(is_valid_depthwise_config(cfg, dtype_size=4)) + + def test_odd_filter_required(self): + """Even filter size must be rejected.""" + cfg = DepthwiseConfig(8, 8, 4, 1, 1, 1, 1, 8, 2, 2, 2, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_pad_w_must_be_positive(self): + """PadW=0 must be rejected.""" + cfg = DepthwiseConfig(8, 8, 3, 1, 1, 1, 0, 8, 2, 2, 2, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_subtile_exceeds_tile(self): + """sub_h > tile_h must be rejected.""" + cfg = DepthwiseConfig(8, 8, 3, 1, 1, 1, 1, 8, 16, 2, 2, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_total_subtiles_exceeds_64(self): + """Config with too many subtiles must be rejected.""" + # sub_h=1, sub_w=1 on tile 16x16 → 256 subtiles > 64 + cfg = DepthwiseConfig(16, 16, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_nbatch_divisibility(self): + """nbatch must be divisible by tile_per_wave.""" + # tile_h=8, tile_w=8, sub_h=2, sub_w=2 → 4×4=16 subtiles + # tile_per_wave = 64//16 = 4, so nbatch=3 is invalid + cfg = DepthwiseConfig(8, 8, 3, 1, 1, 1, 1, 3, 2, 2, 2, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_vec_not_power_of_2(self): + """Non-power-of-2 vector size must be rejected.""" + cfg = DepthwiseConfig(8, 8, 3, 1, 1, 1, 1, 8, 2, 2, 3, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + def test_stride_w_constraint(self): + """Odd StrideW != 1 must be rejected.""" + cfg = DepthwiseConfig(8, 8, 3, 1, 3, 1, 1, 8, 2, 2, 2, 2) + self.assertFalse(is_valid_depthwise_config(cfg)) + + +class TestGetValidDepthwiseConfigs(unittest.TestCase): + """Tests for get_valid_depthwise_configs().""" + + @classmethod + def setUpClass(cls): + """Generate configs once for all tests.""" + cls.generated = get_valid_depthwise_configs( + TILE_SIZES, FILTER_SIZES, STRIDES, + ) + cls.generated_set = {_cfg_to_tuple(c) for c in cls.generated} + + def test_no_false_negatives(self): + """Every JSON profiler reference config must be generated by rules.""" + missing = [] + for ref in DEPTHWISE_PROFILER_CONFIGS: + if ref not in self.generated_set: + missing.append(ref) + if missing: + lines = [f" {m}" for m in missing] + self.fail( + f"{len(missing)}/20 profiler configs missing:\n" + + "\n".join(lines) + ) + + def test_test_configs_are_subset(self): + """Test configs must also be in the generated set.""" + for ref in DEPTHWISE_TEST_CONFIGS: + self.assertIn(ref, self.generated_set, + f"Test config missing: {ref}") + + def test_all_generated_are_valid(self): + """Every generated config must pass all constraint checks.""" + invalid = [] + for cfg in self.generated: + if not is_valid_depthwise_config(cfg): + invalid.append(_cfg_to_tuple(cfg)) + if invalid: + self.fail(f"{len(invalid)} generated configs are invalid") + + def test_no_duplicates(self): + """Generated list must not contain duplicates.""" + self.assertEqual( + len(self.generated), len(self.generated_set), + "Duplicate configs found in generated list", + ) + + def test_generates_nonzero_configs(self): + """Must generate at least the 20 reference configs.""" + self.assertGreaterEqual(len(self.generated), 20) + + def test_coverage_rate(self): + """Log coverage statistics (informational).""" + n_ref = len(DEPTHWISE_PROFILER_CONFIGS) + n_covered = sum(1 for r in DEPTHWISE_PROFILER_CONFIGS + if r in self.generated_set) + n_total = len(self.generated) + print(f"\n[depthwise coverage] {n_covered}/{n_ref} reference covered, " + f"{n_total} total generated") + self.assertEqual(n_covered, n_ref, + f"Coverage {n_covered}/{n_ref} < 100%") + + def test_empty_input(self): + """Empty tile_sizes should return no configs.""" + self.assertEqual( + get_valid_depthwise_configs([], [3], [(1, 1)]), + [], + ) + + def test_smem_constraint_rejects_huge_tile_fp32(self): + """Very large tiles with fp32 should produce fewer configs due to SmemSize.""" + # fp32 (dtype_size=4) doubles SmemSize, pruning more configs + fp16 = get_valid_depthwise_configs([(32, 32)], [5], [(1, 1)], dtype_size=2) + fp32 = get_valid_depthwise_configs([(32, 32)], [5], [(1, 1)], dtype_size=4) + self.assertLess(len(fp32), len(fp16), + "fp32 should produce fewer valid configs than fp16") + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/dispatcher/tests/test_gemm_parity.py b/dispatcher/tests/test_gemm_parity.py new file mode 100644 index 00000000000..b9d1cd1cd9a --- /dev/null +++ b/dispatcher/tests/test_gemm_parity.py @@ -0,0 +1,313 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +"""GEMM bridge parity regression: Dispatcher GPU output vs NumPy reference. + +This is the in-tree, reproducible version of the ad-hoc ``parity/`` sweep used to +validate the Tile Engine -> Dispatcher GEMM bridge. For each (dtype, layout) the +bridge supports it codegens + hipcc-compiles a kernel, runs it through +``GpuGemmRunner``, and compares the result to a NumPy reference across a square, a +rectangular, and an awkward (non-tile-aligned) problem shape. + +Parity is checked as a GLOBAL relative error -- ``max|gpu - ref| / max|ref|`` -- +not per-element: K-length accumulation of zero-mean inputs produces near-zero +entries whose per-element ratios explode and carry no signal. + +The whole suite is GPU-gated: it skips cleanly (not fails) when hipcc, the +dispatcher static lib, or a GPU is unavailable, so CPU-only CI stays green while +GPU runners get real end-to-end coverage. The pure host-side helpers are covered +separately and cheaply by ``test_gemm_utils.py``. + +Run: + python3 -m pytest tests/test_gemm_parity.py -v # discovery / CI + python3 tests/test_gemm_parity.py # readable table +""" + +import os +import sys +import shutil +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "python")) + +import numpy as np # noqa: E402 + +from gemm_utils import ( # noqa: E402 + GemmKernelConfig, + GemmProblem, + GpuGemmRunner, + setup_multiple_gemm_dispatchers, + _fp32_to_bf16_u16, + _bf16_u16_to_fp32, + _fp32_to_fp8_u8, + _fp8_u8_to_fp32, + _fp32_to_bf8_u8, + _bf8_u8_to_fp32, + _output_dtype, +) +from ctypes_utils import detect_gpu_arch, get_build_dir # noqa: E402 + +# (dtype, layout) surface the regular bridge supports. Column-major C is rejected +# by ck_tile's universal GEMM at build, so every layout keeps row-major C, which +# leaves exactly the four A/B combinations below. Every dtype covers all four. +# +# fp16/bf16 are the PR #8479 surface; fp8 (E4M3), bf8 (E5M2) and int8 are the +# remaining dtypes TE's plain GEMM has MFMA warp tiles for (fp8/bf8 -> fp16 out, +# int8 -> int32 out). int8 only has warp tiles on gfx942; on other arches its +# kernels simply fail to build and the case skips (handled below). +_FLOAT_DTYPES = ("fp16", "bf16", "fp8", "bf8") +_INT_DTYPES = ("int8",) +_LAYOUTS = ("rcr", "rrr", "ccr", "crr") +_CASES = [ + (dt, lay) for dt in (*_FLOAT_DTYPES, *_INT_DTYPES) for lay in _LAYOUTS +] + +# Padded default algorithm: pad_* all True so M/N need not divide the tile, which +# is what lets the awkward shape below pass. K must still be a multiple of 8 for +# the fp16/bf16 vectorized contiguous-reduction load, so every K here is divisible +# by 8. +_ALGO = dict( + tile_m=128, tile_n=128, tile_k=32, + wave_m=2, wave_n=2, wave_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, + pipeline="compv4", scheduler="intrawave", epilogue="cshuffle", + pad_m=True, pad_n=True, pad_k=True, +) + +# (name, M, N, K). 'awkward' deliberately uses M, N that do not divide the 128 +# tile to exercise padding; K stays divisible by 8. +_SHAPES = [ + ("square", 512, 512, 512), + ("rectangular", 1024, 512, 256), + ("awkward", 257, 129, 512), +] + +# Global-relative-error gates. fp16 measured ~3-4e-4 and bf16 ~8e-3 on gfx942. +# fp8/bf8 are far coarser (3- and 2-bit mantissa) so their gates are looser; int8 +# is an exact integer accumulation so it must match bit-for-bit. The fp8/bf8 +# gates are first-cut headroom values and may want tightening once measured on a +# GPU. +_TOL = { + "fp16": 2e-3, + "bf16": 1.5e-2, + "fp8": 1.5e-1, + "bf8": 3.0e-1, + "int8": 0.0, +} + +_LAYOUT_WORD = {"r": "row", "c": "col"} + + +def _emulate_input(x: np.ndarray, dtype: str) -> np.ndarray: + """Round an fp32 operand to the kernel's storage dtype so the CPU reference + multiplies exactly what the GPU does. int8 inputs are already integral.""" + if dtype == "bf16": + return _bf16_u16_to_fp32(_fp32_to_bf16_u16(x)) + if dtype == "fp8": + return _fp8_u8_to_fp32(_fp32_to_fp8_u8(x)) + if dtype == "bf8": + return _bf8_u8_to_fp32(_fp32_to_bf8_u8(x)) + if dtype == "int8": + return x.astype(np.float64) # exact; widened to avoid product overflow + return x.astype(np.float16).astype(np.float32) + + +def _emulate_output(c: np.ndarray, out_dtype: str) -> np.ndarray: + """Round the fp32 accumulator to the kernel's C storage dtype.""" + if out_dtype == "bf16": + return _bf16_u16_to_fp32(_fp32_to_bf16_u16(c)) + if out_dtype == "int32": + return c # integer accumulation is exact + return c.astype(np.float16).astype(np.float32) # fp16 + + +def _make_inputs(dtype, M, N, K, rng): + """Random A (MxK), B (KxN) for a dtype: floats for the float dtypes, small + integers for int8 (kept small so the int32 accumulation cannot overflow).""" + if dtype == "int8": + A = rng.integers(-4, 5, size=(M, K)).astype(np.float32) + B = rng.integers(-4, 5, size=(K, N)).astype(np.float32) + return A, B + A = (rng.standard_normal((M, K)) * 0.1).astype(np.float32) + B = (rng.standard_normal((K, N)) * 0.1).astype(np.float32) + return A, B + + +def _reference(A, B, dtype): + """NumPy reference matching the kernel: round inputs to the storage dtype, + accumulate (fp32 for floats / exact int for int8), then round to C dtype.""" + out_dtype = _output_dtype(dtype) + acc = _emulate_input(A, dtype) @ _emulate_input(B, dtype) + ref = _emulate_output(acc, out_dtype) + return ref.astype(np.int32) if out_dtype == "int32" else ref + + +def _config(dtype: str, layout: str, arch: str) -> GemmKernelConfig: + la, lb, lc = layout + return GemmKernelConfig( + dtype_a=dtype, dtype_b=dtype, + dtype_c=_output_dtype(dtype), + dtype_acc=("int32" if dtype == "int8" else "fp32"), + layout_a=_LAYOUT_WORD[la], layout_b=_LAYOUT_WORD[lb], layout_c=_LAYOUT_WORD[lc], + gfx_arch=arch, **_ALGO, + ) + + +def _max_rel(out: np.ndarray, ref: np.ndarray) -> float: + denom = float(np.max(np.abs(ref))) + 1e-12 + return float(np.max(np.abs(out - ref))) / denom + + +def _gpu_environment_reason(): + """Return None if the bridge can build+run here, else a human-readable reason + to skip.""" + if not Path("/opt/rocm/bin/hipcc").exists(): + return "hipcc not found at /opt/rocm/bin/hipcc" + if not (get_build_dir() / "libck_tile_dispatcher.a").exists(): + return "dispatcher static lib (libck_tile_dispatcher.a) not built" + if shutil.which("rocminfo") is None: + return "rocminfo not found (no ROCm runtime / GPU)" + return None + + +class GemmBridgeParity(unittest.TestCase): + """End-to-end GPU-vs-NumPy parity across the bridge's dtype/layout surface.""" + + arch = None + built = {} # (dtype, layout) -> Path(.so) + build_failures = {} + + @classmethod + def setUpClass(cls): + reason = _gpu_environment_reason() + if reason: + raise unittest.SkipTest(reason) + cls.arch = detect_gpu_arch() + + configs = [_config(dt, lay, cls.arch) for dt, lay in _CASES] + so_paths = setup_multiple_gemm_dispatchers(configs, verbose=False) + for (dt, lay), so in zip(_CASES, so_paths): + if so is None: + cls.build_failures[(dt, lay)] = "codegen/hipcc returned no .so" + else: + cls.built[(dt, lay)] = so + + if not cls.built: + raise unittest.SkipTest( + f"no bridge kernels built on {cls.arch} " + f"(failures: {cls.build_failures})" + ) + + def _run_case(self, dtype, layout, shape): + so = self.built.get((dtype, layout)) + if so is None: + self.skipTest( + f"{dtype}/{layout} did not build on {self.arch}: " + f"{self.build_failures.get((dtype, layout))}" + ) + + _, M, N, K = shape + problem = GemmProblem(M=M, N=N, K=K) + rng = np.random.default_rng(42) + A, B = _make_inputs(dtype, M, N, K, rng) + + runner = GpuGemmRunner(lib_path=so) + # The .so is the contract endpoint: the name it reports must be the config + # name that drove codegen + the force-include build. The kernel name keys + # off the input dtype (dtype_a), not the C/acc dtype. + self.assertEqual(runner.kernel_name, _config(dtype, layout, self.arch).name) + + result = runner.run(A, B, problem) + self.assertTrue( + result.success, + f"{dtype}/{layout} {shape[0]} run failed (status {result.status})", + ) + + ref = _reference(A, B, dtype) + max_rel = _max_rel(result.output.astype(np.float64), ref.astype(np.float64)) + self.assertLessEqual( + max_rel, _TOL[dtype], + f"{dtype}/{layout} {shape[0]} max_rel={max_rel:.2e} > {_TOL[dtype]:.0e}", + ) + + +def _add_parity_tests(): + """Generate one test method per (case, shape) so failures pinpoint exactly + which dtype/layout/shape regressed.""" + for dtype, layout in _CASES: + for shape in _SHAPES: + shape_name = shape[0] + + def _method(self, dtype=dtype, layout=layout, shape=shape): + self._run_case(dtype, layout, shape) + + _method.__name__ = f"test_{dtype}_{layout}_{shape_name}" + _method.__doc__ = f"{dtype} {layout} {shape_name} {shape[1:]} parity" + setattr(GemmBridgeParity, _method.__name__, _method) + + +_add_parity_tests() + + +def _main() -> int: + """Readable table run (mirrors test_fmha_parity.py's report style).""" + reason = _gpu_environment_reason() + if reason: + print(f"SKIP: {reason}") + return 0 + + arch = detect_gpu_arch() + print("=" * 78) + print(f"GEMM Bridge Parity: Dispatcher (GPU {arch}) vs NumPy reference") + print("=" * 78) + + configs = [_config(dt, lay, arch) for dt, lay in _CASES] + print(f" Building {len(configs)} bridge kernels (codegen + hipcc)...") + so_paths = setup_multiple_gemm_dispatchers(configs, verbose=False) + + print(f"\n {'case':<12} {'shape':<12} {'tflops':>9} {'max_rel':>10} {'tol':>8} {'':>6}") + print(" " + "-" * 60) + + rng = np.random.default_rng(42) + total = 0 + passed = 0 + for (dtype, layout), so in zip(_CASES, so_paths): + tag = f"{dtype}/{layout}" + if so is None: + print(f" {tag:<12} {'-':<12} {'BUILD FAILED':>35}") + total += len(_SHAPES) + continue + runner = GpuGemmRunner(lib_path=so) + for sname, M, N, K in _SHAPES: + total += 1 + problem = GemmProblem(M=M, N=N, K=K) + A, B = _make_inputs(dtype, M, N, K, rng) + result = runner.run(A, B, problem) + if not result.success: + print(f" {tag:<12} {sname:<12} {'RUN FAILED':>9} status={result.status}") + continue + ref = _reference(A, B, dtype) + mr = _max_rel(result.output.astype(np.float64), ref.astype(np.float64)) + ok = mr <= _TOL[dtype] + passed += ok + print(f" {tag:<12} {sname:<12} {result.tflops:>9.1f} " + f"{mr:>10.2e} {_TOL[dtype]:>8.0e} {'PASS' if ok else 'FAIL':>6}") + + print("\n" + "=" * 78) + print(f" {passed}/{total} parity checks passed") + print("=" * 78) + return 0 if passed == total else 1 + + +if __name__ == "__main__": + # Default to the readable table; `-m pytest` / `unittest` use the generated + # test methods instead. + if os.environ.get("GEMM_PARITY_UNITTEST"): + unittest.main() + else: + sys.exit(_main()) diff --git a/dispatcher/tests/test_gemm_utils.py b/dispatcher/tests/test_gemm_utils.py new file mode 100644 index 00000000000..8ed188932e0 --- /dev/null +++ b/dispatcher/tests/test_gemm_utils.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +"""CPU-only unit tests for python/gemm_utils.py. + +Locks in the bit-level helpers that the TE -> Dispatcher GEMM bridge relies on: + * bf16 <-> uint16 encoding (round-to-nearest-even), since numpy has no native + bf16 and the runner carries bf16 as a uint16 bit pattern. + * fp8 (E4M3) / bf8 (E5M2) FNUZ <-> uint8 encoding, used for the gfx942 8-bit + float surface. The decode must be exact to the device format; the encode + only needs to land on the nearest representable byte. + * dtype / layout parsing from the compiled kernel name, which drives how the + runner lays out host buffers. + +No GPU is touched -- all functions under test are pure host-side logic. +Run: python3 -m pytest tests/test_gemm_utils.py -v +""" + +import sys +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "python")) + +import numpy as np # noqa: E402 + +from gemm_utils import ( # noqa: E402 + GemmKernelConfig, + _fp32_to_bf16_u16, + _bf16_u16_to_fp32, + _fp32_to_fp8_u8, + _fp8_u8_to_fp32, + _fp32_to_bf8_u8, + _bf8_u8_to_fp32, + _fnuz_decode_table, + _output_dtype, + _dtype_from_kernel_name, + _layout_from_kernel_name, +) + + +class TestBf16Encoding(unittest.TestCase): + """bf16 = top 16 bits of fp32 with round-to-nearest-even.""" + + def test_exactly_representable_roundtrip(self): + # Values whose low 16 fp32 mantissa bits are zero are exact in bf16. + exact = np.array([0.0, 1.0, -1.0, 2.0, 0.5, -0.5, 4.0, 256.0], + dtype=np.float32) + out = _bf16_u16_to_fp32(_fp32_to_bf16_u16(exact)) + np.testing.assert_array_equal(out, exact) + + def test_roundtrip_within_bf16_tolerance(self): + rng = np.random.default_rng(0) + x = (rng.standard_normal(10000) * 100.0).astype(np.float32) + out = _bf16_u16_to_fp32(_fp32_to_bf16_u16(x)) + # bf16 has 8 bits of significand -> relative error <= 2^-8. + rel = np.abs(out - x) / (np.abs(x) + 1e-30) + self.assertLessEqual(float(rel.max()), 2.0 ** -8) + + def test_round_to_nearest_even_ties(self): + # Tie halfway between bf16 1.0 (0x3F80, even) and 0x3F81 (odd): + # fp32 0x3F808000 must round DOWN to the even neighbor 0x3F80. + tie_down = np.array([0x3F808000], dtype=np.uint32).view(np.float32) + self.assertEqual(int(_fp32_to_bf16_u16(tie_down)[0]), 0x3F80) + # Tie halfway between 0x3F81 (odd) and 0x3F82 (even): + # fp32 0x3F818000 must round UP to the even neighbor 0x3F82. + tie_up = np.array([0x3F818000], dtype=np.uint32).view(np.float32) + self.assertEqual(int(_fp32_to_bf16_u16(tie_up)[0]), 0x3F82) + + def test_special_values(self): + inf = np.array([np.inf, -np.inf], dtype=np.float32) + out = _bf16_u16_to_fp32(_fp32_to_bf16_u16(inf)) + self.assertTrue(np.isinf(out[0]) and out[0] > 0) + self.assertTrue(np.isinf(out[1]) and out[1] < 0) + + nan = np.array([np.nan], dtype=np.float32) + out_nan = _bf16_u16_to_fp32(_fp32_to_bf16_u16(nan)) + self.assertTrue(np.isnan(out_nan[0])) + + def test_dtype_and_size(self): + u16 = _fp32_to_bf16_u16(np.zeros(4, dtype=np.float32)) + self.assertEqual(u16.dtype, np.uint16) + self.assertEqual(u16.itemsize, 2) # must match sizeof(bf16_t) on device + + +class TestFp8Bf8Encoding(unittest.TestCase): + """fp8 E4M3 / bf8 E5M2 in the FNUZ format used by gfx942. + + The decode is the load-bearing half (it must equal the device value for a + byte); the encode must land on the nearest representable byte and saturate. + """ + + def test_format_ranges(self): + # FNUZ maxima: E4M3 -> 2^7 * 1.875 = 240; E5M2 -> 2^15 * 1.75 = 57344. + t43 = _fnuz_decode_table(4, 3) + t52 = _fnuz_decode_table(5, 2) + self.assertEqual(float(np.nanmax(t43)), 240.0) + self.assertEqual(float(np.nanmin(t43)), -240.0) + self.assertEqual(float(np.nanmax(t52)), 57344.0) + self.assertEqual(float(np.nanmin(t52)), -57344.0) + + def test_zero_and_nan_slots(self): + # 0x00 is +0; the negative-zero slot 0x80 is the lone NaN (FNUZ). + for tab in (_fnuz_decode_table(4, 3), _fnuz_decode_table(5, 2)): + self.assertEqual(float(tab[0x00]), 0.0) + self.assertTrue(np.isnan(tab[0x80])) + + def test_exactly_representable_roundtrip(self): + exact = np.array([0.0, 0.5, 1.0, -1.0, 2.0, -2.0, 1.5, -0.25, 4.0, 8.0], + dtype=np.float32) + np.testing.assert_array_equal( + _fp8_u8_to_fp32(_fp32_to_fp8_u8(exact)), exact) + np.testing.assert_array_equal( + _bf8_u8_to_fp32(_fp32_to_bf8_u8(exact)), exact) + + def test_decode_is_consistent_with_encode(self): + # The parity contract: ref multiplies decode(encode(x)), so the pair must + # be self-consistent and every encoded byte must decode finite. + rng = np.random.default_rng(1) + x = (rng.standard_normal(5000) * 0.1).astype(np.float32) + for enc, dec in ((_fp32_to_fp8_u8, _fp8_u8_to_fp32), + (_fp32_to_bf8_u8, _bf8_u8_to_fp32)): + d = dec(enc(x)) + self.assertTrue(np.all(np.isfinite(d))) + + def test_saturates_no_inf(self): + # FNUZ has no infinity: huge magnitudes clamp to the finite max. + big = np.array([1e30, -1e30], dtype=np.float32) + self.assertEqual(float(_fp8_u8_to_fp32(_fp32_to_fp8_u8(big))[0]), 240.0) + self.assertEqual(float(_bf8_u8_to_fp32(_fp32_to_bf8_u8(big))[1]), -57344.0) + + def test_dtype_and_size(self): + for enc in (_fp32_to_fp8_u8, _fp32_to_bf8_u8): + u8 = enc(np.zeros(4, dtype=np.float32)) + self.assertEqual(u8.dtype, np.uint8) + self.assertEqual(u8.itemsize, 1) # must match sizeof(fp8_t/bf8_t) + + +class TestOutputDtype(unittest.TestCase): + """Output (C) element dtype must mirror the codegen's get_output_dtype.""" + + def test_mapping(self): + self.assertEqual(_output_dtype("fp16"), "fp16") + self.assertEqual(_output_dtype("bf16"), "bf16") + self.assertEqual(_output_dtype("fp8"), "fp16") + self.assertEqual(_output_dtype("bf8"), "fp16") + self.assertEqual(_output_dtype("int8"), "int32") + + +class TestKernelNameParsing(unittest.TestCase): + """The runner reads dtype + layout straight from the compiled .so name.""" + + _NAME = ("gemm_bf16_rcr_compv3_cshuffle_intrawave_" + "False_False_False_False_64x64x64_4x1x1_16x16x16") + + def test_dtype_from_name(self): + self.assertEqual(_dtype_from_kernel_name(self._NAME), "bf16") + self.assertEqual( + _dtype_from_kernel_name("gemm_fp16_rrr_compv4_cshuffle_intrawave"), + "fp16", + ) + + def test_dtype_fallback(self): + # Malformed / single-token name falls back to fp16. + self.assertEqual(_dtype_from_kernel_name("gemm"), "fp16") + + def test_layout_from_name(self): + self.assertEqual(_layout_from_kernel_name(self._NAME), "rcr") + for lay in ("rrr", "ccr", "crr", "rcc"): + name = f"gemm_fp16_{lay}_compv3_cshuffle_intrawave" + self.assertEqual(_layout_from_kernel_name(name), lay) + + def test_layout_fallback(self): + # A token that is not a 3-char r/c string falls back to rcr. + self.assertEqual( + _layout_from_kernel_name("gemm_fp16_xyz_compv3"), "rcr" + ) + self.assertEqual(_layout_from_kernel_name("gemm"), "rcr") + + +class TestConfigNameContract(unittest.TestCase): + """GemmKernelConfig.name is the single source of truth tying config -> + codegen -> runtime; parsing it back must recover dtype and layout.""" + + def test_name_roundtrips_through_parsers(self): + for dtype in ("fp16", "bf16", "fp8", "bf8", "int8"): + for la, lb, lc in (("row", "col", "row"), + ("row", "row", "row"), + ("col", "col", "row"), + ("col", "row", "row")): + cfg = GemmKernelConfig( + dtype_a=dtype, dtype_b=dtype, dtype_c=_output_dtype(dtype), + dtype_acc=("int32" if dtype == "int8" else "fp32"), + layout_a=la, layout_b=lb, layout_c=lc, + ) + name = cfg.name + self.assertEqual(_dtype_from_kernel_name(name), dtype) + self.assertEqual(_layout_from_kernel_name(name), cfg.layout) + + +if __name__ == "__main__": + unittest.main() diff --git a/dispatcher/tests/test_grouped_conv_codegen.py b/dispatcher/tests/test_grouped_conv_codegen.py index acfa5abd8f1..dc5077da031 100644 --- a/dispatcher/tests/test_grouped_conv_codegen.py +++ b/dispatcher/tests/test_grouped_conv_codegen.py @@ -542,13 +542,17 @@ def test_generate_contains_launch_kernel_time_mask(self): code = gen.generate(config) self.assertIn("launch_kernel_time_mask", code) - def test_generate_forces_vector_size_c_to_1(self): + def test_two_stage_uses_fp32_workspace_vector_size_c(self): + # Two-stage writes the GEMM result to an fp32 workspace, so it uses the + # configured VectorSizeC directly instead of forcing it to 1. config = _make_two_stage_config() gen = CKTileGroupedConvKernelGenerator( "fp16", GroupedConvVariant.BACKWARD_WEIGHT ) code = gen.generate(config) - self.assertIn("VectorSizeC_TwoStage = 1", code) + self.assertIn("WorkspaceDataType = float", code) + self.assertIn("Config::VectorSizeC", code) + self.assertNotIn("VectorSizeC_TwoStage", code) def test_generate_contains_workspace_memset(self): config = _make_two_stage_config() @@ -567,7 +571,6 @@ def test_single_stage_does_not_contain_workspace(self): code = gen.generate(config) self.assertNotIn("WorkspaceDataType", code) self.assertNotIn("ElementWiseKernel", code) - self.assertNotIn("launch_kernel_time_mask", code) def test_default_configs_include_two_stage(self): from unified_grouped_conv_codegen import get_default_configs diff --git a/dispatcher/tests/test_grouped_gemm_codegen.py b/dispatcher/tests/test_grouped_gemm_codegen.py new file mode 100644 index 00000000000..4dd2891f638 --- /dev/null +++ b/dispatcher/tests/test_grouped_gemm_codegen.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +"""CPU-only unit tests for the grouped GEMM variant of the TE -> Dispatcher bridge. + +Grouped GEMM has a genuinely different ABI from regular GEMM (a list of +sub-problems, a launch(descs, stream) signature, and an internally-owned device +workspace), so it is generated by a dedicated path in the unified GEMM codegen +and launched by grouped_gemm_ctypes_lib.cpp. These tests lock in the host-side +contract of that path without touching a GPU: + + * the GROUPED variant generates the grouped launch/kernel with fully-qualified + ck_tile:: types (so the header does not silently depend on a using-directive); + * the grouped ctypes bridge includes the standard headers it uses directly + rather than relying on transitive includes from the force-included kernel; + * the FNUZ decode table shared by the fp8/bf8 path is cached and read-only. + +No GPU is touched -- codegen is pure string formatting and the helpers are pure. +Run: python3 -m pytest tests/test_grouped_gemm_codegen.py -v +""" + +import sys +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "codegen")) +sys.path.insert(0, str(DISPATCHER_DIR / "python")) + +from codegen_common import TileConfig # noqa: E402 + +from unified_gemm_codegen import ( # noqa: E402 + GemmVariant, + KernelConfig, + TraitConfig, + CKTileKernelGenerator, +) + +from gemm_utils import _fnuz_decode_table # noqa: E402 + +GROUPED_CTYPES_LIB = ( + DISPATCHER_DIR / "bindings" / "ctypes" / "grouped_gemm_ctypes_lib.cpp" +) + + +def _grouped_config() -> KernelConfig: + """A minimal valid grouped-GEMM kernel config (fp16/rcr, cshuffle).""" + tile = TileConfig( + tile_m=128, tile_n=128, tile_k=32, + warp_m=2, warp_n=2, warp_k=1, + warp_tile_m=32, warp_tile_n=32, warp_tile_k=16, + ) + trait = TraitConfig( + pipeline="compv3", epilogue="cshuffle", scheduler="intrawave", + pad_m=False, pad_n=False, pad_k=False, persistent=False, + ) + return KernelConfig(tile=tile, trait=trait, variant=GemmVariant.GROUPED) + + +class TestGroupedVariant(unittest.TestCase): + def test_enum_value(self): + self.assertEqual(GemmVariant.GROUPED.value, "grouped") + + +class TestGroupedCodegen(unittest.TestCase): + """The generated grouped header must be self-contained and correctly typed.""" + + def setUp(self): + gen = CKTileKernelGenerator("fp16", "rcr") + self.src = gen.generate(_grouped_config()) + + def test_generates_grouped_launch_and_kernel(self): + # The grouped path emits the (descs, stream) launch and the grouped kernel. + self.assertIn( + "launch(const std::vector>&", self.src + ) + self.assertIn("ck_tile::GroupedGemmKernel<", self.src) + + def test_device_memory_is_ck_tile_qualified(self): + # DeviceMem lives in the ck_tile namespace; the workspace allocation must + # be fully qualified so the header does not depend on a using-directive. + self.assertIn("ck_tile::DeviceMem workspace_dev", self.src) + # And no bare, unqualified `DeviceMem ` declaration should remain. + import re + + self.assertIsNone( + re.search(r"(?{} descriptors are built here; must be direct. + self.assertIn("std::array", text) + self.assertIn("#include ", text) + + +class TestFnuzTableCaching(unittest.TestCase): + """The 256-entry FNUZ decode table is pure per (exp_bits, mant_bits): it must + be cached and handed out read-only so callers cannot mutate the shared copy.""" + + def test_table_is_cached_same_object(self): + self.assertIs(_fnuz_decode_table(4, 3), _fnuz_decode_table(4, 3)) + self.assertIs(_fnuz_decode_table(5, 2), _fnuz_decode_table(5, 2)) + + def test_table_is_read_only(self): + table = _fnuz_decode_table(4, 3) + self.assertFalse(table.flags.writeable) + with self.assertRaises(ValueError): + table[0] = 1.0 + + +if __name__ == "__main__": + unittest.main() diff --git a/dispatcher/tests/test_rules_coverage.py b/dispatcher/tests/test_rules_coverage.py new file mode 100755 index 00000000000..f0f4ce6fb7c --- /dev/null +++ b/dispatcher/tests/test_rules_coverage.py @@ -0,0 +1,571 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Unit tests verifying the subset/coverage relationships between rule sets. + +The rule sets form a containment hierarchy. These tests assert that hierarchy +holds, comparing the canonical kernel-instance keys produced by each rule set +via ``get_default_configs``: + + - "full" contains all instances from "profiler" (the CK Builder profiler set) + - "full" contains all instances from "tests" (the CK Builder tests set) + - "full-tests" is a subset of "full" + - "tiny" is a subset of "full-tests" + +Each relationship is checked for every supported architecture, across all +variants (forward / bwd_data / bwd_weight), 2D + 3D, and every datatype +(fp16 / bf16 / fp32). Both GEMM and depthwise instances are included. + +Run: + python3 -m pytest dispatcher/tests/test_rules_coverage.py -v +or: + cd projects/composablekernel/dispatcher + python3 -m pytest tests/test_rules_coverage.py -v +""" + +import sys +import unittest +from pathlib import Path +from typing import Dict, FrozenSet, List, Set, Tuple + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "codegen")) +sys.path.insert(0, str(DISPATCHER_DIR / "codegen" / "grouped_conv")) + +from unified_grouped_conv_codegen import ( # noqa: E402 + DepthwiseConvKernelConfig, + GroupedConvKernelConfig, + GroupedConvTraitConfig, + GroupedConvVariant, + StreamKConfig, + StreamKReductionStrategy, + TileConfig, + get_default_configs, +) + +# CK Builder native codegen — the .conf parsers are used here as the +# independent ground-truth reference (see CKBuilderEquivalenceTest below). +_BUILDER_DIR = ( + DISPATCHER_DIR.parent + / "experimental" + / "grouped_convolution_tile_instances" +) +sys.path.insert(0, str(_BUILDER_DIR)) + +import generate_instances as gi # noqa: E402 +from grouped_config_rules_builder import ( # noqa: E402 + map_pipeline_version, + map_scheduler, + map_specialization, +) + +# CK Builder .conf source directory. +_BUILDER_CONFIGS_DIR = _BUILDER_DIR / "configs" + +# --------------------------------------------------------------------------- +# Generation parameters — cover the full instance space so the subset checks +# are exhaustive (every arch / variant / ndim / datatype). +# --------------------------------------------------------------------------- + +ARCHS: List[str] = ["gfx942", "gfx950"] + +# GroupedConvVariant.FORWARD_DEPTHWISE is intentionally omitted: depthwise +# instances follow a separate generation/validation path (the depthwise rule +# set and test_depthwise_tile_math.py), not the XDL GEMM variant cross-product +# whose coverage this test verifies. +VARIANTS = [ + GroupedConvVariant.FORWARD, + GroupedConvVariant.BACKWARD_DATA, + GroupedConvVariant.BACKWARD_WEIGHT, +] + +NDIMS: List[int] = [2, 3] + +DATATYPES: List[str] = ["fp16", "bf16", "fp32"] + + +# --------------------------------------------------------------------------- +# Canonical key generation +# --------------------------------------------------------------------------- + +def _config_to_key(cfg) -> FrozenSet: + """Convert a kernel config to a canonical, hashable key. + + The key captures everything that distinguishes one emitted kernel instance + from another (tile/warp/vector shape, traits, datatype, ndim, variant), so + that set containment corresponds to "generates the same instances". + """ + if isinstance(cfg, DepthwiseConvKernelConfig): + # Depthwise configs have a distinct shape; key off the unique kernel + # name (which encodes all tile/stride/pad/vec parameters) + datatype. + return frozenset({ + ("kind", "depthwise"), + ("datatype", cfg.datatype), + ("ndim_spatial", cfg.ndim_spatial), + ("name", cfg.name(cfg.datatype)), + }) + + t = cfg.tile + tr = cfg.trait + sk = tr.streamk_config + + return frozenset({ + ("kind", "gemm"), + ("datatype", cfg.datatype), + ("variant", str(cfg.variant)), + ("ndim_spatial", cfg.ndim_spatial), + ("tile_m", t.tile_m), + ("tile_n", t.tile_n), + ("tile_k", t.tile_k), + ("warp_m", t.warp_m), + ("warp_n", t.warp_n), + ("warp_k", t.warp_k), + ("warp_tile_m", t.warp_tile_m), + ("warp_tile_n", t.warp_tile_n), + ("warp_tile_k", t.warp_tile_k), + ("pipeline", tr.pipeline), + ("scheduler", tr.scheduler), + ("vec_a", cfg.vector_size_a), + ("vec_b", cfg.vector_size_b), + ("vec_c", cfg.vector_size_c), + ("double_smem_buffer", tr.double_smem_buffer), + ("two_stage", tr.two_stage), + ("explicit_gemm", tr.explicit_gemm), + ("split_image", tr.split_image), + ("num_groups_to_merge", tr.num_groups_to_merge), + ("specialization", tr.specialization or "default"), + ("streamk_enabled", sk.streamk_enabled), + ("streamk_persistent", sk.streamk_persistent if sk.streamk_enabled else False), + }) + + +# Cache generated key sets keyed by (rule_set, arch) — generation is the +# expensive part and every test reuses the same sets. +_KEY_CACHE: Dict[Tuple[str, str], Set[FrozenSet]] = {} + + +def _rule_set_keys(rule_set: str, arch: str) -> Set[FrozenSet]: + """Generate the canonical key set for ``rule_set`` on ``arch``.""" + cache_key = (rule_set, arch) + if cache_key not in _KEY_CACHE: + cfgs = get_default_configs( + arch=arch, + variants=VARIANTS, + ndims=NDIMS, + datatypes=DATATYPES, + rule_set=rule_set, + ) + _KEY_CACHE[cache_key] = {_config_to_key(c) for c in cfgs} + return _KEY_CACHE[cache_key] + + +# Short, stable variant labels for the per-variant coverage breakdown. +_VARIANT_LABELS: Dict[str, str] = { + str(GroupedConvVariant.FORWARD): "forward", + str(GroupedConvVariant.BACKWARD_DATA): "bwd_data", + str(GroupedConvVariant.BACKWARD_WEIGHT): "bwd_weight", +} + + +def _variant_label(key: FrozenSet) -> str: + """Return the short variant label for a key ('depthwise' for depthwise).""" + d = dict(key) + if d.get("kind") == "depthwise": + return "depthwise" + return _VARIANT_LABELS.get(d.get("variant"), str(d.get("variant"))) + + +def _print_coverage_report( + arch: str, + sub_name: str, + sup_name: str, + sub_keys: Set[FrozenSet], + sup_keys: Set[FrozenSet], + covered: Set[FrozenSet], + missing: Set[FrozenSet], + extra: Set[FrozenSet], + show_missing: int = 20, +) -> None: + """Print a coverage report mirroring the original CLI output. + + ``sub_name`` is the reference (ground-truth) set, ``sup_name`` the generated + set that should contain it. + """ + n_ref = len(sub_keys) + n_covered = len(covered) + n_missing = len(missing) + n_extra = len(extra) + coverage_pct = 100.0 * n_covered / n_ref if n_ref > 0 else 0.0 + + print("\n" + "=" * 70) + print(f"COVERAGE REPORT [arch={arch}]") + print(f"Reference: '{sub_name}' Generated: '{sup_name}'") + print("=" * 70) + print(f"Reference instances (unique): {n_ref}") + print(f"Generated configs (unique): {len(sup_keys)}") + print(f"Covered by rules: {n_covered} ({coverage_pct:.1f}%)") + print(f"Missing from rules: {n_missing}") + print(f"Extra in rules (not in ref): {n_extra}") + + if missing: + limit = show_missing if show_missing > 0 else n_missing + missing_sorted = sorted(missing, key=str) + print(f"\n--- Missing instances (showing {min(limit, n_missing)} of {n_missing}) ---") + for key in missing_sorted[:limit]: + print(_format_key(key)) + if n_missing > limit: + print(f" ... and {n_missing - limit} more.") + + # Summary by variant. + print("\n--- Coverage by variant ---") + variants = sorted({_variant_label(k) for k in sub_keys}) + for var in variants: + r_keys = {k for k in sub_keys if _variant_label(k) == var} + c_keys = {k for k in covered if _variant_label(k) == var} + m_keys = {k for k in missing if _variant_label(k) == var} + pct = 100.0 * len(c_keys) / len(r_keys) if r_keys else 0.0 + print(f" {var:15s}: {len(c_keys):4d}/{len(r_keys):4d} covered " + f"({pct:5.1f}%), {len(m_keys):4d} missing") + print("=" * 70) + + if n_missing == 0: + print(f"[PASS] '{sup_name}' fully contains all '{sub_name}' instances!") + else: + print(f"[FAIL] {n_missing} '{sub_name}' instances are not covered by '{sup_name}'.") + + +def _format_key(key: FrozenSet) -> str: + """Human-readable one-line summary of a canonical key (for failures).""" + d = dict(key) + if d.get("kind") == "depthwise": + return f" [depthwise/{d.get('datatype')}/{d.get('ndim_spatial')}d] {d.get('name')}" + tile = f"({d.get('tile_m')},{d.get('tile_n')},{d.get('tile_k')})" + wave = f"({d.get('warp_m')},{d.get('warp_n')},{d.get('warp_k')})" + warp = f"({d.get('warp_tile_m')},{d.get('warp_tile_n')},{d.get('warp_tile_k')})" + vec = f"({d.get('vec_a')},{d.get('vec_b')},{d.get('vec_c')})" + return ( + f" [{d.get('variant')}/{d.get('ndim_spatial')}d/{d.get('datatype')}] " + f"tile={tile} wave={wave} warp={warp} " + f"pipe={d.get('pipeline')}/{d.get('scheduler')} vec={vec} " + f"spec={d.get('specialization')}" + ) + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +class RuleSetCoverageTest(unittest.TestCase): + """Assert the rule-set containment hierarchy holds on every arch.""" + + def assert_subset(self, sub_name: str, sup_name: str, arch: str) -> None: + """Assert every instance of ``sub_name`` appears in ``sup_name``. + + Prints a coverage report (mirroring the original + ``validate_rules_coverage.py`` CLI output) treating ``sub_name`` as the + reference set and ``sup_name`` as the generated set. + """ + sub_keys = _rule_set_keys(sub_name, arch) + sup_keys = _rule_set_keys(sup_name, arch) + + self.assertGreater( + len(sub_keys), 0, + f"[{arch}] rule set '{sub_name}' produced no instances", + ) + + covered = sub_keys & sup_keys + missing = sub_keys - sup_keys + extra = sup_keys - sub_keys + + _print_coverage_report(arch, sub_name, sup_name, sub_keys, sup_keys, + covered, missing, extra) + + if missing: + preview = "\n".join(_format_key(k) for k in sorted(missing, key=str)[:20]) + more = f"\n ... and {len(missing) - 20} more." if len(missing) > 20 else "" + self.fail( + f"[{arch}] '{sup_name}' is missing {len(missing)} of " + f"{len(sub_keys)} instances from '{sub_name}':\n{preview}{more}" + ) + + +# Containment relationships to verify: (test label, sub set, super set). +# ``sub`` must be fully contained in ``super``. +_RELATIONSHIPS: List[Tuple[str, str, str]] = [ + ("full_contains_profiler", "profiler", "full"), + ("full_contains_tests", "tests", "full"), + ("full_tests_is_subset_of_full", "full-tests", "full"), + ("tiny_is_subset_of_full_tests", "tiny", "full-tests"), +] + + +def _make_subset_test(sub_name: str, sup_name: str, arch: str): + def test(self: RuleSetCoverageTest) -> None: + self.assert_subset(sub_name, sup_name, arch) + + test.__doc__ = f"[{arch}] '{sup_name}' must contain every '{sub_name}' instance." + return test + + +# Generate one test method per (relationship, arch) so the architecture shows +# up directly in the test id (e.g. ``test_full_contains_profiler_gfx942``), +# making it visible under ``pytest -v`` without needing ``-s``. +for _label, _sub, _sup in _RELATIONSHIPS: + for _arch in ARCHS: + setattr( + RuleSetCoverageTest, + f"test_{_label}_{_arch}", + _make_subset_test(_sub, _sup, _arch), + ) + +del _label, _sub, _sup, _arch + + +# =========================================================================== +# CK Builder equivalence +# =========================================================================== +# +# The dispatcher's "profiler" and "tests" rule sets are derived from the CK +# Builder ``.conf`` configurations. These tests assert exact equivalence: the +# instance set produced by each dispatcher rule set is identical (same count, +# same instances) to the set produced by the corresponding CK Builder mode +# ("profiler" / "tests"). +# +# The reference is built independently of the dispatcher's builder rule-set +# module by calling the CK Builder's own native parsers +# (``generate_instances.parse_*_instances``) directly on the ``.conf`` files, +# then converting each parsed instance to a dispatcher config with the same +# canonical key used everywhere else in this file. The only logic shared with +# the dispatcher is the pure field-mapping helpers (``map_pipeline_version`` / +# ``map_scheduler`` / ``map_specialization``), which are CK Builder field +# translations, not generation logic. +# + +# (config_dir, configs_list, native_parser, dispatcher_variant_enum). +# Each .conf lives at configs///.conf. +_CKB_SPECS = [ + ("forward", gi.fwd_configs, gi.parse_fwd_instances, GroupedConvVariant.FORWARD), + ("backward_weight", gi.bwd_weight_configs, gi.parse_bwd_weight_instances, GroupedConvVariant.BACKWARD_WEIGHT), + ("backward_data", gi.bwd_data_configs, gi.parse_bwd_data_instances, GroupedConvVariant.BACKWARD_DATA), +] + + +def _ckb_layout_of(cfg_name: str) -> str: + """Layout token of a CK Builder config name (e.g. 'nhwgc_fp16' -> 'nhwgc').""" + return cfg_name.split("_")[0] + + +def _ckb_dtype_of(cfg_name: str) -> str: + """Datatype token of a CK Builder config name (e.g. 'nhwgc_fp16' -> 'fp16').""" + return cfg_name.split("_")[1] + + +def _ckb_ndim_of(cfg_name: str) -> int: + """Spatial dims of a CK Builder config: nhwgc -> 2D, ndhwgc -> 3D.""" + return 2 if cfg_name.startswith("nhwgc") else 3 + + +def _ckb_param_to_config(p, variant, ndim, dtype, layout, arch): + """Convert one ``ConvInstanceTemplateParams`` (CK Builder) into a dispatcher + ``GroupedConvKernelConfig``. + + The reference must reflect what the CK Builder ``profiler`` / ``tests`` modes + actually emit — the ground truth. The CK Builder native + parsers already apply CK Builder's own validity filtering (the WMMA / native + warp-tile checks), so the parsed instances are exactly the CK Builder set. + + This conversion therefore applies only the one transform the dispatcher + builder path genuinely performs and that CK Builder mirrors: the bwd_weight + ``compv2`` / ``basic_v2`` skip (that pipeline is not compatible with CK + Tile's ``GroupedConvolutionBackwardWeightKernel``). It deliberately does + not apply the dispatcher's ``is_valid_for_arch()`` filter: that filter is + a dispatcher-side gate that CK Builder does not apply, so folding it into the + reference would hide any over-/under-filtering regression in the dispatcher + builder rule set (e.g. wrongly dropping valid ``warp_k=2`` instances). The + dispatcher rule set is required to reproduce the full CK Builder set. + + Returns ``None`` only for the bwd_weight compv2/basic_v2 instances that + neither CK Builder nor the dispatcher emit. + """ + pipeline = map_pipeline_version(p.pipeline_version) + scheduler = map_scheduler(p.scheduler) + specialization = map_specialization(p.specialization) + + # compv2/basic_v2 (GemmPipelineAGmemBGmemCRegV2) is not compatible with CK + # Tile's GroupedConvolutionBackwardWeightKernel — the dispatcher skips it. + if variant == GroupedConvVariant.BACKWARD_WEIGHT and pipeline in ("compv2", "basic_v2"): + return None + + trait = GroupedConvTraitConfig( + pipeline=pipeline, + scheduler=scheduler, + epilogue="cshuffle", + pad_m=True, + pad_n=True, + pad_k=True, + double_smem_buffer=p.double_smem_buffer, + num_groups_to_merge=p.num_groups_to_merge, + split_image=p.split_image, + explicit_gemm=p.explicit_gemm, + two_stage=p.is_two_stage_instance, + specialization=specialization, + streamk_config=StreamKConfig( + streamk_enabled=p.streamk_enabled, + strategy=StreamKReductionStrategy(p.streamk_reduction_strategy), + streamk_persistent=p.streamk_persistent, + ) if p.streamk_enabled else StreamKConfig(), + ) + + config = GroupedConvKernelConfig( + tile=TileConfig( + tile_m=p.tile_size[0], + tile_n=p.tile_size[1], + tile_k=p.tile_size[2], + warp_m=p.warps[0], + warp_n=p.warps[1], + warp_k=p.warps[2], + warp_tile_m=p.warp_tile[0], + warp_tile_n=p.warp_tile[1], + warp_tile_k=p.warp_tile[2], + ), + trait=trait, + variant=variant, + ndim_spatial=ndim, + arch=arch, + layout=layout, + vector_size_a=p.scalar_per_vector[0], + vector_size_b=p.scalar_per_vector[1], + vector_size_c=p.scalar_per_vector[2], + num_wave_groups=p.num_wave_groups, + ) + config.datatype = dtype + return config + + +# Cache the independently-built CK Builder reference key sets by (mode, arch). +_CKB_REF_CACHE: Dict[Tuple[str, str], Set[FrozenSet]] = {} + + +def _ckb_reference_keys(mode: str, arch: str) -> Set[FrozenSet]: + """Build the CK Builder reference key set for ``mode`` ("profiler"/"tests") + by parsing the ``.conf`` files with the native CK Builder parsers.""" + cache_key = (mode, arch) + if cache_key in _CKB_REF_CACHE: + return _CKB_REF_CACHE[cache_key] + + # The CK Builder parsers derive warp_k from the architecture warp size + # (64 for CDNA gfx9, 32 for RDNA). It must be passed explicitly to match the + # dispatcher's builder rule set, which does the same; otherwise the parser + # default of 32 doubles warp_k on gfx9 and the reference would not match. + warp_size = gi.get_warp_size(arch) + + keys: Set[FrozenSet] = set() + for config_dir, cfg_list, parser, variant in _CKB_SPECS: + for cfg_name in cfg_list: + layout = _ckb_layout_of(cfg_name) + dtype = _ckb_dtype_of(cfg_name) + ndim = _ckb_ndim_of(cfg_name) + conf_path = _BUILDER_CONFIGS_DIR / config_dir / mode / f"{cfg_name}.conf" + if not conf_path.exists(): + continue + with open(conf_path, "r", encoding="utf-8") as f: + lines = f.readlines() + problem_name = f"grouped_convolution_{config_dir}_tile_{cfg_name}" + raw = parser(lines, problem_name, warp_size=warp_size, verbose=False) + for p in raw: + cfg = _ckb_param_to_config(p, variant, ndim, dtype, layout, arch) + if cfg is not None: + keys.add(_config_to_key(cfg)) + + _CKB_REF_CACHE[cache_key] = keys + return keys + + +class CKBuilderEquivalenceTest(unittest.TestCase): + """Assert each dispatcher builder-derived rule set ("profiler" / "tests") + produces exactly the same instances as the corresponding CK Builder mode.""" + + def assert_equivalent(self, rule_set: str, mode: str, arch: str) -> None: + """Assert the dispatcher ``rule_set`` and CK Builder ``mode`` produce an + identical instance set on ``arch`` (matching count, then content).""" + ref_keys = _ckb_reference_keys(mode, arch) + gen_keys = _rule_set_keys(rule_set, arch) + + self.assertGreater( + len(ref_keys), 0, + f"[{arch}] CK Builder mode '{mode}' produced no reference instances", + ) + + # Counts first (per the requested test method), then content. + missing = ref_keys - gen_keys # in CK Builder, not emitted by dispatcher + extra = gen_keys - ref_keys # emitted by dispatcher, not in CK Builder + + print("\n" + "=" * 70) + print(f"CK BUILDER EQUIVALENCE [arch={arch}]") + print(f"Dispatcher rule set: '{rule_set}' CK Builder mode: '{mode}'") + print("=" * 70) + print(f"CK Builder reference instances: {len(ref_keys)}") + print(f"Dispatcher rule-set instances: {len(gen_keys)}") + print(f"Missing from dispatcher: {len(missing)}") + print(f"Extra in dispatcher: {len(extra)}") + print("=" * 70) + + self.assertEqual( + len(gen_keys), len(ref_keys), + f"[{arch}] instance count mismatch: dispatcher '{rule_set}' has " + f"{len(gen_keys)} vs CK Builder '{mode}' {len(ref_keys)}", + ) + + if missing or extra: + details = [] + if missing: + preview = "\n".join(_format_key(k) for k in sorted(missing, key=str)[:20]) + more = f"\n ... and {len(missing) - 20} more." if len(missing) > 20 else "" + details.append( + f"{len(missing)} CK Builder instances missing from dispatcher " + f"'{rule_set}':\n{preview}{more}" + ) + if extra: + preview = "\n".join(_format_key(k) for k in sorted(extra, key=str)[:20]) + more = f"\n ... and {len(extra) - 20} more." if len(extra) > 20 else "" + details.append( + f"{len(extra)} dispatcher '{rule_set}' instances not in " + f"CK Builder '{mode}':\n{preview}{more}" + ) + self.fail(f"[{arch}] " + "\n".join(details)) + + +# (test label, dispatcher rule set, CK Builder mode). +_EQUIVALENCE_PAIRS: List[Tuple[str, str, str]] = [ + ("profiler_matches_ck_builder", "profiler", "profiler"), + ("tests_matches_ck_builder", "tests", "tests"), +] + + +def _make_equivalence_test(rule_set: str, mode: str, arch: str): + def test(self: CKBuilderEquivalenceTest) -> None: + self.assert_equivalent(rule_set, mode, arch) + + test.__doc__ = ( + f"[{arch}] dispatcher '{rule_set}' must equal CK Builder '{mode}'." + ) + return test + + +for _label, _rs, _mode in _EQUIVALENCE_PAIRS: + for _arch in ARCHS: + setattr( + CKBuilderEquivalenceTest, + f"test_{_label}_{_arch}", + _make_equivalence_test(_rs, _mode, _arch), + ) + +del _label, _rs, _mode, _arch + + +if __name__ == "__main__": + unittest.main() diff --git a/dispatcher/tests/test_streamk_gemm_utils.py b/dispatcher/tests/test_streamk_gemm_utils.py new file mode 100644 index 00000000000..4d698ff09dd --- /dev/null +++ b/dispatcher/tests/test_streamk_gemm_utils.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +"""CPU-only unit tests for the stream-K surface of python/gemm_utils.py. + +The stream-K bridge adds a ``reduction_strategy`` to GemmKernelConfig and a +dedicated ctypes source. These tests lock in the two pieces of pure host-side +logic that must stay byte-exact with the codegen and the build: + + * ``GemmKernelConfig.name`` -- the suffix rules mirror + unified_gemm_codegen.py::KernelNaming.generate. Atomic keeps the bare + ``_streamk`` (original parity name); linear/tree are disambiguated as + ``_streamk_``. If this drifts, the runtime registry lookup key + misses the kernel baked into the generated header. + * ``_ctypes_source_name`` -- stream-K launches StreamKHostArgs directly + (registry-bypass) so it needs its own bridge .cpp; every other variant + shares gemm_ctypes_lib.cpp. + +No GPU is touched. Run: python3 -m pytest tests/test_streamk_gemm_utils.py -v +""" + +import sys +import unittest +from pathlib import Path + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "python")) + +from gemm_utils import ( # noqa: E402 + GemmKernelConfig, + _ctypes_source_name, + _dtype_from_kernel_name, + _layout_from_kernel_name, +) + + +class TestStreamKNaming(unittest.TestCase): + """Stream-K variant naming and reduction-strategy plumbing.""" + + def _cfg(self, variant="stream_k", reduction_strategy="atomic"): + return GemmKernelConfig(variant=variant, reduction_strategy=reduction_strategy) + + def test_atomic_keeps_bare_streamk_suffix(self): + name = self._cfg(reduction_strategy="atomic").name + self.assertTrue(name.endswith("_streamk")) + self.assertNotIn("_streamk_atomic", name) + + def test_linear_and_tree_are_disambiguated(self): + self.assertTrue( + self._cfg(reduction_strategy="linear").name.endswith("_streamk_linear") + ) + self.assertTrue( + self._cfg(reduction_strategy="tree").name.endswith("_streamk_tree") + ) + + def test_standard_has_no_streamk_suffix(self): + self.assertNotIn("streamk", self._cfg(variant="standard").name) + + def test_streamk_name_still_roundtrips_dtype_and_layout(self): + # The variant suffix must not disturb the dtype/layout tokens the runner + # parses back out of the compiled .so name. + for red in ("atomic", "linear", "tree"): + cfg = GemmKernelConfig( + dtype_a="bf16", + dtype_b="bf16", + dtype_c="bf16", + layout_a="col", + layout_b="col", + layout_c="row", + variant="stream_k", + reduction_strategy=red, + ) + self.assertEqual(_dtype_from_kernel_name(cfg.name), "bf16") + self.assertEqual(_layout_from_kernel_name(cfg.name), "ccr") + + def test_codegen_json_pins_reduction_only_for_streamk(self): + sk = self._cfg(reduction_strategy="tree").to_codegen_json() + self.assertEqual(sk["streamk_config"], {"reduction_strategy": ["tree"]}) + # Non-stream-K configs must not emit a streamk_config block. + self.assertNotIn( + "streamk_config", + GemmKernelConfig(variant="standard").to_codegen_json(), + ) + + +class TestCtypesSourceRouting(unittest.TestCase): + """Each variant routes to the ctypes bridge .cpp matching its launch ABI.""" + + def test_streamk_gets_dedicated_source(self): + cfg = GemmKernelConfig(variant="stream_k") + self.assertEqual(_ctypes_source_name(cfg), "streamk_gemm_ctypes_lib.cpp") + + def test_standard_uses_default_source(self): + self.assertEqual( + _ctypes_source_name(GemmKernelConfig(variant="standard")), + "gemm_ctypes_lib.cpp", + ) + self.assertEqual( + _ctypes_source_name(GemmKernelConfig(variant="preshuffle")), + "gemm_ctypes_lib.cpp", + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/dispatcher/tests/test_streamk_registry.py b/dispatcher/tests/test_streamk_registry.py new file mode 100644 index 00000000000..5e6c92b9d42 --- /dev/null +++ b/dispatcher/tests/test_streamk_registry.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Stream-K deep-core registry test (requires a GPU + hipcc). + +Guards the deep-core path that lets Stream-K ride the registry like regular GEMM: +codegen -> generated SK wrapper -> Registry -> Dispatcher::run() (workspace alloc ++ strategy-aware reset) -> generated_tile_backend_streamk -> verify vs reference. + +Each reduction strategy (atomic/linear/tree) is a *distinct compiled kernel* +(SkReductionStrategy is a compile-time constexpr), so we generate all three from a +single tile config and build the 04 registry driver once per strategy, force- +including that strategy's header. For each we assert: + * the encode_identifier() suffix matches the strategy (..._streamk[_linear|_tree]) + * the Dispatcher selects that kernel by Problem::reduction_strategy + * the result verifies against the reference GEMM + +The test SKIPs (exit 77) when no GPU or no hipcc is available, so it is safe in +CPU-only CI; it only runs the heavy build+launch where a GPU is present. + +Usage: + python3 test_streamk_registry.py + python3 test_streamk_registry.py --arch gfx942 --m 3840 --n 4096 --k 2048 +""" + +import argparse +import json +import os +import re +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path + +DISPATCHER_DIR = Path(__file__).resolve().parent.parent +CK_DIR = DISPATCHER_DIR.parent +CODEGEN = DISPATCHER_DIR / "codegen" / "unified_gemm_codegen.py" +DRIVER = DISPATCHER_DIR / "examples" / "gemm" / "cpp" / "04_streamk_registry_driver.cpp" +REGISTRY_SRC = DISPATCHER_DIR / "src" / "registry.cpp" +DISPATCHER_SRC = DISPATCHER_DIR / "src" / "dispatcher.cpp" + +SKIP = 77 # ctest SKIP_RETURN_CODE + +# One tile config, all three reduction strategies. +TILE = "128x128x64_2x2x1_32x32x16" +TILE_CONFIG_JSON = json.dumps( + { + "tile_config": { + "tile_m": [128], "tile_n": [128], "tile_k": [64], + "warp_m": [2], "warp_n": [2], "warp_k": [1], + "warp_tile_m": [32], "warp_tile_n": [32], "warp_tile_k": [16], + "block_size": [256], + }, + "trait_config": { + "pipeline": ["compv3"], "epilogue": ["cshuffle"], "scheduler": ["intrawave"], + "pad_m": [False], "pad_n": [False], "pad_k": [False], "persistent": [False], + }, + "streamk_config": {"reduction_strategy": ["atomic", "linear", "tree"]}, + } +) + +# strategy -> (header variant suffix, expected encode_identifier suffix) +STRATEGIES = { + "atomic": ("streamk", "_streamk"), + "linear": ("streamk_linear", "_streamk_linear"), + "tree": ("streamk_tree", "_streamk_tree"), +} + +# Datatypes the Stream-K dispatcher codegen supports end-to-end. fp8/bf8 inputs +# accumulate in fp32 and write an fp16 C tensor (get_output_dtype), matching +# Tile Engine; the registry identifier keys on the input dtype (dtype_a), so the +# expected encode_identifier prefix is "{dtype}_{layout}" for each. +DATATYPES = ["fp16", "bf16", "fp8", "bf8"] + +# Layouts Tile Engine builds Stream-K for (all keep C row-major, which the atomic +# C-reset relies on). Full coverage = DATATYPES x LAYOUTS x STRATEGIES. +LAYOUTS = ["rcr", "rrr", "ccr", "crr"] + + +def detect_arch(fallback=None): + # Resolve the gfx target without shelling out to rocminfo. Preference order: + # the arch the build already configured with (passed via --arch from + # CMakeLists.txt) is handled by the caller; here we fall back to the standard + # ROCm environment variables and then the amdgpu-arch / offload-arch LLVM + # tools, which query the driver directly and ship with the ROCm/LLVM toolchain. + for env in ("PYTORCH_ROCM_ARCH", "HCC_AMDGPU_TARGET", "AMDGPU_TARGETS", "GPU_TARGETS"): + val = os.environ.get(env) + if val: + return re.split(r"[;,]", val)[0].strip() + for tool in ("amdgpu-arch", "offload-arch"): + exe = shutil.which(tool) + if exe: + try: + out = run([exe], timeout=30).stdout + m = re.search(r"\bgfx[0-9a-f]+\b", out) + if m: + return m.group(0) + except Exception: + pass + return fallback + + +def run(cmd, **kw): + return subprocess.run(cmd, capture_output=True, text=True, **kw) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--arch", default=None) + ap.add_argument("--m", type=int, default=3840) + ap.add_argument("--n", type=int, default=4096) + ap.add_argument("--k", type=int, default=2048) + ap.add_argument( + "--datatypes", default=",".join(DATATYPES), + help="Comma-separated datatypes to test (default: all TE-equivalent).", + ) + ap.add_argument( + "--layouts", default=",".join(LAYOUTS), + help="Comma-separated layouts to test (default: all TE-equivalent).", + ) + args = ap.parse_args() + datatypes = [d.strip() for d in args.datatypes.split(",") if d.strip()] + layouts = [l.strip() for l in args.layouts.split(",") if l.strip()] + + hipcc = shutil.which("hipcc") + if not hipcc: + print("SKIP: hipcc not found") + return SKIP + + arch = args.arch or detect_arch() + if not arch: + print("SKIP: no GPU / could not detect gfx arch") + return SKIP + print(f"Stream-K registry test on {arch} @ {args.m}x{args.n}x{args.k}") + + inc = ["-I", str(CK_DIR / "include"), "-I", str(DISPATCHER_DIR / "include")] + + with tempfile.TemporaryDirectory(prefix="sk_reg_test_") as td: + # Build the dtype-independent core objects once (no force-include). + reg_o, disp_o = Path(td) / "registry.o", Path(td) / "dispatcher.o" + for src, obj in ((REGISTRY_SRC, reg_o), (DISPATCHER_SRC, disp_o)): + c = run( + [hipcc, "-std=c++17", f"--offload-arch={arch}", "-O3", *inc, + "-c", str(src), "-o", str(obj)], + timeout=900, + ) + if c.returncode != 0: + print(f"FAIL: compiling {src.name}\n" + c.stderr[-2000:]) + return 1 + + failures = [] + for dtype in datatypes: + for layout in layouts: + failures += run_for_combo( + dtype, layout, td, arch, args, hipcc, inc, reg_o, disp_o + ) + + if failures: + print("\nSTREAM-K REGISTRY TEST FAILED:") + for f in failures: + print(" - " + f) + return 1 + + print( + "All Stream-K combos registered, dispatched, and verified " + f"(datatypes: {', '.join(datatypes)} | layouts: {', '.join(layouts)})." + ) + return 0 + + +def run_for_combo(dtype, layout, td, arch, args, hipcc, inc, reg_o, disp_o): + """Generate + build + run all reduction strategies for one (dtype, layout). + + Returns a list of failure strings (empty on success).""" + failures = [] + # Verify each built kernel against the CLI shape AND a small-M/N, large-K + # shape. The latter maximizes the Stream-K split factor, which is exactly + # where the split-K-aware verification tolerance matters: a plain single-pass + # tolerance spuriously FAILs correct atomic results on this shape. The driver + # binary is shape-independent, so this only adds runs, not rebuilds. + shapes = [(args.m, args.n, args.k), (128, 128, 16384)] + gen = Path(td) / f"gen_{dtype}_{layout}" + + # 1) generate all three strategy headers from one tile config + g = run( + [ + sys.executable, str(CODEGEN), + "--datatype", dtype, "--layout", layout, + "--gpu-target", arch, "--variants", "stream_k", + "--tile-config-json", TILE_CONFIG_JSON, + "--output-dir", str(gen), + ], + timeout=600, + ) + if g.returncode != 0: + return [f"{dtype}/{layout}: codegen failed\n" + g.stderr[-2000:]] + + for strat, (variant, want_suffix) in STRATEGIES.items(): + tag = f"{dtype}/{layout}/{strat}" + header = gen / ( + f"gemm_{dtype}_{layout}_compv3_cshuffle_intrawave_" + f"False_False_False_False_{TILE}_{variant}.hpp" + ) + if not header.exists(): + failures.append(f"{tag}: generated header missing ({header.name})") + continue + + stem = f"{dtype}_{layout}_{variant}" + drv_o, exe = Path(td) / f"d_{stem}.o", Path(td) / f"skreg_{stem}" + c = run( + [hipcc, "-std=c++17", f"--offload-arch={arch}", "-O3", + "-DCK_TILE_SINGLE_KERNEL_INCLUDE", f'-DGFX_ARCH="{arch}"', + *inc, "-I", str(gen), "-include", str(header), + "-c", str(DRIVER), "-o", str(drv_o)], + timeout=900, + ) + if c.returncode != 0: + failures.append(f"{tag}: driver compile failed\n{c.stderr[-1500:]}") + continue + l = run( + [hipcc, f"--offload-arch={arch}", str(drv_o), str(disp_o), + str(reg_o), "-o", str(exe)], + timeout=300, + ) + if l.returncode != 0: + failures.append(f"{tag}: link failed\n{l.stderr[-1500:]}") + continue + + for (sm, sn, sk) in shapes: + r = run( + [str(exe), "--m", str(sm), "--n", str(sn), + "--k", str(sk), "--strategy", strat, "--validate", "1"], + timeout=300, + ) + out = r.stdout + ok_verify = "Verification: PASS" in out + # Guard the identifier parse: a crashed/silent driver prints no + # "identifier=" token, so split(...)[1] would raise IndexError and + # abort the run instead of recording a clean failure. + ok_suffix = False + if f"identifier={dtype}_{layout}" in out and "identifier=" in out: + token = out.split("identifier=", 1)[1].split()[0] + ok_suffix = want_suffix in token + if r.returncode != 0 or not ok_verify or not ok_suffix: + failures.append( + f"{tag} @ {sm}x{sn}x{sk}: rc={r.returncode} verify={ok_verify} " + f"suffix_ok={ok_suffix}\n{out[-800:]}{r.stderr[-400:]}" + ) + else: + tflops = next( + (ln for ln in out.splitlines() if "TFlops" in ln), "" + ).strip() + print( + f" PASS {dtype:5s} {layout:4s} {strat:6s} {sm}x{sn}x{sk} " + f"-> {want_suffix} | {tflops}" + ) + + return failures + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/dispatcher/tests/test_tile_math.py b/dispatcher/tests/test_tile_math.py new file mode 100644 index 00000000000..aa93aaddf44 --- /dev/null +++ b/dispatcher/tests/test_tile_math.py @@ -0,0 +1,614 @@ +#!/usr/bin/env python3 + +# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. +# SPDX-License-Identifier: MIT + +""" +Unit tests for codegen/tile_math.py. + +The reference lookup tables TILE_TO_WAVE_WARP and _TILE_WTILK_TO_VECS are +used as ground-truth oracles. The mathematical functions in tile_math.py +must generate at least the set of configurations present in those tables +(no false negatives). + +Run: + python3 -m pytest dispatcher/tests/test_tile_math.py -v +or: + cd projects/composablekernel/dispatcher + python3 -m pytest tests/test_tile_math.py -v +""" + +import sys +import unittest +from pathlib import Path +from typing import Dict, List, Tuple + +SCRIPT_DIR = Path(__file__).parent.resolve() +DISPATCHER_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(DISPATCHER_DIR / "codegen")) + +from arch_specs_generated import WARP_SUPPORTED_COMBINATIONS, ELEMENT_SIZE_MAP # noqa: E402 +from grouped_conv.tile_math import ( # noqa: E402 + get_valid_wave_warp_pairs, + get_valid_vec_sizes, + get_vec_sizes_for_wave_warp, + dtype_keys_for_warp_tile_k, + WARP_SIZE, +) + +# ============================================================================= +# Reference oracle tables (ground truth extracted from CK profiler configs) +# +# They live here as static test fixtures: the math functions in tile_math.py must generate +# at least every entry present in these tables (zero false negatives). +# ============================================================================= + +TILE_TO_WAVE_WARP: Dict[Tuple[int, int, int], List[Tuple[Tuple, Tuple]]] = { + (16, 16, 32): [((1, 1, 1), (16, 16, 8)), ((1, 1, 1), (16, 16, 16))], + (16, 16, 64): [((1, 1, 1), (16, 16, 8)), ((1, 1, 1), (16, 16, 16))], + (16, 16, 128): [((1, 1, 1), (16, 16, 8)), ((1, 1, 1), (16, 16, 16))], + (16, 32, 64): [((1, 2, 1), (16, 16, 8)), ((1, 2, 1), (16, 16, 16))], + (16, 64, 32): [((1, 1, 1), (16, 16, 8)), ((1, 1, 1), (16, 16, 16))], + (16, 64, 64): [((1, 2, 1), (16, 16, 8)), ((1, 2, 1), (16, 16, 16))], + (16, 128, 32): [((1, 1, 1), (16, 16, 16))], + (16, 128, 64): [((1, 2, 1), (16, 16, 8)), ((1, 2, 1), (16, 16, 16))], + (16, 256, 32): [((1, 1, 1), (16, 16, 16))], + (16, 256, 64): [((1, 4, 1), (16, 16, 16))], + (32, 16, 64): [((2, 1, 1), (16, 16, 8)), ((2, 1, 1), (16, 16, 16))], + (32, 32, 32): [((1, 1, 1), (32, 32, 8))], + (32, 64, 16): [((1, 1, 1), (32, 32, 4))], + (32, 64, 32): [((1, 1, 1), (32, 32, 8))], + (32, 64, 64): [((1, 2, 1), (32, 32, 8))], + (32, 128, 16): [((1, 2, 1), (32, 32, 4))], + (32, 128, 32): [((1, 1, 1), (32, 32, 8)), ((1, 2, 1), (32, 32, 8))], + (32, 128, 64): [((1, 2, 1), (32, 32, 8))], + (32, 256, 64): [((1, 4, 1), (32, 32, 8))], + (64, 16, 16): [((1, 1, 1), (16, 16, 4)), ((1, 1, 1), (16, 16, 16)), + ((4, 1, 1), (16, 16, 4)), ((4, 1, 1), (16, 16, 16))], + (64, 16, 32): [((1, 1, 1), (16, 16, 8)), ((1, 1, 1), (16, 16, 16)), + ((4, 1, 1), (16, 16, 8)), ((4, 1, 1), (16, 16, 16))], + (64, 16, 64): [((2, 1, 1), (16, 16, 8)), ((2, 1, 1), (16, 16, 16)), + ((4, 1, 1), (16, 16, 16))], + (64, 32, 16): [((1, 1, 1), (32, 32, 4))], + (64, 32, 32): [((1, 1, 1), (32, 32, 8))], + (64, 32, 64): [((2, 1, 1), (32, 32, 8))], + (64, 64, 8): [((2, 1, 1), (32, 32, 8))], + (64, 64, 16): [((1, 1, 1), (32, 32, 4))], + (64, 64, 32): [((1, 1, 1), (32, 32, 8)), ((2, 2, 1), (16, 16, 8)), + ((2, 2, 1), (16, 16, 16))], + (64, 64, 64): [((2, 2, 1), (16, 16, 16)), ((2, 2, 1), (32, 32, 8))], + (64, 128, 16): [((1, 2, 1), (32, 32, 4)), ((2, 2, 1), (32, 32, 4))], + (64, 128, 32): [((1, 2, 1), (32, 32, 8)), ((2, 2, 1), (32, 32, 8))], + (64, 128, 64): [((2, 2, 1), (32, 32, 8))], + (128, 16, 64): [((2, 1, 1), (16, 16, 8)), ((2, 1, 1), (16, 16, 16))], + (128, 32, 16): [((2, 1, 1), (32, 32, 4)), ((4, 1, 1), (32, 32, 4)), + ((4, 1, 1), (32, 32, 8))], + (128, 32, 32): [((1, 1, 1), (32, 32, 8)), ((2, 1, 1), (32, 32, 8)), + ((2, 1, 2), (32, 32, 8)), ((4, 1, 1), (32, 32, 8))], + (128, 32, 64): [((2, 1, 1), (32, 32, 8)), ((4, 1, 1), (32, 32, 16))], + (128, 64, 8): [((2, 1, 1), (32, 32, 8)), ((2, 2, 1), (32, 32, 8))], + (128, 64, 16): [((2, 1, 1), (32, 32, 4)), ((2, 2, 1), (32, 32, 4)), + ((2, 2, 1), (32, 32, 8))], + (128, 64, 32): [((2, 1, 1), (32, 32, 8)), ((2, 2, 1), (32, 32, 8))], + (128, 64, 64): [((2, 2, 1), (32, 32, 8))], + (128, 128, 16):[((1, 2, 1), (32, 32, 4)), ((2, 2, 1), (32, 32, 4))], + (128, 128, 32):[((1, 2, 1), (32, 32, 8)), ((2, 2, 1), (32, 32, 8))], + (128, 128, 64):[((2, 2, 1), (32, 32, 8))], + (128, 192, 16):[((2, 2, 1), (32, 32, 4))], + (128, 256, 16):[((2, 2, 1), (32, 32, 4))], + (128, 256, 32):[((2, 2, 1), (32, 32, 8))], + (224, 256, 64):[((2, 2, 1), (16, 16, 16))], + (256, 16, 64): [((4, 1, 1), (16, 16, 16))], + (256, 32, 64): [((4, 1, 1), (32, 32, 8))], + (256, 64, 8): [((2, 2, 1), (32, 32, 8))], + (256, 128, 16):[((2, 2, 1), (32, 32, 4))], + (256, 128, 32):[((2, 2, 1), (32, 32, 8))], + (256, 224, 64):[((2, 2, 1), (16, 16, 16))], + (256, 256, 32):[((2, 2, 1), (16, 16, 16)), ((2, 2, 1), (32, 32, 8))], +} + +_TILE_WTILK_TO_VECS: Dict[Tuple[int, int, int, int], List[Tuple[int, int, int]]] = { + (16, 16, 32, 8): [(1, 1, 2)], + (16, 16, 32, 16): [(1, 1, 1), (1, 1, 2)], + (16, 16, 64, 8): [(4, 4, 4)], + (16, 16, 64, 16): [(1, 1, 1), (1, 4, 4), (4, 1, 1), (4, 4, 4), (8, 8, 4)], + (16, 16, 128, 8): [(4, 4, 4)], + (16, 16, 128, 16): [(8, 8, 4)], + (16, 32, 64, 8): [(4, 4, 4)], + (16, 32, 64, 16): [(1, 1, 1), (1, 2, 4), (1, 4, 4), (2, 1, 1), (2, 2, 4), (2, 4, 4), (8, 8, 4)], + (16, 64, 32, 8): [(1, 4, 4), (4, 1, 1), (4, 4, 4)], + (16, 64, 32, 16): [(1, 8, 4), (8, 1, 1), (8, 8, 4)], + (16, 64, 64, 8): [(4, 4, 4)], + (16, 64, 64, 16): [(1, 1, 1), (1, 8, 4), (2, 1, 1), (2, 8, 4), (8, 8, 4)], + (16, 128, 32, 16): [(4, 4, 1)], + (16, 128, 64, 8): [(4, 4, 4)], + (16, 128, 64, 16): [(1, 8, 4), (2, 8, 4), (8, 8, 4)], + (16, 256, 32, 16): [(8, 8, 1)], + (16, 256, 64, 16): [(1, 8, 4), (2, 8, 4), (8, 8, 4)], + (32, 16, 64, 8): [(4, 4, 2)], + (32, 16, 64, 16): [(1, 1, 1), (1, 2, 2), (2, 1, 1), (2, 2, 2), (4, 1, 1), (4, 2, 2), (8, 8, 2)], + (32, 32, 32, 8): [(2, 2, 1), (2, 2, 2)], + (32, 64, 16, 4): [(1, 4, 4), (4, 4, 4)], + (32, 64, 32, 8): [(1, 1, 8), (2, 2, 1), (2, 8, 8), (4, 4, 1), (4, 4, 2), (4, 4, 4), (8, 8, 8)], + (32, 64, 64, 8): [(4, 4, 8), (8, 8, 8)], + (32, 128, 16, 4): [(4, 4, 4)], + (32, 128, 32, 8): [(1, 1, 8), (4, 4, 4), (8, 8, 1), (8, 8, 2), (8, 8, 8)], + (32, 128, 64, 8): [(4, 4, 8), (8, 8, 8)], + (32, 256, 64, 8): [(8, 8, 8)], + (64, 16, 16, 4): [(4, 1, 1)], + (64, 16, 16, 16): [(4, 1, 1)], + (64, 16, 32, 8): [(1, 4, 4), (4, 1, 1), (4, 4, 4), (8, 1, 1), (8, 2, 2)], + (64, 16, 32, 16): [(1, 8, 4), (8, 1, 1), (8, 2, 2), (8, 8, 4)], + (64, 16, 64, 8): [(4, 4, 2)], + (64, 16, 64, 16): [(1, 1, 1), (1, 2, 2), (8, 1, 1), (8, 2, 2), (8, 8, 2), (16, 1, 1), (16, 2, 2)], + (64, 32, 16, 4): [(4, 4, 1), (4, 4, 4)], + (64, 32, 32, 8): [(1, 1, 8), (4, 4, 1), (4, 4, 2), (4, 4, 4), (8, 8, 1), (8, 8, 8)], + (64, 32, 64, 8): [(4, 4, 4), (8, 8, 4)], + (64, 64, 8, 8): [(1, 1, 8)], + (64, 64, 16, 4): [(1, 1, 1), (4, 4, 4)], + (64, 64, 32, 8): [(1, 1, 1), (1, 1, 8), (1, 2, 1), (2, 1, 2), (2, 2, 2), (4, 4, 4), (8, 8, 8)], + (64, 64, 32, 16): [(1, 2, 1), (2, 1, 2), (4, 4, 4), (8, 8, 8)], + (64, 64, 64, 8): [(1, 1, 1), (1, 4, 4), (2, 2, 2), (4, 1, 1), (4, 4, 4), (8, 8, 4), (8, 8, 8)], + (64, 64, 64, 16): [(2, 2, 4), (4, 1, 1), (8, 8, 2), (8, 8, 8)], + (64, 128, 16, 4): [(4, 4, 4)], + (64, 128, 32, 8): [(1, 1, 8), (1, 4, 4), (1, 8, 8), (4, 4, 4), (8, 8, 8)], + (64, 128, 64, 8): [(8, 8, 8)], + (128, 16, 64, 8): [(4, 4, 2)], + (128, 16, 64, 16): [(8, 1, 1), (8, 2, 2), (8, 8, 2)], + (128, 32, 16, 4): [(4, 1, 1), (4, 2, 2), (4, 4, 4)], + (128, 32, 16, 8): [(4, 1, 1), (4, 2, 2)], + (128, 32, 32, 8): [(1, 1, 8), (4, 1, 1), (4, 4, 4), (8, 1, 1), (8, 2, 2), (8, 8, 1), (8, 8, 2), (8, 8, 8)], + (128, 32, 64, 8): [(4, 4, 4), (8, 8, 4)], + (128, 32, 64, 16): [(16, 1, 1), (16, 2, 2), (16, 8, 8)], + (128, 64, 8, 8): [(1, 1, 8)], + (128, 64, 16, 4): [(4, 4, 4)], + (128, 64, 16, 8): [(1, 1, 8)], + (128, 64, 32, 8): [(1, 1, 8), (4, 4, 4), (8, 8, 8)], + (128, 64, 64, 8): [(8, 8, 8)], + (128, 128, 16, 4): [(1, 1, 4), (4, 4, 4)], + (128, 128, 32, 8): [(1, 1, 8), (4, 4, 4), (4, 4, 8), (8, 8, 8)], + (128, 128, 64, 8): [(4, 4, 4), (4, 4, 8), (8, 8, 4), (8, 8, 8)], + (128, 192, 16, 4): [(4, 4, 4)], + (128, 256, 16, 4): [(4, 4, 4)], + (128, 256, 32, 8): [(1, 1, 8), (4, 4, 4), (8, 4, 8), (8, 8, 8)], + (224, 256, 64, 16):[(8, 8, 8)], + (256, 16, 64, 16): [(8, 1, 1), (8, 2, 2), (8, 8, 2)], + (256, 32, 64, 8): [(8, 8, 4), (8, 8, 8)], + (256, 64, 8, 8): [(1, 1, 8)], + (256, 128, 16, 4): [(4, 4, 4)], + (256, 128, 32, 8): [(1, 1, 8), (2, 2, 2), (4, 4, 4), (8, 8, 8)], + (256, 224, 64, 16):[(8, 8, 8)], + (256, 256, 32, 8): [(4, 4, 4), (8, 8, 4), (8, 8, 8)], + (256, 256, 32, 16):[(8, 8, 8)], +} + + +# ============================================================================= +# TestGetValidWaveWarpPairs +# ============================================================================= + +class TestGetValidWaveWarpPairs(unittest.TestCase): + """Tests for get_valid_wave_warp_pairs().""" + + # --- Spot checks --- + + def test_spot_check_128_64_32(self): + """Reference pairs for (128,64,32) must all be in the math result.""" + tile = (128, 64, 32) + ref_pairs = TILE_TO_WAVE_WARP[tile] + math_pairs = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32")) + for pair in ref_pairs: + self.assertIn( + pair, math_pairs, + f"Missing reference pair {pair} for tile {tile}", + ) + + def test_spot_check_64_64_32(self): + """Reference pairs for (64,64,32) must all be in the union of dtype results.""" + tile = (64, 64, 32) + ref_pairs = TILE_TO_WAVE_WARP[tile] + # Union across dtype_keys — reference table is dtype-agnostic + math_pairs = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32")) + math_pairs |= set(get_valid_wave_warp_pairs(*tile, "fp32_fp32_fp32")) + math_pairs |= set(get_valid_wave_warp_pairs(*tile, "fp16_fp16_fp32")) + for pair in ref_pairs: + self.assertIn( + pair, math_pairs, + f"Missing reference pair {pair} for tile {tile}", + ) + + def test_spot_check_128_32_32_fp32(self): + """Reference pairs for (128,32,32) include fp32 warp tiles.""" + tile = (128, 32, 32) + ref_pairs = TILE_TO_WAVE_WARP[tile] + # fp32 uses warp_tile_k in {4, 8}; bf16 uses {8, 16} + # Try both dtype_keys and require the union covers all reference pairs + math_pairs = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32")) + math_pairs |= set(get_valid_wave_warp_pairs(*tile, "fp32_fp32_fp32")) + for pair in ref_pairs: + self.assertIn( + pair, math_pairs, + f"Missing reference pair {pair} for tile {tile}", + ) + + # --- Full coverage of reference table --- + + def test_coverage_all_reference_tiles(self): + """Every (tile, pair) in TILE_TO_WAVE_WARP must be generated by the math. + + The math is called with both bf16_bf16_fp32 and fp32_fp32_fp32 dtype_keys + and the union must contain every reference pair. This is the zero-false- + negatives requirement. + """ + DTYPE_KEYS = ["bf16_bf16_fp32", "fp32_fp32_fp32", "fp16_fp16_fp32"] + missing = [] + + for tile, ref_pairs in TILE_TO_WAVE_WARP.items(): + # Union across dtype_keys (reference table is dtype-agnostic) + math_pairs: set = set() + for dk in DTYPE_KEYS: + math_pairs |= set(get_valid_wave_warp_pairs(*tile, dk)) + + for pair in ref_pairs: + if pair not in math_pairs: + missing.append((tile, pair)) + + if missing: + lines = [f" tile={t} pair={p}" for t, p in missing] + self.fail( + f"{len(missing)} reference pairs not generated by math:\n" + + "\n".join(lines) + ) + + # --- Structural validity of math output --- + + def test_no_invalid_wave_combos(self): + """Every wave combo returned must be in WARP_SUPPORTED_COMBINATIONS for gfx942.""" + valid_waves = {tuple(c) for c in WARP_SUPPORTED_COMBINATIONS["gfx942"]} + tile = (128, 64, 32) + for wave, _warp in get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32"): + self.assertIn( + wave, valid_waves, + f"Wave combo {wave} not in gfx942 supported combinations", + ) + + def test_no_invalid_wave_combos_all_tiles(self): + """All tiles in reference table: every returned wave must be arch-valid.""" + valid_waves = {tuple(c) for c in WARP_SUPPORTED_COMBINATIONS["gfx942"]} + for tile in TILE_TO_WAVE_WARP: + for wave, _warp in get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32"): + self.assertIn( + wave, valid_waves, + f"tile={tile}: wave {wave} not in gfx942 supported combinations", + ) + + def test_tile_divisibility_enforced(self): + """A tile not divisible by any warp_tile_m must return no pairs.""" + # (13, 17, 32) — prime dimensions, won't divide any MFMA shape + pairs = get_valid_wave_warp_pairs(13, 17, 32, "bf16_bf16_fp32") + self.assertEqual(pairs, [], "Expected no pairs for prime-dimension tile") + + def test_warp_tile_divides_tile_m_and_n(self): + """For every returned pair, warp_tile_m | tile_m and warp_tile_n | tile_n.""" + for tile in TILE_TO_WAVE_WARP: + tm, tn, tk = tile + for _wave, (wt_m, wt_n, wt_k) in get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32"): + self.assertEqual(tm % wt_m, 0, f"tile_m={tm} not divisible by warp_m={wt_m}") + self.assertEqual(tn % wt_n, 0, f"tile_n={tn} not divisible by warp_n={wt_n}") + + # --- Special cases --- + + def test_wave_k2_special_case(self): + """(128,32,32) must produce the ((2,1,2), (32,32,8)) pair (wave_k=2).""" + tile = (128, 32, 32) + math_pairs = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32")) + expected = ((2, 1, 2), (32, 32, 8)) + self.assertIn( + expected, math_pairs, + f"Expected wave_k=2 pair {expected} not found for tile {tile}", + ) + + def test_pipeline_async_constraint(self): + """pipeline='basic_async_v1' must only return pairs with wave_n==2 and warp_tile_n==16.""" + tile = (64, 64, 32) + pairs = get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32", pipeline="basic_async_v1") + for wave, (wt_m, wt_n, wt_k) in pairs: + _wm, wn, _wk = wave + self.assertEqual(wn, 2, f"async pipeline: expected wave_n=2, got {wn}") + self.assertEqual(wt_n, 16, f"async pipeline: expected warp_tile_n=16, got {wt_n}") + + def test_no_duplicates(self): + """The returned list must not contain duplicate pairs.""" + for tile in list(TILE_TO_WAVE_WARP.keys()): + pairs = get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32") + self.assertEqual( + len(pairs), len(set(pairs)), + f"tile={tile}: duplicate pairs in result", + ) + + def test_gfx950_returns_superset_of_gfx942(self): + """gfx950 supports more wave combos, so it must return >= as many pairs as gfx942.""" + tile = (128, 64, 32) + pairs_942 = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32", arch="gfx942")) + pairs_950 = set(get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32", arch="gfx950")) + self.assertTrue( + pairs_942.issubset(pairs_950), + "gfx942 pairs should be a subset of gfx950 pairs", + ) + + +# ============================================================================= +# TestGetValidVecSizes +# ============================================================================= + +class TestGetValidVecSizes(unittest.TestCase): + """Tests for get_valid_vec_sizes().""" + + # --- Spot checks --- + + def test_spot_check_128_64_32_wave221_wt_32328(self): + """Reference vecs for (128,64,32) wave=(2,2,1) warp=(32,32,8) bf16.""" + vecs = get_valid_vec_sizes(128, 64, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32") + # Reference: [(1,1,8), (4,4,4), (8,8,8)] from _TILE_WTILK_TO_VECS[(128,64,32,8)] + ref = _TILE_WTILK_TO_VECS[(128, 64, 32, 8)] + math_set = set(vecs) + for v in ref: + self.assertIn(v, math_set, f"Reference vec {v} missing for (128,64,32) wave=(2,2,1)") + + def test_spot_check_64_64_32_wave111_wt_32328(self): + """Reference vecs for (64,64,32) wave=(1,1,1) warp=(32,32,8) bf16.""" + vecs = get_valid_vec_sizes(64, 64, 32, 1, 1, 1, 32, 32, 8, "bf16_bf16_fp32") + ref = _TILE_WTILK_TO_VECS[(64, 64, 32, 8)] + math_set = set(vecs) + for v in ref: + self.assertIn(v, math_set, f"Reference vec {v} missing for (64,64,32) wave=(1,1,1)") + + # --- Structural validity --- + + def test_pixel_budget_respected(self): + """vec_a/vec_b must be compatible with their pixel budget. + + Compatible means the vector divides the per-thread pixel budget OR is an + exact multiple of it (the wide load decomposes into v/pixels sub-loads). + """ + configs = [ + (128, 64, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32"), + (64, 64, 32, 1, 1, 1, 32, 32, 8, "bf16_bf16_fp32"), + (256, 128, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32"), + ] + for cfg in configs: + tm, tn, tk, wm, wn, wk, wt_m, wt_n, wt_k, dk = cfg + block_size = WARP_SIZE * wm * wn * wk + pixels_a = tm * tk // block_size + pixels_b = tn * tk // block_size + for va, vb, vc in get_valid_vec_sizes(*cfg): + self.assertTrue(pixels_a % va == 0 or va % pixels_a == 0, + f"cfg={cfg}: pixels_a={pixels_a} incompatible with vec_a={va}") + self.assertTrue(pixels_b % vb == 0 or vb % pixels_b == 0, + f"cfg={cfg}: pixels_b={pixels_b} incompatible with vec_b={vb}") + + def test_fp32_vec_c_8_admitted(self): + """fp32 tiles admit vec_c=8 (relaxed 32-byte ceiling). Category (A).""" + vecs = get_valid_vec_sizes(128, 128, 32, 2, 2, 1, 32, 32, 8, "fp32_fp32_fp32") + self.assertIn((4, 4, 8), set(vecs), + "fp32 (128,128,32) should admit vec triple (4,4,8)") + + def test_bf16_asymmetric_small_pixel_vec8(self): + """Asymmetric small-pixel tile admits a vec=8 triple. Category (B).""" + # (16,256,64) wave=(1,4,1): pixels_a = 16*64/256 = 4 < 8, but 8 % 4 == 0. + vecs = get_valid_vec_sizes(16, 256, 64, 1, 4, 1, 16, 16, 16, "bf16_bf16_fp32") + self.assertTrue(any(8 in (va, vb) for va, vb, vc in vecs), + "bf16 (16,256,64) wave=(1,4,1) should admit a vec=8 triple") + + def test_bf16_vec_c_capped_at_16(self): + """bf16 vec_c never exceeds 16 (LDS 256-bit ceiling still enforced).""" + for va, vb, vc in get_valid_vec_sizes(128, 128, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32"): + self.assertLessEqual(vc, 16, f"bf16: vec_c={vc} > 16") + + def test_lds_validity_bf16(self): + """All returned vecs must satisfy the power-of-2 bit-width constraint for bf16. + + Standard LDS allows 8–128 bits; some bwd_data global loads allow 256 bits. + The constraint is: bits = vec * sizeof * 8 must be a power of 2 up to 256. + """ + sizeof_bf16 = 2.0 + for va, vb, vc in get_valid_vec_sizes(128, 64, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32"): + for v in (va, vb, vc): + bits = int(v * sizeof_bf16 * 8) + self.assertGreater(bits, 0, f"vec={v}: bits must be > 0") + self.assertLessEqual(bits, 256, f"vec={v}: bits={bits} > 256") + self.assertEqual(bits & (bits - 1), 0, f"vec={v}: bits={bits} not power of 2") + + def test_dtype_max_vec_fp32(self): + """For fp32, vec_a and vec_b must be <= 8 (32 bytes / 4 bytes, allowing 2×16-byte loads).""" + for va, vb, vc in get_valid_vec_sizes(128, 64, 32, 2, 2, 1, 32, 32, 4, "fp32_fp32_fp32"): + self.assertLessEqual(va, 8, f"fp32: vec_a={va} > 8") + self.assertLessEqual(vb, 8, f"fp32: vec_b={vb} > 8") + + def test_dtype_max_vec_bf16(self): + """For bf16, vec_a and vec_b must be <= 16 (32 bytes / 2 bytes per element).""" + for va, vb, vc in get_valid_vec_sizes(128, 64, 32, 2, 2, 1, 32, 32, 8, "bf16_bf16_fp32"): + self.assertLessEqual(va, 16, f"bf16: vec_a={va} > 16") + self.assertLessEqual(vb, 16, f"bf16: vec_b={vb} > 16") + + def test_vec_c_divisibility(self): + """tile_n must be divisible by vec_c (output is vectorized along N).""" + tile_n = 64 + wave_n = 2 + warp_tile_n = 16 + for va, vb, vc in get_valid_vec_sizes( + 128, tile_n, 32, 2, wave_n, 1, 16, warp_tile_n, 16, "bf16_bf16_fp32" + ): + self.assertEqual( + tile_n % vc, 0, + f"tile_n={tile_n} not divisible by vec_c={vc}", + ) + + def test_empty_result_for_non_divisible_block(self): + """If tile_m * tile_k is not divisible by block_size, return [].""" + # tile_m=13 (prime) → pixels_a won't be integer → expect empty + result = get_valid_vec_sizes(13, 16, 32, 1, 1, 1, 16, 16, 16, "bf16_bf16_fp32") + self.assertEqual(result, []) + + +# ============================================================================= +# TestGetVecSizesForWaveWarp (wrapper) +# ============================================================================= + +class TestGetVecSizesForWaveWarp(unittest.TestCase): + """Tests for the get_vec_sizes_for_wave_warp() convenience wrapper.""" + + def test_spot_check_128_64_32_wt8(self): + """Reference vecs for (128,64,32,8) in _TILE_WTILK_TO_VECS must all appear.""" + ref = _TILE_WTILK_TO_VECS[(128, 64, 32, 8)] + math_set = set(get_vec_sizes_for_wave_warp(128, 64, 32, 8, "bf16_bf16_fp32")) + for v in ref: + self.assertIn(v, math_set, + f"Reference vec {v} missing from get_vec_sizes_for_wave_warp(128,64,32,8)") + + def test_spot_check_64_64_32_wt8(self): + """Reference vecs for (64,64,32,8) in _TILE_WTILK_TO_VECS must all appear.""" + ref = _TILE_WTILK_TO_VECS[(64, 64, 32, 8)] + math_set = set(get_vec_sizes_for_wave_warp(64, 64, 32, 8, "bf16_bf16_fp32")) + for v in ref: + self.assertIn(v, math_set, + f"Reference vec {v} missing from get_vec_sizes_for_wave_warp(64,64,32,8)") + + def test_result_is_sorted(self): + """Returned list must be in sorted order.""" + result = get_vec_sizes_for_wave_warp(128, 64, 32, 8, "bf16_bf16_fp32") + self.assertEqual(result, sorted(result)) + + def test_no_duplicates(self): + """Returned list must not contain duplicates.""" + result = get_vec_sizes_for_wave_warp(128, 64, 32, 8, "bf16_bf16_fp32") + self.assertEqual(len(result), len(set(result))) + + +# ============================================================================= +# TestMathVsReferenceStatistics — coverage tests (the key correctness tests) +# ============================================================================= + +# Map warp_tile_k → dtype_keys to try when verifying _TILE_WTILK_TO_VECS +# Derived from warp_gemm_dispatcher.hpp; we try all plausible dtypes per warp_tile_k. +_DTYPE_KEYS_ALL = ["bf16_bf16_fp32", "fp32_fp32_fp32", "fp16_fp16_fp32", "fp8_fp8_fp32"] + + +class TestMathVsReferenceStatistics(unittest.TestCase): + """Comprehensive coverage: math must generate >= all reference entries.""" + + def test_wave_warp_no_false_negatives(self): + """TILE_TO_WAVE_WARP: every reference pair must be in the math output. + + The math is queried with multiple dtype_keys and the union must cover + every reference pair. This guarantees zero false negatives. + """ + missing = [] + for tile, ref_pairs in TILE_TO_WAVE_WARP.items(): + math_pairs: set = set() + for dk in _DTYPE_KEYS_ALL: + math_pairs |= set(get_valid_wave_warp_pairs(*tile, dk)) + for pair in ref_pairs: + if pair not in math_pairs: + missing.append((tile, pair)) + + if missing: + lines = [f" tile={t} pair={p}" for t, p in missing[:20]] + self.fail( + f"{len(missing)} reference wave/warp pairs not generated by math " + f"(showing first 20):\n" + "\n".join(lines) + ) + + def test_vec_no_false_negatives(self): + """_TILE_WTILK_TO_VECS: every reference vec must be in the math output. + + For each (tile_m, tile_n, tile_k, warp_tile_k) key, the math is queried + with all plausible dtype_keys (inferred from warp_tile_k) and the union + must contain every reference vec triple. + """ + missing = [] + for (tm, tn, tk, wtk), ref_vecs in _TILE_WTILK_TO_VECS.items(): + dtype_keys = dtype_keys_for_warp_tile_k(wtk) + if not dtype_keys: + dtype_keys = _DTYPE_KEYS_ALL # fallback: try all + + math_vecs: set = set() + for dk in dtype_keys: + math_vecs |= set(get_vec_sizes_for_wave_warp(tm, tn, tk, wtk, dk)) + + for v in ref_vecs: + if v not in math_vecs: + missing.append(((tm, tn, tk, wtk), v)) + + if missing: + lines = [f" key={k} vec={v}" for k, v in missing[:30]] + self.fail( + f"{len(missing)} reference vec triples not generated by math " + f"(showing first 30):\n" + "\n".join(lines) + ) + + def test_extra_wave_warp_pairs_are_structurally_valid(self): + """Pairs the math generates but reference doesn't have must still be valid. + + Extra pairs are not failures — they represent valid configs not yet in + the JSON profiler files. But they must satisfy structural constraints. + """ + valid_waves = {tuple(c) for c in WARP_SUPPORTED_COMBINATIONS["gfx942"]} + invalid_extras = [] + + for tile in TILE_TO_WAVE_WARP: + ref_set = set(TILE_TO_WAVE_WARP[tile]) + math_pairs = get_valid_wave_warp_pairs(*tile, "bf16_bf16_fp32") + extras = [p for p in math_pairs if p not in ref_set] + for wave, (wt_m, wt_n, wt_k) in extras: + tm, tn, _tk = tile + # Wave must be arch-valid + if wave not in valid_waves: + invalid_extras.append((tile, wave, "not in arch wave combos")) + # Tile must be divisible by warp tile + elif tm % wt_m != 0 or tn % wt_n != 0: + invalid_extras.append((tile, (wt_m, wt_n, wt_k), "divisibility violated")) + + if invalid_extras: + lines = [f" {e}" for e in invalid_extras[:10]] + self.fail( + f"{len(invalid_extras)} extra pairs are structurally invalid:\n" + + "\n".join(lines) + ) + + def test_coverage_rate_wave_warp(self): + """Log coverage statistics for TILE_TO_WAVE_WARP (informational).""" + total = 0 + covered = 0 + for tile, ref_pairs in TILE_TO_WAVE_WARP.items(): + math_pairs: set = set() + for dk in _DTYPE_KEYS_ALL: + math_pairs |= set(get_valid_wave_warp_pairs(*tile, dk)) + for pair in ref_pairs: + total += 1 + if pair in math_pairs: + covered += 1 + rate = covered / total * 100 if total else 0 + print(f"\n[wave/warp coverage] {covered}/{total} = {rate:.1f}%") + self.assertEqual(covered, total, f"Coverage {rate:.1f}% < 100%") + + def test_coverage_rate_vec(self): + """Log coverage statistics for _TILE_WTILK_TO_VECS (informational).""" + total = 0 + covered = 0 + for (tm, tn, tk, wtk), ref_vecs in _TILE_WTILK_TO_VECS.items(): + dtype_keys = dtype_keys_for_warp_tile_k(wtk) or _DTYPE_KEYS_ALL + math_vecs: set = set() + for dk in dtype_keys: + math_vecs |= set(get_vec_sizes_for_wave_warp(tm, tn, tk, wtk, dk)) + for v in ref_vecs: + total += 1 + if v in math_vecs: + covered += 1 + rate = covered / total * 100 if total else 0 + print(f"\n[vec coverage] {covered}/{total} = {rate:.1f}%") + self.assertEqual(covered, total, f"Vec coverage {rate:.1f}% < 100%") + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/docs/conceptual/ck_tile/adaptors.rst b/docs/conceptual/ck_tile/adaptors.rst index 8720199eab6..de71c405a71 100644 --- a/docs/conceptual/ck_tile/adaptors.rst +++ b/docs/conceptual/ck_tile/adaptors.rst @@ -15,50 +15,28 @@ TensorAdaptor Basics A TensorAdaptor encapsulates a sequence of :ref:`coordinate transformations `, managing the flow of coordinates through multiple transform stages: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Adaptor Composition" - subgraph "Single Transform" - direction TB - I1["Input Coords
[0,1,2]"] - T1["Transform
(e.g., Transpose)"] - O1["Output Coords
[2,0,1]"] - I1 --> T1 --> O1 - end - - subgraph "Chained Transforms" - direction TB - I2["Input
2D"] - T2A["Transform A
(e.g., Merge)"] - M2["Intermediate
1D"] - T2B["Transform B
(e.g., Pad)"] - O2["Output
1D Padded"] - I2 --> T2A --> M2 --> T2B --> O2 - end - end - - style T1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style T2A fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style T2B fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - - -.. image:: diagrams/adaptors_1.svg - :alt: Diagram - :align: center - -.. image:: diagrams/adaptors_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Adaptor Composition" + subgraph "Single Transform" + direction TB + I1["Input Coords
[0,1,2]"] + T1["Transform
(e.g., Transpose)"] + O1["Output Coords
[2,0,1]"] + I1 --> T1 --> O1 + end + + subgraph "Chained Transforms" + direction TB + I2["Input
2D"] + T2A["Transform A
(e.g., Merge)"] + M2["Intermediate
1D"] + T2B["Transform B
(e.g., Pad)"] + O2["Output
1D Padded"] + I2 --> T2A --> M2 --> T2B --> O2 + end + end Core Components ~~~~~~~~~~~~~~~ @@ -125,59 +103,36 @@ Chaining Adaptors: Building Complex Transformations The real power of adaptors comes from chaining multiple transformations together to create advanced data access patterns: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Adaptor Chaining Flow" - subgraph "Adaptor 1" - A1I["Bottom Dims
[0,1]"] - A1T["Transform:
Merge[2,3]"] - A1O["Top Dims
[0]"] - end - - subgraph "Adaptor 2" - A2I["Bottom Dims
[0]"] - A2T["Transform:
Unmerge[2,3]"] - A2O["Top Dims
[0,1]"] - end - - subgraph "Chained Result" - CI["Input 2D
Bottom[0,1]"] - CO["Output 2D
Top[0,1]"] - end - end - - A1I --> A1T - A1T --> A1O - A1O --> A2I - A2I --> A2T - A2T --> A2O - - CI --> A1I - A2O --> CO - - style A1T fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style A2T fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style CI fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style CO fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - -.. image:: diagrams/adaptors_2.svg - :alt: Diagram - :align: center - -.. image:: diagrams/adaptors_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Adaptor Chaining Flow" + subgraph "Adaptor 1" + A1I["Bottom Dims
[0,1]"] + A1T["Transform:
Merge[2,3]"] + A1O["Top Dims
[0]"] + end + + subgraph "Adaptor 2" + A2I["Bottom Dims
[0]"] + A2T["Transform:
Unmerge[2,3]"] + A2O["Top Dims
[0,1]"] + end + + subgraph "Chained Result" + CI["Input 2D
Bottom[0,1]"] + CO["Output 2D
Top[0,1]"] + end + end + + A1I --> A1T + A1T --> A1O + A1O --> A2I + A2I --> A2T + A2T --> A2O + + CI --> A1I + A2O --> CO .. code-block:: cpp diff --git a/docs/conceptual/ck_tile/buffer_views.rst b/docs/conceptual/ck_tile/buffer_views.rst index ca574724ab6..3ec7aeb88c3 100644 --- a/docs/conceptual/ck_tile/buffer_views.rst +++ b/docs/conceptual/ck_tile/buffer_views.rst @@ -24,53 +24,32 @@ Memory coherence and caching policies represent another layer of complexity that Address Space Usage Patterns ---------------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart TB - subgraph CF ["Compute Flow"] - direction LR - GM1["Global Memory
Input Data"] --> LDS["LDS
Tile Cache"] - LDS --> VGPR["VGPR
Working Set"] - VGPR --> Compute["Compute
Operations"] - Compute --> VGPR - VGPR --> LDS2["LDS
Reduction"] - LDS2 --> GM2["Global Memory
Output Data"] - end - - subgraph UP ["Usage Pattern"] - direction LR - P1["1. Load tile from Global → LDS"] - P2["2. Load working set LDS → VGPR"] - P3["3. Compute in VGPR"] - P4["4. Store results VGPR → LDS"] - P5["5. Reduce in LDS"] - P6["6. Write final LDS → Global"] - - P1 --> P2 --> P3 --> P4 --> P5 --> P6 - end - - CF ~~~ UP - - style GM1 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style LDS fill:#fed7aa,stroke:#f59e0b,stroke-width:2px - style VGPR fill:#d1fae5,stroke:#10b981,stroke-width:2px - style Compute fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - - - - - - -.. image:: diagrams/buffer_views_1.svg - :alt: Diagram - :align: center - +.. mermaid:: + + flowchart TB + subgraph CF ["Compute Flow"] + direction LR + GM1["Global Memory
Input Data"] --> LDS["LDS
Tile Cache"] + LDS --> VGPR["VGPR
Working Set"] + VGPR --> Compute["Compute
Operations"] + Compute --> VGPR + VGPR --> LDS2["LDS
Reduction"] + LDS2 --> GM2["Global Memory
Output Data"] + end + + subgraph UP ["Usage Pattern"] + direction LR + P1["1. Load tile from Global → LDS"] + P2["2. Load working set LDS → VGPR"] + P3["3. Compute in VGPR"] + P4["4. Store results VGPR → LDS"] + P5["5. Reduce in LDS"] + P6["6. Write final LDS → Global"] + + P1 --> P2 --> P3 --> P4 --> P5 --> P6 + end + + CF ~~~ UP C++ Implementation ------------------ @@ -190,101 +169,59 @@ The implementation of vector access maintains the same parameter structure as sc Scalar vs Vectorized Memory Access ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Scalar Access (4 instructions)" - S1["Load float[0]"] --> R1["Register 1"] - S2["Load float[1]"] --> R2["Register 2"] - S3["Load float[2]"] --> R3["Register 3"] - S4["Load float[3]"] --> R4["Register 4"] - end - - subgraph "Vectorized Access (1 instruction)" - V1["Load float4[0]"] --> VR["Vector Register
(4 floats)"] - end - - subgraph "Performance Impact" - Perf["4x fewer instructions
Better memory bandwidth
Reduced latency"] - end - - R1 & R2 & R3 & R4 --> Perf - VR --> Perf - - style S1 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style S2 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style S3 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style S4 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style V1 fill:#d1fae5,stroke:#10b981,stroke-width:2px - style Perf fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - - - - - +.. mermaid:: + + graph LR + subgraph "Scalar Access (4 instructions)" + S1["Load float[0]"] --> R1["Register 1"] + S2["Load float[1]"] --> R2["Register 2"] + S3["Load float[2]"] --> R3["Register 3"] + S4["Load float[3]"] --> R4["Register 4"] + end + + subgraph "Vectorized Access (1 instruction)" + V1["Load float4[0]"] --> VR["Vector Register
(4 floats)"] + end -.. image:: diagrams/buffer_views_2.svg - :alt: Diagram - :align: center + subgraph "Performance Impact" + Perf["4x fewer instructions
Better memory bandwidth
Reduced latency"] + end + + R1 & R2 & R3 & R4 --> Perf + VR --> Perf Understanding BufferView Indexing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "Input Parameters" - Offset["Offset
(e.g., 5)"] - ValidFlag["Valid Flag
(optional)"] - end - - subgraph "Processing" - BoundsCheck{{"Bounds Check
offset < buffer_size?"}} - FlagCheck{{"Flag Check
valid_flag == True?"}} - Access["Access Memory
buffer[offset]"] - end - - subgraph "Output" - ValidResult["Valid Result
Return value"] - Invalid["Invalid Result
Return 0 or default"] - end - - Offset --> BoundsCheck - ValidFlag --> FlagCheck - - BoundsCheck -->|Yes| FlagCheck - BoundsCheck -->|No| Invalid - - FlagCheck -->|Yes| Access - FlagCheck -->|No| Invalid - - Access --> ValidResult - - style Offset fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style ValidFlag fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style ValidResult fill:#d1fae5,stroke:#10b981,stroke-width:2px - style Invalid fill:#fee2e2,stroke:#ef4444,stroke-width:2px - - - - - +.. mermaid:: + + flowchart LR + subgraph "Input Parameters" + Offset["Offset
(e.g., 5)"] + ValidFlag["Valid Flag
(optional)"] + end + + subgraph "Processing" + BoundsCheck{{"Bounds Check
offset < buffer_size?"}} + FlagCheck{{"Flag Check
valid_flag == True?"}} + Access["Access Memory
buffer[offset]"] + end -.. image:: diagrams/buffer_views_3.svg - :alt: Diagram - :align: center + subgraph "Output" + ValidResult["Valid Result
Return value"] + Invalid["Invalid Result
Return 0 or default"] + end + + Offset --> BoundsCheck + ValidFlag --> FlagCheck + + BoundsCheck -->|Yes| FlagCheck + BoundsCheck -->|No| Invalid + + FlagCheck -->|Yes| Access + FlagCheck -->|No| Invalid + + Access --> ValidResult C++ Get Operations ~~~~~~~~~~~~~~~~~~ @@ -381,40 +318,22 @@ Atomic Operations Atomic vs Non-Atomic Operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Non-Atomic Operation (Race Condition)" - NA1["Thread 1: Read value (10)"] --> NA2["Thread 1: Add 5 (15)"] - NA3["Thread 2: Read value (10)"] --> NA4["Thread 2: Add 3 (13)"] - NA2 --> NA5["Thread 1: Write 15"] - NA4 --> NA6["Thread 2: Write 13"] - NA5 & NA6 --> NA7["Final value: 13 ❌
(Lost update from Thread 1)"] - end - - subgraph "Atomic Operation (Thread-Safe)" - A1["Thread 1: atomic_add(5)"] --> A2["Hardware ensures
serialization"] - A3["Thread 2: atomic_add(3)"] --> A2 - A2 --> A4["Final value: 18 ✓
(Both updates applied)"] - end - - style NA7 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style A4 fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - - -.. image:: diagrams/buffer_views_4.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Non-Atomic Operation (Race Condition)" + NA1["Thread 1: Read value (10)"] --> NA2["Thread 1: Add 5 (15)"] + NA3["Thread 2: Read value (10)"] --> NA4["Thread 2: Add 3 (13)"] + NA2 --> NA5["Thread 1: Write 15"] + NA4 --> NA6["Thread 2: Write 13"] + NA5 & NA6 --> NA7["Final value: 13 ❌
(Lost update from Thread 1)"] + end + + subgraph "Atomic Operation (Thread-Safe)" + A1["Thread 1: atomic_add(5)"] --> A2["Hardware ensures
serialization"] + A3["Thread 2: atomic_add(3)"] --> A2 + A2 --> A4["Final value: 18 ✓
(Both updates applied)"] + end C++ Atomic Operations ~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/conceptual/ck_tile/convolution_example.rst b/docs/conceptual/ck_tile/convolution_example.rst index a857f9ae9e3..7dbd879bccf 100644 --- a/docs/conceptual/ck_tile/convolution_example.rst +++ b/docs/conceptual/ck_tile/convolution_example.rst @@ -15,53 +15,36 @@ This section covers how CK Tile's :ref:`tensor descriptor ` The key insight is that convolution can be transformed from a complex nested loop operation into a highly parallel matrix multiplication through the image to column (im2col) transformation. CK Tile's tensor descriptors provide the perfect abstraction for implementing this transformation efficiently without data duplication. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Convolution Process" - I["Input Image
6×6"] - K["Kernel
3×3"] - SW["Sliding Window
Extract 3×3 patches"] - DP["Dot Product
Element-wise multiply & sum"] - O["Output
4×4"] - end - - subgraph "Im2col Optimization" - W["Windows Matrix
16×9
(all patches)"] - KF["Kernel Flattened
9×1"] - MM["Matrix Multiply
W @ K"] - OF["Output Flattened
16×1"] - end - - I --> SW - K --> DP - SW --> DP - DP --> O - - SW --> W - K --> KF - W --> MM - KF --> MM - MM --> OF - OF --> O - - style I fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style O fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style MM fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - - -.. image:: diagrams/convolution_example.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Convolution Process" + I["Input Image
6×6"] + K["Kernel
3×3"] + SW["Sliding Window
Extract 3×3 patches"] + DP["Dot Product
Element-wise multiply & sum"] + O["Output
4×4"] + end + + subgraph "Im2col Optimization" + W["Windows Matrix
16×9
(all patches)"] + KF["Kernel Flattened
9×1"] + MM["Matrix Multiply
W @ K"] + OF["Output Flattened
16×1"] + end + + I --> SW + K --> DP + SW --> DP + DP --> O + + SW --> W + K --> KF + W --> MM + KF --> MM + MM --> OF + OF --> O + Understanding Sliding Windows ============================= diff --git a/docs/conceptual/ck_tile/coordinate_movement.rst b/docs/conceptual/ck_tile/coordinate_movement.rst index 73633afa884..b8c917ec4c7 100644 --- a/docs/conceptual/ck_tile/coordinate_movement.rst +++ b/docs/conceptual/ck_tile/coordinate_movement.rst @@ -17,51 +17,28 @@ The coordinate movement system provides two key abstractions: TensorCoordinate f For the mathematical foundations of coordinate systems, see :ref:`ck_tile_coordinate_systems`. For simpler coordinate concepts, see :ref:`ck_tile_tensor_coordinates`. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Coordinate Movement System" - TC["TensorCoordinate
Position + Descriptor Context"] - TAC["TensorAdaptorCoordinate
Position + Transform Context"] - MC["move_coordinate()
Efficient Navigation"] - end - - subgraph "Movement Example" - S["Start: [1,1]
Offset: 5"] - M1["Move [0,1]
→ [1,2]
Offset: 6"] - M2["Move [1,0]
→ [2,2]
Offset: 10"] - M3["Move [1,1]
→ [3,3]
Offset: 15"] - end - - TC --> MC - TAC --> MC - - S --> M1 - M1 --> M2 - M2 --> M3 - - style TC fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style TAC fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style MC fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_movement.svg - :alt: Diagram - :align: center - -.. image:: diagrams/coordinate_movement.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Coordinate Movement System" + TC["TensorCoordinate
Position + Descriptor Context"] + TAC["TensorAdaptorCoordinate
Position + Transform Context"] + MC["move_coordinate()
Efficient Navigation"] + end + + subgraph "Movement Example" + S["Start: [1,1]
Offset: 5"] + M1["Move [0,1]
→ [1,2]
Offset: 6"] + M2["Move [1,0]
→ [2,2]
Offset: 10"] + M3["Move [1,1]
→ [3,3]
Offset: 15"] + end + + TC --> MC + TAC --> MC + + S --> M1 + M1 --> M2 + M2 --> M3 TensorCoordinate: Descriptor-Aware Navigation ============================================= diff --git a/docs/conceptual/ck_tile/coordinate_systems.rst b/docs/conceptual/ck_tile/coordinate_systems.rst index 13a96190108..bca3a605e0e 100644 --- a/docs/conceptual/ck_tile/coordinate_systems.rst +++ b/docs/conceptual/ck_tile/coordinate_systems.rst @@ -15,51 +15,30 @@ The Five Coordinate Spaces The CK framework employs five interconnected coordinate spaces, each serving a specific purpose in the journey from thread identification to memory access. These spaces work together to solve the fundamental challenge of GPU programming: efficiently distributing work across thousands of parallel threads while maintaining optimal memory access patterns. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Coordinate Spaces Overview" - P["P-space
Thread Identification
Which thread am I?"] - Y["Y-space
Logical Tile
Which element in my tile?"] - X["X-space
Physical Tensor
Where in the tensor?"] - R["R-space
Replication
Data sharing pattern"] - D["D-space
Linear Storage
Memory address"] - end - - subgraph "Transformations" - T1["P + Y → X
Thread + Element → Position"] - T2["X → D
Position → Address"] - end - - P --> T1 - Y --> T1 - T1 --> X - X --> T2 - T2 --> D - - R -.-> P - R -.-> Y - - style P fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style Y fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style R fill:#fce4ec,stroke:#c2185b,stroke-width:2px - style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_systems_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Coordinate Spaces Overview" + P["P-space
Thread Identification
Which thread am I?"] + Y["Y-space
Logical Tile
Which element in my tile?"] + X["X-space
Physical Tensor
Where in the tensor?"] + R["R-space
Replication
Data sharing pattern"] + D["D-space
Linear Storage
Memory address"] + end + + subgraph "Transformations" + T1["P + Y → X
Thread + Element → Position"] + T2["X → D
Position → Address"] + end + + P --> T1 + Y --> T1 + T1 --> X + X --> T2 + T2 --> D + + R -.-> P + R -.-> Y The Challenge and Solution ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -82,53 +61,35 @@ Partition Space (P-space) represents the foundation of the coordinate system hie GPU Thread Hierarchy ~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "GPU Thread Hierarchy" - subgraph "Block" - subgraph "Warp 0" - T0["Thread 0
P=[0,0]"] - T1["Thread 1
P=[0,1]"] - T2["Thread 2
P=[0,2]"] - T31["..."] - T3["Thread 31
P=[0,31]"] - end - subgraph "Warp 1" - T32["Thread 32
P=[1,0]"] - T33["Thread 33
P=[1,1]"] - T34["..."] - T63["Thread 63
P=[1,31]"] - end - W2["Warp 2..."] - W7["Warp 7"] - end - end - - subgraph "P-space Mapping" - PM["P-coordinates = [warp_id, lane_id]
or
P-coordinates = [block_x, block_y, thread_x, thread_y]"] - end - - T0 --> PM - T32 --> PM - - style T0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style T32 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_systems_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "GPU Thread Hierarchy" + subgraph "Block" + subgraph "Warp 0" + T0["Thread 0
P=[0,0]"] + T1["Thread 1
P=[0,1]"] + T2["Thread 2
P=[0,2]"] + T31["..."] + T3["Thread 31
P=[0,31]"] + end + subgraph "Warp 1" + T32["Thread 32
P=[1,0]"] + T33["Thread 33
P=[1,1]"] + T34["..."] + T63["Thread 63
P=[1,31]"] + end + W2["Warp 2..."] + W7["Warp 7"] + end + end + + subgraph "P-space Mapping" + PM["P-coordinates = [warp_id, lane_id]
or
P-coordinates = [block_x, block_y, thread_x, thread_y]"] + end + + T0 --> PM + T32 --> PM The structure of P-space directly reflects the :ref:`hardware organization ` of GPUs. Each thread receives a unique P-coordinate that encodes its position within the execution hierarchy. For simple distributions, P-space might be one-dimensional, containing only a thread ID. For complex hierarchical distributions, P-space can have multiple dimensions representing different levels of the GPU's thread organization. @@ -173,56 +134,36 @@ Yield Space (Y-space) represents the logical organization of work within each th Work Assignment Structure ~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Thread's Tile (2x2 elements)" - Y00["Y=[0,0]
Element 0"] - Y01["Y=[0,1]
Element 1"] - Y10["Y=[1,0]
Element 2"] - Y11["Y=[1,1]
Element 3"] - end - - subgraph "Y-space Structure" - YS["Each thread processes
the same Y-space pattern
but at different X locations"] - end - - subgraph "Example: 4 Threads" - T0["Thread 0
P=[0,0]"] - T1["Thread 1
P=[0,1]"] - T2["Thread 2
P=[1,0]"] - T3["Thread 3
P=[1,1]"] - end - - Y00 --> YS - Y01 --> YS - Y10 --> YS - Y11 --> YS - - T0 --> YS - T1 --> YS - T2 --> YS - T3 --> YS - - style Y00 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style Y01 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style Y10 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style Y11 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_systems_3.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Thread's Tile (2x2 elements)" + Y00["Y=[0,0]
Element 0"] + Y01["Y=[0,1]
Element 1"] + Y10["Y=[1,0]
Element 2"] + Y11["Y=[1,1]
Element 3"] + end + + subgraph "Y-space Structure" + YS["Each thread processes
the same Y-space pattern
but at different X locations"] + end + + subgraph "Example: 4 Threads" + T0["Thread 0
P=[0,0]"] + T1["Thread 1
P=[0,1]"] + T2["Thread 2
P=[1,0]"] + T3["Thread 3
P=[1,1]"] + end + + Y00 --> YS + Y01 --> YS + Y10 --> YS + Y11 --> YS + + T0 --> YS + T1 --> YS + T2 --> YS + T3 --> YS The power of Y-space lies in its ability to express different iteration patterns without changing the underlying distribution logic. A thread might traverse its Y-space in row-major order for one algorithm, column-major for another, or even use :ref:`space-filling curves ` for optimal cache utilization. This flexibility enables algorithm-specific optimizations while maintaining a consistent framework. @@ -304,49 +245,30 @@ The transformation from P and Y coordinates to X coordinates represents the hear Transformation Pipeline ~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Input" - P["P-coordinates
Thread identity
P=[1,0]"] - Y["Y-coordinates
Element in tile
Y=[0,1]"] - end - - subgraph "Transformation" - T["P + Y → X
Base position + Offset"] - end - - subgraph "Output" - X["X-coordinates
Tensor position
X=[2,1]"] - end - - subgraph "Example" - E["Thread P=[1,0] at base (2,0)
Element Y=[0,1] adds offset (0,1)
Result X=[2,1] in tensor"] - end - - P --> T - Y --> T - T --> X - X --> E - - style P fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style Y fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_systems_4.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Input" + P["P-coordinates
Thread identity
P=[1,0]"] + Y["Y-coordinates
Element in tile
Y=[0,1]"] + end + + subgraph "Transformation" + T["P + Y → X
Base position + Offset"] + end + + subgraph "Output" + X["X-coordinates
Tensor position
X=[2,1]"] + end + + subgraph "Example" + E["Thread P=[1,0] at base (2,0)
Element Y=[0,1] adds offset (0,1)
Result X=[2,1] in tensor"] + end + + P --> T + Y --> T + T --> X + X --> E Mathematical Foundation ~~~~~~~~~~~~~~~~~~~~~~~ @@ -413,45 +335,27 @@ D-space represents the final transformation in the coordinate pipeline: converti Linearization Strategies ~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "X-coordinates" - X["X = [2, 3]
2D Position"] - end - - subgraph "Layout Options" - RM["Row-Major
D = 2×width + 3"] - CM["Column-Major
D = 3×height + 2"] - BL["Blocked
Complex pattern"] - end - - subgraph "D-coordinate" - D["D = 11
Linear Address"] - end - - X --> RM - X --> CM - X --> BL - RM --> D - - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px - - - - - - -.. image:: diagrams/coordinate_systems_5.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "X-coordinates" + X["X = [2, 3]
2D Position"] + end + + subgraph "Layout Options" + RM["Row-Major
D = 2×width + 3"] + CM["Column-Major
D = 3×height + 2"] + BL["Blocked
Complex pattern"] + end + + subgraph "D-coordinate" + D["D = 11
Linear Address"] + end + + X --> RM + X --> CM + X --> BL + RM --> D The linearization process must consider multiple factors: @@ -482,58 +386,39 @@ Complete Pipeline Example The following is a complete example showing how all coordinate spaces work together: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Step 1: Thread Identification" - TID["Thread ID = 5"] - P["P-coordinates
P = [0, 5]
(warp 0, lane 5)"] - end - - subgraph "Step 2: Work Assignment" - Y["Y-coordinates
Y = [1, 0]
(element in tile)"] - end - - subgraph "Step 3: P+Y Transformation" - TRANS["P + Y → X
Thread position + Element offset"] - X["X-coordinates
X = [1, 5]
(tensor position)"] - end - - subgraph "Step 4: Linearization" - LIN["X → D
Row-major: D = x₀ × width + x₁"] - D["D-coordinate
D = 13
(memory address)"] - end - - subgraph "Step 5: Memory Access" - MEM["Hardware accesses
memory[13]"] - end - - TID --> P - P --> TRANS - Y --> TRANS - TRANS --> X - X --> LIN - LIN --> D - D --> MEM - - style P fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style Y fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:3px - style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px - style MEM fill:#ffebee,stroke:#c62828,stroke-width:3px - - - - -.. image:: diagrams/coordinate_systems_6.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Step 1: Thread Identification" + TID["Thread ID = 5"] + P["P-coordinates
P = [0, 5]
(warp 0, lane 5)"] + end + + subgraph "Step 2: Work Assignment" + Y["Y-coordinates
Y = [1, 0]
(element in tile)"] + end + + subgraph "Step 3: P+Y Transformation" + TRANS["P + Y → X
Thread position + Element offset"] + X["X-coordinates
X = [1, 5]
(tensor position)"] + end + + subgraph "Step 4: Linearization" + LIN["X → D
Row-major: D = x₀ × width + x₁"] + D["D-coordinate
D = 13
(memory address)"] + end + + subgraph "Step 5: Memory Access" + MEM["Hardware accesses
memory[13]"] + end + + TID --> P + P --> TRANS + Y --> TRANS + TRANS --> X + X --> LIN + LIN --> D + D --> MEM Real-World Example: Matrix Multiplication ----------------------------------------- diff --git a/docs/conceptual/ck_tile/descriptors.rst b/docs/conceptual/ck_tile/descriptors.rst index 449e7bc4b1a..6a028dffdd0 100644 --- a/docs/conceptual/ck_tile/descriptors.rst +++ b/docs/conceptual/ck_tile/descriptors.rst @@ -96,46 +96,28 @@ The Pipeline Concept Every TensorDescriptor in CK Tile can be thought of as a **transformation pipeline**. The functions above create the *first stage* of this pipeline, defining the initial :ref:`transformation ` that takes a simple, one-dimensional block of memory and presents it as a logical, multi-dimensional tensor view. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Pipeline Stages" - S1["Stage 1
Base Layout
[M, N]"] - S2["Stage 2
Transform
Unmerge"] - S3["Stage 3
New View
[M1, M2, N]"] - S4["Stage N
Final View
[...]"] - end - - subgraph "Same Data" - D["Physical Memory
No data movement"] - end - - S1 --> S2 - S2 --> S3 - S3 --> S4 - - S1 -.-> D - S2 -.-> D - S3 -.-> D - S4 -.-> D - - style D fill:#ffebee,stroke:#d32f2f,stroke-width:2px - style S1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style S3 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - -.. image:: diagrams/descriptors_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Pipeline Stages" + S1["Stage 1
Base Layout
[M, N]"] + S2["Stage 2
Transform
Unmerge"] + S3["Stage 3
New View
[M1, M2, N]"] + S4["Stage N
Final View
[...]"] + end + + subgraph "Same Data" + D["Physical Memory
No data movement"] + end + + S1 --> S2 + S2 --> S3 + S3 --> S4 -.. image:: diagrams/descriptors_1.svg - :alt: Diagram - :align: center + S1 -.-> D + S2 -.-> D + S3 -.-> D + S4 -.-> D The Initial Pipeline Stage ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -200,52 +182,32 @@ To get from [2, 6] to [2, 2, 3], we need: Analysis of the Final Pipeline ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Transform Pipeline" - T0["Transform 0
Base Unmerge
Input: [0]
Output: [1,2]"] - T1["Transform 1
PassThrough
Input: [1]
Output: [3]"] - T2["Transform 2
Unmerge
Input: [2]
Output: [4,5]"] - end - - subgraph "Hidden Dimensions" - H0["Hidden ID 0
Raw Buffer"] - H1["Hidden ID 1
Dim 0 (size 2)"] - H2["Hidden ID 2
Dim 1 (size 6)"] - H3["Hidden ID 3
Final Dim 0"] - H4["Hidden ID 4
Final Dim 1"] - H5["Hidden ID 5
Final Dim 2"] - end - - H0 --> T0 - T0 --> H1 - T0 --> H2 - H1 --> T1 - H2 --> T2 - T1 --> H3 - T2 --> H4 - T2 --> H5 - - style H0 fill:#ffebee,stroke:#d32f2f,stroke-width:2px - style H3 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style H4 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style H5 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - -.. image:: diagrams/descriptors_2.svg - :alt: Diagram - :align: center - -.. image:: diagrams/descriptors_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Transform Pipeline" + T0["Transform 0
Base Unmerge
Input: [0]
Output: [1,2]"] + T1["Transform 1
PassThrough
Input: [1]
Output: [3]"] + T2["Transform 2
Unmerge
Input: [2]
Output: [4,5]"] + end + + subgraph "Hidden Dimensions" + H0["Hidden ID 0
Raw Buffer"] + H1["Hidden ID 1
Dim 0 (size 2)"] + H2["Hidden ID 2
Dim 1 (size 6)"] + H3["Hidden ID 3
Final Dim 0"] + H4["Hidden ID 4
Final Dim 1"] + H5["Hidden ID 5
Final Dim 2"] + end + + H0 --> T0 + T0 --> H1 + T0 --> H2 + H1 --> T1 + H2 --> T2 + T1 --> H3 + T2 --> H4 + T2 --> H5 The pipeline now has three stages: diff --git a/docs/conceptual/ck_tile/encoding_internals.rst b/docs/conceptual/ck_tile/encoding_internals.rst index 499ec0bd4a0..1b64504e6f9 100644 --- a/docs/conceptual/ck_tile/encoding_internals.rst +++ b/docs/conceptual/ck_tile/encoding_internals.rst @@ -15,53 +15,39 @@ The tile distribution encoding system represents the core mathematical framework At its heart, the encoding system defines how multi-dimensional tensor data is distributed across GPU processing elements through a hierarchical decomposition scheme. By specifying relationships between different coordinate spaces of replication (R), hierarchical (H), partition (P), and yield (Y) dimension, the encoding provides a complete blueprint for data layout and access patterns that can be resolved entirely at compile time. This is the internal mechanism behind :ref:`ck_tile_tile_distribution`. See :ref:`ck_tile_coordinate_systems` for more information about coordinate spaces. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Encoding Components" - RS["R-space Lengths
Replication dimensions"] - HS["H-space Lengths
Hierarchical decomposition
[[2,2],[2,2]]"] - P2RH["P→RH Mappings
Thread to hierarchy
Major/Minor"] - Y2RH["Y→RH Mappings
Element to hierarchy
Major/Minor"] - end - - subgraph "Generated Components" - ADAPTOR["ps_ys_to_xs_adaptor
Coordinate transformer"] - DESC["ys_to_d_descriptor
Memory linearizer"] - ENC["Encoding
Original specification"] - end - - subgraph "Transformation Chain" - T1["Replicate
Transform"] - T2["Unmerge
Transform"] - T3["Merge
Transform"] - end - - RS --> T1 - HS --> T2 - P2RH --> ADAPTOR - Y2RH --> ADAPTOR - - T1 --> T2 - T2 --> T3 - T3 --> ADAPTOR - - HS --> DESC - Y2RH --> DESC - - style RS fill:#fce4ec,stroke:#c2185b,stroke-width:2px - style HS fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style ADAPTOR fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style DESC fill:#fff3e0,stroke:#f57c00,stroke-width:3px - - - -.. image:: diagrams/encoding_internals_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Encoding Components" + RS["R-space Lengths
Replication dimensions"] + HS["H-space Lengths
Hierarchical decomposition
[[2,2],[2,2]]"] + P2RH["P→RH Mappings
Thread to hierarchy
Major/Minor"] + Y2RH["Y→RH Mappings
Element to hierarchy
Major/Minor"] + end + + subgraph "Generated Components" + ADAPTOR["ps_ys_to_xs_adaptor
Coordinate transformer"] + DESC["ys_to_d_descriptor
Memory linearizer"] + ENC["Encoding
Original specification"] + end + + subgraph "Transformation Chain" + T1["Replicate
Transform"] + T2["Unmerge
Transform"] + T3["Merge
Transform"] + end + + RS --> T1 + HS --> T2 + P2RH --> ADAPTOR + Y2RH --> ADAPTOR + + T1 --> T2 + T2 --> T3 + T3 --> ADAPTOR + + HS --> DESC + Y2RH --> DESC Encoding Structure ================== @@ -203,44 +189,31 @@ Transformation Pipeline The encoding generates a transformation pipeline that converts coordinates using the concepts from :ref:`ck_tile_transforms` and :ref:`ck_tile_adaptors`: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "Input Coordinates" - P["P-coordinates
[warp_id, lane_id]"] - Y["Y-coordinates
[y0, y1, y2, y3]"] - end - - subgraph "Transformation Pipeline" - C1["Combine P+Y"] - T1["Replicate
Transform
(if R-dims exist)"] - T2["Unmerge
Transform
(break into H-dims)"] - T3["Merge
Transform
(combine to X-dims)"] - end - - subgraph "Output" - X["X-coordinates
[x0, x1]
Tensor position"] - end - - P --> C1 - Y --> C1 - C1 --> T1 - T1 --> T2 - T2 --> T3 - T3 --> X - - style P fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style Y fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - -.. image:: diagrams/encoding_internals_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart LR + subgraph "Input Coordinates" + P["P-coordinates
[warp_id, lane_id]"] + Y["Y-coordinates
[y0, y1, y2, y3]"] + end + + subgraph "Transformation Pipeline" + C1["Combine P+Y"] + T1["Replicate
Transform
(if R-dims exist)"] + T2["Unmerge
Transform
(break into H-dims)"] + T3["Merge
Transform
(combine to X-dims)"] + end + + subgraph "Output" + X["X-coordinates
[x0, x1]
Tensor position"] + end + + P --> C1 + Y --> C1 + C1 --> T1 + T1 --> T2 + T2 --> T3 + T3 --> X Building the Transformation Chain --------------------------------- diff --git a/docs/conceptual/ck_tile/introduction_motivation.rst b/docs/conceptual/ck_tile/introduction_motivation.rst index a939aef4c85..33550e49d09 100644 --- a/docs/conceptual/ck_tile/introduction_motivation.rst +++ b/docs/conceptual/ck_tile/introduction_motivation.rst @@ -17,81 +17,62 @@ In this introduction, we establish the fundamental problems that tile distributi The GPU Memory Problem ---------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Random Access Pattern (Inefficient)" - subgraph "Threads" - T0_R["Thread 0"] - T1_R["Thread 1"] - T2_R["Thread 2"] - T3_R["Thread 3"] - end - - subgraph "Memory" - M0["Mem[0]"] - M7["Mem[7]"] - M15["Mem[15]"] - M23["Mem[23]"] - M31["Mem[31]"] - M39["Mem[39]"] - M47["Mem[47]"] - M55["Mem[55]"] - end - - T0_R -.-> M23 - T1_R -.-> M7 - T2_R -.-> M47 - T3_R -.-> M15 - end - - subgraph "Tile Distribution Pattern (Efficient)" - subgraph "Threads_TD" - T0_TD["Thread 0"] - T1_TD["Thread 1"] - T2_TD["Thread 2"] - T3_TD["Thread 3"] - end - - subgraph "Memory_TD" - M0_TD["Mem[0]"] - M1_TD["Mem[1]"] - M2_TD["Mem[2]"] - M3_TD["Mem[3]"] - M4_TD["Mem[4]"] - M5_TD["Mem[5]"] - M6_TD["Mem[6]"] - M7_TD["Mem[7]"] - end - - T0_TD --> M0_TD - T0_TD --> M1_TD - T1_TD --> M2_TD - T1_TD --> M3_TD - T2_TD --> M4_TD - T2_TD --> M5_TD - T3_TD --> M6_TD - T3_TD --> M7_TD - end - - style T0_R fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style T1_R fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style T2_R fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style T3_R fill:#fee2e2,stroke:#ef4444,stroke-width:2px - - style T0_TD fill:#d1fae5,stroke:#10b981,stroke-width:2px - style T1_TD fill:#d1fae5,stroke:#10b981,stroke-width:2px - style T2_TD fill:#d1fae5,stroke:#10b981,stroke-width:2px - style T3_TD fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - -.. image:: diagrams/introduction_motivation_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Random Access Pattern (Inefficient)" + subgraph "Threads" + T0_R["Thread 0"] + T1_R["Thread 1"] + T2_R["Thread 2"] + T3_R["Thread 3"] + end + + subgraph "Memory" + M0["Mem[0]"] + M7["Mem[7]"] + M15["Mem[15]"] + M23["Mem[23]"] + M31["Mem[31]"] + M39["Mem[39]"] + M47["Mem[47]"] + M55["Mem[55]"] + end + + T0_R -.-> M23 + T1_R -.-> M7 + T2_R -.-> M47 + T3_R -.-> M15 + end + + subgraph "Tile Distribution Pattern (Efficient)" + subgraph "Threads_TD" + T0_TD["Thread 0"] + T1_TD["Thread 1"] + T2_TD["Thread 2"] + T3_TD["Thread 3"] + end + + subgraph "Memory_TD" + M0_TD["Mem[0]"] + M1_TD["Mem[1]"] + M2_TD["Mem[2]"] + M3_TD["Mem[3]"] + M4_TD["Mem[4]"] + M5_TD["Mem[5]"] + M6_TD["Mem[6]"] + M7_TD["Mem[7]"] + end + + T0_TD --> M0_TD + T0_TD --> M1_TD + T1_TD --> M2_TD + T1_TD --> M3_TD + T2_TD --> M4_TD + T2_TD --> M5_TD + T3_TD --> M6_TD + T3_TD --> M7_TD + end Why Random Memory Access is Slow ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -216,42 +197,26 @@ The Coordinate Mapping Insight At the heart of tile distribution lies a profound mathematical insight: efficient GPU computation requires a systematic framework for mapping between different coordinate spaces. This framework transforms the complex problem of thread-to-data assignment into a series of well-defined mathematical transformations, each serving a specific purpose in the journey from abstract algorithm to concrete hardware execution. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Coordinate Spaces" - P["P-space
Thread Position
(thread_x, thread_y,
warp_id, block_id)"] - Y["Y-space
Local Data
(y0, y1, y2, y3)"] - X["X-space
Global Position
(x0, x1)"] - D["D-space
Memory Address
(linearized)"] - end - - subgraph "Transformations" - T1["P + Y → X
Thread data mapping"] - T2["X → D
Memory linearization"] - end - - P --> T1 - Y --> T1 - T1 --> X - X --> T2 - T2 --> D - - style P fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style Y fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style X fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px - style T1 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - style T2 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - - - -.. image:: diagrams/introduction_motivation_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Coordinate Spaces" + P["P-space
Thread Position
(thread_x, thread_y,
warp_id, block_id)"] + Y["Y-space
Local Data
(y0, y1, y2, y3)"] + X["X-space
Global Position
(x0, x1)"] + D["D-space
Memory Address
(linearized)"] + end + + subgraph "Transformations" + T1["P + Y → X
Thread data mapping"] + T2["X → D
Memory linearization"] + end + + P --> T1 + Y --> T1 + T1 --> X + X --> T2 + T2 --> D The elegance of this approach emerges from its separation of concerns. Each coordinate space represents a distinct aspect of the computation, and the transformations between them encapsulate specific optimization strategies. This separation allows developers to reason about their algorithms in natural terms while the framework handles the complex mapping to efficient hardware execution patterns. diff --git a/docs/conceptual/ck_tile/lds_index_swapping.rst b/docs/conceptual/ck_tile/lds_index_swapping.rst index b0a2b320100..f0d47494a47 100644 --- a/docs/conceptual/ck_tile/lds_index_swapping.rst +++ b/docs/conceptual/ck_tile/lds_index_swapping.rst @@ -25,48 +25,31 @@ Step 1: XOR Transform The original K coordinate is split into K0 and K1, where K1 represents the thread vector size along the K dimension (KPack) and K0 is KPerBlock/KPack. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "3D LDS coordinate [K0, M, K1]" - K0["KPerBlock/KPack * MLdsLayer
K0"] - M["MPerBlock/MLdsLayer
M"] - K1["KPack
K1"] - end - - subgraph "XOR Transform" - XT["make_xor_transform"] - end - - subgraph "Update K0 with XOR transformation" - K01["KPerBlock/KPack * MLdsLayer
K0'"] - M1["MPerBlock/MLdsLayer
M"] - K11["KPack
K1"] - end - - K0 --> XT - M --> XT - K1 --> K11 - - XT --> K01 - XT --> M1 - - style K0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style K01 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style M fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style M1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - - style K1 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style K11 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - -.. image:: diagrams/lds_index_swapping_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "3D LDS coordinate [K0, M, K1]" + K0["KPerBlock/KPack * MLdsLayer
K0"] + M["MPerBlock/MLdsLayer
M"] + K1["KPack
K1"] + end + + subgraph "XOR Transform" + XT["make_xor_transform"] + end + + subgraph "Update K0 with XOR transformation" + K01["KPerBlock/KPack * MLdsLayer
K0'"] + M1["MPerBlock/MLdsLayer
M"] + K11["KPack
K1"] + end + + K0 --> XT + M --> XT + K1 --> K11 + + XT --> K01 + XT --> M1 The XOR transformation updates the K0 coordinate using the formula: @@ -81,54 +64,33 @@ Step 2: Unmerge Transform The transformed K0' is split into L and K0'' components, creating an intermediate 4D coordinate space. This is necessary when MLdsLayer > 1, allowing multiple rows to share the same set of memory banks for better utilization with smaller tile sizes. - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "3D LDS coordinate [K0', M, K1]" - K0["KPerBlock/KPack * MLdsLayer
K0'"] - M["MPerBlock/MLdsLayer
M"] - K1["KPack
K1"] - end - - subgraph "Unmerge into 2 components" - UM["make_unmerge_transform"] - end - - subgraph "4D intermediate transformation space" - L["MLdsLayer
L"] - M1["MPerBlock/MLdsLayer
M"] - K01["KPerBlock/KPack
K0''"] - K11["KPack
K1"] - end - - K0 --> UM - M --> M1 - K1 --> K11 - - UM --> L - UM --> K01 - - style K0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style L fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style K01 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - - style M fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style M1 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - style K1 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style K11 fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - - -.. image:: diagrams/lds_index_swapping_2.svg - :alt: Diagram - :align: center + +.. mermaid:: + + graph TB + subgraph "3D LDS coordinate [K0', M, K1]" + K0["KPerBlock/KPack * MLdsLayer
K0'"] + M["MPerBlock/MLdsLayer
M"] + K1["KPack
K1"] + end + + subgraph "Unmerge into 2 components" + UM["make_unmerge_transform"] + end + + subgraph "4D intermediate transformation space" + L["MLdsLayer
L"] + M1["MPerBlock/MLdsLayer
M"] + K01["KPerBlock/KPack
K0''"] + K11["KPack
K1"] + end + + K0 --> UM + M --> M1 + K1 --> K11 + + UM --> L + UM --> K01 The unmerge operation: @@ -144,56 +106,38 @@ Step 3: Merge Transform The final step merges the 4D coordinates back into 2D transformed coordinates (M', K'). - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "4D LDS Coordinates [L, M, K0'', K1]" - L["MLdsLayer
L"] - M1["MPerBlock/MLdsLayer
M"] - K0["KPerBlock/KPack
K0''"] - K1["KPack
K1"] - end - - subgraph "Merge into 1 component" - ME0["make_merge_transform"] - end - - subgraph "Merge into 1 component" - ME1["make_merge_transform"] - end - - subgraph "Transformed 2D coordinates [M', K']" - M11["MPerBlock
M'"] - K01["KPerBlock
K'"] - end - - L --> ME0 - M1 --> ME0 - - K0 --> ME1 - K1 --> ME1 - - ME0 --> M11 - ME1 --> K01 - - style K0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style K1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style K01 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - - style M1 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style L fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style M11 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - -.. image:: diagrams/lds_index_swapping_3.svg - :alt: Diagram - :align: center + +.. mermaid:: + + graph TB + subgraph "4D LDS Coordinates [L, M, K0'', K1]" + L["MLdsLayer
L"] + M1["MPerBlock/MLdsLayer
M"] + K0["KPerBlock/KPack
K0''"] + K1["KPack
K1"] + end + + subgraph "Merge into 1 component" + ME0["make_merge_transform"] + end + + subgraph "Merge into 1 component" + ME1["make_merge_transform"] + end + + subgraph "Transformed 2D coordinates [M', K']" + M11["MPerBlock
M'"] + K01["KPerBlock
K'"] + end + + L --> ME0 + M1 --> ME0 + + K0 --> ME1 + K1 --> ME1 + + ME0 --> M11 + ME1 --> K01 C++ Implementation diff --git a/docs/conceptual/ck_tile/load_store_traits.rst b/docs/conceptual/ck_tile/load_store_traits.rst index bf2decc37e7..7be70c770f3 100644 --- a/docs/conceptual/ck_tile/load_store_traits.rst +++ b/docs/conceptual/ck_tile/load_store_traits.rst @@ -102,34 +102,20 @@ Vectorization Selection Algorithm LoadStoreTraits employs an advanced algorithm to select the best dimension for vectorization: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TD - A[Analyze Distribution] --> B{Check Each Dimension} - B --> C[Calculate Stride] - C --> D{Stride == 1?} - D -->|Yes| E[Candidate for Vectorization] - D -->|No| F[Skip Dimension] - E --> G[Check Alignment] - G --> H[Check Vector Size] - H --> I[Score Dimension] - F --> B - I --> J[Select Best Dimension] - J --> K[Configure Vector Access] - - style A fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style J fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style K fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - -.. image:: diagrams/load_store_traits_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TD + A[Analyze Distribution] --> B{Check Each Dimension} + B --> C[Calculate Stride] + C --> D{Stride == 1?} + D -->|Yes| E[Candidate for Vectorization] + D -->|No| F[Skip Dimension] + E --> G[Check Alignment] + G --> H[Check Vector Size] + H --> I[Score Dimension] + F --> B + I --> J[Select Best Dimension] + J --> K[Configure Vector Access] **Example: Comparing Different Memory Layouts** @@ -172,42 +158,30 @@ Memory Access Patterns LoadStoreTraits creates efficient access patterns using space-filling curves: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Linear Traversal" - L1["0→1→2→3"] - L2["4→5→6→7"] - L3["Cache miss"] - L4["8→9→10→11"] - end - - subgraph "Snake Pattern" - S1["0→1→2→3"] - S2["7←6←5←4"] - S3["Cache hit!"] - S4["8→9→10→11"] - end - - L1 --> L2 - L2 --> L3 - L3 --> L4 - - S1 --> S2 - S2 --> S3 - S3 --> S4 - - style L3 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style S3 fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - -.. image:: diagrams/load_store_traits_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Linear Traversal" + L1["0→1→2→3"] + L2["4→5→6→7"] + L3["Cache miss"] + L4["8→9→10→11"] + end + + subgraph "Snake Pattern" + S1["0→1→2→3"] + S2["7←6←5←4"] + S3["Cache hit!"] + S4["8→9→10→11"] + end + + L1 --> L2 + L2 --> L3 + L3 --> L4 + + S1 --> S2 + S2 --> S3 + S3 --> S4 **C++ Access Pattern Example:** diff --git a/docs/conceptual/ck_tile/space_filling_curve.rst b/docs/conceptual/ck_tile/space_filling_curve.rst index 869285b4621..43b4ce0b78c 100644 --- a/docs/conceptual/ck_tile/space_filling_curve.rst +++ b/docs/conceptual/ck_tile/space_filling_curve.rst @@ -190,44 +190,30 @@ Snake Pattern for Cache Optimization The snake pattern reverses traversal direction on alternate rows, minimizing the distance between consecutive accesses: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Linear Pattern" - L1["Row 0: →"] - L2["Row 1: →"] - L3["Jump back"] - L4["Row 2: →"] - end - - subgraph "Snake Pattern" - S1["Row 0: →"] - S2["Row 1: ←"] - S3["Continue"] - S4["Row 2: →"] - end - - L1 --> L3 - L3 --> L2 - L2 --> L3 - L3 --> L4 - - S1 --> S2 - S2 --> S4 - - style L3 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style S3 fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - -.. image:: diagrams/space_filling_curve.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Linear Pattern" + L1["Row 0: →"] + L2["Row 1: →"] + L3["Jump back"] + L4["Row 2: →"] + end + + subgraph "Snake Pattern" + S1["Row 0: →"] + S2["Row 1: ←"] + S3["Continue"] + S4["Row 2: →"] + end + + L1 --> L3 + L3 --> L2 + L2 --> L3 + L3 --> L4 + + S1 --> S2 + S2 --> S4 .. code-block:: cpp diff --git a/docs/conceptual/ck_tile/static_distributed_tensor.rst b/docs/conceptual/ck_tile/static_distributed_tensor.rst index 1f7a93657f0..075a2150b28 100644 --- a/docs/conceptual/ck_tile/static_distributed_tensor.rst +++ b/docs/conceptual/ck_tile/static_distributed_tensor.rst @@ -89,29 +89,18 @@ Understanding how static distributed tensors organize memory is important for pe The memory layout follows a hierarchical pattern: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TD - A[Global Tensor 64x64] --> B[Thread Block 16x16] - B --> C[Thread 0,0
Elements 0:3,0:3] - B --> D[Thread 0,1
Elements 0:3,4:7] - B --> E[Thread 1,0
Elements 4:7,0:3] - B --> F[...] - - C --> G[Local Array
16 elements] - D --> H[Local Array
16 elements] - E --> I[Local Array
16 elements] - - - - - -.. image:: diagrams/static_distributed_tensor.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TD + A[Global Tensor 64x64] --> B[Thread Block 16x16] + B --> C[Thread 0,0
Elements 0:3,0:3] + B --> D[Thread 0,1
Elements 0:3,4:7] + B --> E[Thread 1,0
Elements 4:7,0:3] + B --> F[...] + + C --> G[Local Array
16 elements] + D --> H[Local Array
16 elements] + E --> I[Local Array
16 elements] Element Access and Indexing =========================== diff --git a/docs/conceptual/ck_tile/sweep_tile.rst b/docs/conceptual/ck_tile/sweep_tile.rst index 4dfb6a2ad10..c8aace2de82 100644 --- a/docs/conceptual/ck_tile/sweep_tile.rst +++ b/docs/conceptual/ck_tile/sweep_tile.rst @@ -15,46 +15,29 @@ Sweep operations are the clean way to iterate over distributed data in CK Tile. Sweep operations use the "load once, use many times" pattern. Load X data once into registers, then sweep through Y positions while keeping X in fast memory. This maximizes data reuse and minimizes memory bandwidth requirements. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "X-Tile (Reused)" - XT["X data loaded once
Stays in registers"] - end - - subgraph "Y-Sweep" - Y1["Y position 0"] - Y2["Y position 1"] - Y3["Y position 2"] - YN["Y position N"] - end - - subgraph "Computation" - C["Process(X, Y)"] - end - - XT --> C - Y1 --> C - Y2 --> C - Y3 --> C - YN --> C - - style XT fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style C fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - - - - - -.. image:: diagrams/sweep_tile_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart LR + subgraph "X-Tile (Reused)" + XT["X data loaded once
Stays in registers"] + end + + subgraph "Y-Sweep" + Y1["Y position 0"] + Y2["Y position 1"] + Y3["Y position 2"] + YN["Y position N"] + end + + subgraph "Computation" + C["Process(X, Y)"] + end + + XT --> C + Y1 --> C + Y2 --> C + Y3 --> C + YN --> C The Complete GPU Workflow ========================= @@ -123,38 +106,24 @@ Memory Efficiency Pattern The sweep pattern provides significant memory efficiency benefits. This is particularly important for GPU architectures (see :ref:`ck_tile_gpu_basics`) where memory bandwidth is often the limiting factor: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Traditional Approach" - T1["Load X[0]"] --> P1["Process"] - T2["Load Y[0]"] --> P1 - T3["Load X[0]"] --> P2["Process"] - T4["Load Y[1]"] --> P2 - T5["Load X[0]"] --> P3["Process"] - T6["Load Y[2]"] --> P3 - Note1["X loaded 3 times!"] - end - - subgraph "Sweep Approach" - S1["Load X[0]"] --> SP["Process with
Y[0], Y[1], Y[2]"] - S2["Load Y[0,1,2]"] --> SP - Note2["X loaded once!"] - end - - style Note1 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style Note2 fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - -.. image:: diagrams/sweep_tile_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Traditional Approach" + T1["Load X[0]"] --> P1["Process"] + T2["Load Y[0]"] --> P1 + T3["Load X[0]"] --> P2["Process"] + T4["Load Y[1]"] --> P2 + T5["Load X[0]"] --> P3["Process"] + T6["Load Y[2]"] --> P3 + Note1["X loaded 3 times!"] + end + + subgraph "Sweep Approach" + S1["Load X[0]"] --> SP["Process with
Y[0], Y[1], Y[2]"] + S2["Load Y[0,1,2]"] --> SP + Note2["X loaded once!"] + end Practical Sweep Patterns ======================== @@ -382,45 +351,32 @@ Performance Characteristics Sweep operations provide several performance benefits: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Sweep Performance Benefits" - B1["Zero runtime overhead
Compile-time unrolling"] - B2["Perfect memory coalescing
Sequential access patterns"] - B3["Automatic vectorization
Compiler optimizations"] - B4["Register reuse
X data stays in VGPR"] - end - - subgraph "Use Cases" - U1["Matrix Multiplication
Reuse A columns"] - U2["Convolution
Reuse filter weights"] - U3["Reduction
Accumulate over Y"] - U4["Broadcast
Apply X to all Y"] - end - - B1 --> Performance["High Performance"] - B2 --> Performance - B3 --> Performance - B4 --> Performance - - Performance --> U1 - Performance --> U2 - Performance --> U3 - Performance --> U4 - - style Performance fill:#d1fae5,stroke:#10b981,stroke-width:3px - - - - - -.. image:: diagrams/sweep_tile_3.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Sweep Performance Benefits" + B1["Zero runtime overhead
Compile-time unrolling"] + B2["Perfect memory coalescing
Sequential access patterns"] + B3["Automatic vectorization
Compiler optimizations"] + B4["Register reuse
X data stays in VGPR"] + end + + subgraph "Use Cases" + U1["Matrix Multiplication
Reuse A columns"] + U2["Convolution
Reuse filter weights"] + U3["Reduction
Accumulate over Y"] + U4["Broadcast
Apply X to all Y"] + end + + B1 --> Performance["High Performance"] + B2 --> Performance + B3 --> Performance + B4 --> Performance + + Performance --> U1 + Performance --> U2 + Performance --> U3 + Performance --> U4 Compiler Optimizations ---------------------- @@ -457,39 +413,21 @@ Integration with CK Tile Components Complete workflow example: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart TB - subgraph "Complete Workflow" - TD["TileDistribution
Define data layout"] - TW["TileWindow
Create view"] - DT["DistributedTensor
Load X data"] - ST["SweepTile
Iterate Y positions"] - R["Results
Store outputs"] - end - - TD --> TW - TW --> DT - DT --> ST - ST --> R - - style TD fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style ST fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style R fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - -.. image:: diagrams/sweep_tile_4.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart TB + subgraph "Complete Workflow" + TD["TileDistribution
Define data layout"] + TW["TileWindow
Create view"] + DT["DistributedTensor
Load X data"] + ST["SweepTile
Iterate Y positions"] + R["Results
Store outputs"] + end + + TD --> TW + TW --> DT + DT --> ST + ST --> R .. code-block:: cpp diff --git a/docs/conceptual/ck_tile/tensor_coordinates.rst b/docs/conceptual/ck_tile/tensor_coordinates.rst index 4e9240b83c4..ef047776dbf 100644 --- a/docs/conceptual/ck_tile/tensor_coordinates.rst +++ b/docs/conceptual/ck_tile/tensor_coordinates.rst @@ -15,49 +15,31 @@ Before diving into transforms and adaptors (see :ref:`ck_tile_transforms` and :r MultiIndex serves as the common currency between different coordinate spaces (see :ref:`ck_tile_coordinate_systems`), enabling seamless transformation and navigation through complex tensor layouts. Every transform, adaptor, and descriptor in CK Tile operates on these coordinate containers. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "MultiIndex Structure" - MI["MultiIndex
Container for N integers"] - D0["Dimension 0"] - D1["Dimension 1"] - D2["Dimension 2"] - DN["Dimension N-1"] - end - - subgraph "Usage Context" - T["Transforms
"] - A["Adaptors
"] - TV["Tensors
"] - end - - MI --> D0 - MI --> D1 - MI --> D2 - MI --> DN - - T --> MI - A --> MI - TV --> MI - - style MI fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px - style D0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style D1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style D2 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style DN fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style T fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style A fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style TV fill:#ffebee,stroke:#d32f2f,stroke-width:2px - - - -.. image:: diagrams/tensor_coordinates_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "MultiIndex Structure" + MI["MultiIndex
Container for N integers"] + D0["Dimension 0"] + D1["Dimension 1"] + D2["Dimension 2"] + DN["Dimension N-1"] + end + + subgraph "Usage Context" + T["Transforms
"] + A["Adaptors
"] + TV["Tensors
"] + end + + MI --> D0 + MI --> D1 + MI --> D2 + MI --> DN + + T --> MI + A --> MI + TV --> MI MultiIndex Implementation ========================= @@ -176,36 +158,22 @@ MultiIndex in Coordinate Flow MultiIndex serves as the interface between user code and the transformation pipeline: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart TB - subgraph CF ["Coordinate Flow"] - direction LR - UI["User Input
[1, 2, 3]"] --> MI["MultiIndex
Storage"] - MI --> TR["Transform
Processing"] - TR --> MO["MultiIndex
Output"] - MO --> TA["Tensor Access
element(coord)"] - end - - subgraph EX ["Example: 3D Tensor Access"] - direction LR - T3D["3D Tensor
shape=[4,5,6]"] --> COORD["MultiIndex(3, [1,2,3])"] - COORD --> ELEM["Element at
position [1,2,3]"] - end - - style UI fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style MI fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px - style MO fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px - style COORD fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - -.. image:: diagrams/tensor_coordinates_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart TB + subgraph CF ["Coordinate Flow"] + direction LR + UI["User Input
[1, 2, 3]"] --> MI["MultiIndex
Storage"] + MI --> TR["Transform
Processing"] + TR --> MO["MultiIndex
Output"] + MO --> TA["Tensor Access
element(coord)"] + end + + subgraph EX ["Example: 3D Tensor Access"] + direction LR + T3D["3D Tensor
shape=[4,5,6]"] --> COORD["MultiIndex(3, [1,2,3])"] + COORD --> ELEM["Element at
position [1,2,3]"] + end Common Usage Patterns ===================== diff --git a/docs/conceptual/ck_tile/tensor_views.rst b/docs/conceptual/ck_tile/tensor_views.rst index 0c46e1e5930..22e6a61c3d3 100644 --- a/docs/conceptual/ck_tile/tensor_views.rst +++ b/docs/conceptual/ck_tile/tensor_views.rst @@ -13,52 +13,31 @@ TensorView presents different logical views of the same underlying memory withou TensorView Architecture ----------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Memory Foundation" - Memory["Flat Memory Array
0 1 2 3 4 5 6 7 8 9 10 11"] - end - - subgraph "Access Layer" - BufferView["BufferView
Linear Memory Access"] - Descriptor["TensorDescriptor
Shape & Stride Info"] - end - - subgraph "Tensor Layer" - TensorView["TensorView
Multi-dimensional Access"] - end - - subgraph "Logical View" - Matrix["2D Matrix View
[3×4]
[[0,1,2,3]
[4,5,6,7]
[8,9,10,11]]"] - end - - Memory --> BufferView - Memory --> Descriptor - BufferView --> TensorView - Descriptor --> TensorView - TensorView --> Matrix - - style Memory fill:#d1fae5,stroke:#10b981,stroke-width:2px - style BufferView fill:#dbeafe,stroke:#3b82f6,stroke-width:2px - style Descriptor fill:#fed7aa,stroke:#f59e0b,stroke-width:2px - style TensorView fill:#fce7f3,stroke:#ec4899,stroke-width:2px - style Matrix fill:#e9d5ff,stroke:#9333ea,stroke-width:2px - - - - - +.. mermaid:: + + graph TB + subgraph "Memory Foundation" + Memory["Flat Memory Array
0 1 2 3 4 5 6 7 8 9 10 11"] + end + + subgraph "Access Layer" + BufferView["BufferView
Linear Memory Access"] + Descriptor["TensorDescriptor
Shape & Stride Info"] + end + + subgraph "Tensor Layer" + TensorView["TensorView
Multi-dimensional Access"] + end + + subgraph "Logical View" + Matrix["2D Matrix View
[3×4]
[[0,1,2,3]
[4,5,6,7]
[8,9,10,11]]"] + end -.. image:: diagrams/tensor_views_1.svg - :alt: Diagram - :align: center + Memory --> BufferView + Memory --> Descriptor + BufferView --> TensorView + Descriptor --> TensorView + TensorView --> Matrix The Foundation: BufferView and TensorDescriptor ------------------------------------------------ @@ -122,93 +101,53 @@ Coordinate-Based Access The fundamental operation of TensorView is translating multi-dimensional coordinates into memory accesses. This translation happens through an advanced pipeline that maintains efficiency while providing flexibility: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "User Input" - Coord["Coordinate
(1, 2)"] - end - - subgraph "TensorView Processing" - Shape["Shape Check
row < 3?
col < 4?"] - Stride["Apply Strides
offset = 1×4 + 2×1"] - Buffer["BufferView Access
buffer[6]"] - end - - subgraph "Result" - Value["Value: 6"] - end - - Coord --> Shape - Shape -->|Valid| Stride - Stride --> Buffer - Buffer --> Value - - style Coord fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style Shape fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - style Stride fill:#dcfce7,stroke:#10b981,stroke-width:2px - style Buffer fill:#dbeafe,stroke:#3b82f6,stroke-width:2px - style Value fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - +.. mermaid:: + + flowchart LR + subgraph "User Input" + Coord["Coordinate
(1, 2)"] + end + + subgraph "TensorView Processing" + Shape["Shape Check
row < 3?
col < 4?"] + Stride["Apply Strides
offset = 1×4 + 2×1"] + Buffer["BufferView Access
buffer[6]"] + end -.. image:: diagrams/tensor_views_2.svg - :alt: Diagram - :align: center + subgraph "Result" + Value["Value: 6"] + end + + Coord --> Shape + Shape -->|Valid| Stride + Stride --> Buffer + Buffer --> Value Memory Layouts and Strides -------------------------- A key feature of TensorView is its ability to represent different memory layouts through stride manipulation. This capability enables zero-copy transformations that would otherwise require expensive memory operations: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Row-Major Layout (C-style)" - RM["Memory: [0,1,2,3,4,5,6,7,8,9,10,11]
Shape: (3,4)
Strides: (4,1)"] - RMMatrix["[[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]]"] - RM --> RMMatrix - end - - subgraph "Column-Major Layout (Fortran-style)" - CM["Memory: [0,3,6,9,1,4,7,10,2,5,8,11]
Shape: (3,4)
Strides: (1,3)"] - CMMatrix["[[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]]"] - CM --> CMMatrix - end - - subgraph "Custom Stride (Transposed View)" - TV["Memory: [0,1,2,3,4,5,6,7,8,9,10,11]
Shape: (4,3)
Strides: (1,4)"] - TVMatrix["[[0, 4, 8]
[1, 5, 9]
[2, 6, 10]
[3, 7, 11]]"] - TV --> TVMatrix - end - - style RM fill:#e0f2fe,stroke:#0284c7,stroke-width:2px - style CM fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - style TV fill:#f3e8ff,stroke:#9333ea,stroke-width:2px - - - - - +.. mermaid:: + + graph TB + subgraph "Row-Major Layout (C-style)" + RM["Memory: [0,1,2,3,4,5,6,7,8,9,10,11]
Shape: (3,4)
Strides: (4,1)"] + RMMatrix["[[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]]"] + RM --> RMMatrix + end -.. image:: diagrams/tensor_views_3.svg - :alt: Diagram - :align: center + subgraph "Column-Major Layout (Fortran-style)" + CM["Memory: [0,3,6,9,1,4,7,10,2,5,8,11]
Shape: (3,4)
Strides: (1,3)"] + CMMatrix["[[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]]"] + CM --> CMMatrix + end + + subgraph "Custom Stride (Transposed View)" + TV["Memory: [0,1,2,3,4,5,6,7,8,9,10,11]
Shape: (4,3)
Strides: (1,4)"] + TVMatrix["[[0, 4, 8]
[1, 5, 9]
[2, 6, 10]
[3, 7, 11]]"] + TV --> TVMatrix + end Row-Major vs Column-Major Layouts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -326,45 +265,26 @@ Memory Access Patterns The efficiency of TensorView operations depends on memory access patterns. Understanding these patterns is important for achieving optimal performance. See :ref:`ck_tile_gpu_basics` for hardware considerations. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Memory Access Patterns" - Seq["Sequential Access
(Good cache usage)"] - Stride["Strided Access
(May cause cache misses)"] - Random["Random Access
(Poor cache usage)"] - end - - subgraph "Optimization Strategies" - Opt1["Use row-major for row iteration"] - Opt2["Use col-major for column iteration"] - Opt3["Minimize stride between accesses"] - Opt4["Vectorize when possible"] - end - - Seq --> Opt1 - Stride --> Opt2 - Stride --> Opt3 - Random --> Opt4 - - style Seq fill:#d1fae5,stroke:#10b981,stroke-width:2px - style Stride fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - style Random fill:#fee2e2,stroke:#ef4444,stroke-width:2px - - - - - +.. mermaid:: + + graph LR + subgraph "Memory Access Patterns" + Seq["Sequential Access
(Good cache usage)"] + Stride["Strided Access
(May cause cache misses)"] + Random["Random Access
(Poor cache usage)"] + end + + subgraph "Optimization Strategies" + Opt1["Use row-major for row iteration"] + Opt2["Use col-major for column iteration"] + Opt3["Minimize stride between accesses"] + Opt4["Vectorize when possible"] + end -.. image:: diagrams/tensor_views_4.svg - :alt: Diagram - :align: center + Seq --> Opt1 + Stride --> Opt2 + Stride --> Opt3 + Random --> Opt4 Compile-Time Optimization ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -391,48 +311,30 @@ TensorView vs BufferView Understanding when to use TensorView versus BufferView is crucial for writing efficient code: -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "BufferView" - BV1["Linear indexing only"] - BV2["buffer[5]"] - BV3["No shape information"] - BV4["Direct memory access"] - end - - subgraph "TensorView" - TV1["Multi-dimensional indexing"] - TV2["tensor(1, 2)"] - TV3["Shape-aware operations"] - TV4["Coordinate transformations"] - end - - subgraph "Use Cases" - UC1["BufferView: Low-level memory ops"] - UC2["TensorView: Matrix/tensor algorithms"] - end - - BV1 --> UC1 - TV1 --> UC2 - - style BV1 fill:#dbeafe,stroke:#3b82f6,stroke-width:2px - style TV1 fill:#fce7f3,stroke:#ec4899,stroke-width:2px - - - - - - -.. image:: diagrams/tensor_views_5.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "BufferView" + BV1["Linear indexing only"] + BV2["buffer[5]"] + BV3["No shape information"] + BV4["Direct memory access"] + end + + subgraph "TensorView" + TV1["Multi-dimensional indexing"] + TV2["tensor(1, 2)"] + TV3["Shape-aware operations"] + TV4["Coordinate transformations"] + end + + subgraph "Use Cases" + UC1["BufferView: Low-level memory ops"] + UC2["TensorView: Matrix/tensor algorithms"] + end + + BV1 --> UC1 + TV1 --> UC2 BufferView excels at raw memory operations where linear access is natural or where the overhead of coordinate calculation would be prohibitive. TensorView is best suited for algorithms that operate in terms of multi-dimensional coordinates, such as matrix operations, image processing, or tensor contractions. diff --git a/docs/conceptual/ck_tile/thread_mapping.rst b/docs/conceptual/ck_tile/thread_mapping.rst index 361912ba9f6..055b94eb404 100644 --- a/docs/conceptual/ck_tile/thread_mapping.rst +++ b/docs/conceptual/ck_tile/thread_mapping.rst @@ -78,61 +78,46 @@ Composable Kernel abstracts thread identification into partition indices, buildi }; -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "GPU Device" - subgraph "Thread Block" - subgraph "Warp 0" - T0["Thread 0
lane_id=0"] - T1["Thread 1
lane_id=1"] - T2["..."] - T31["Thread 31
lane_id=31"] - end - - subgraph "Warp 1" - T32["Thread 32
lane_id=0"] - T33["Thread 33
lane_id=1"] - T34["..."] - T63["Thread 63
lane_id=31"] - end - - W2["Warp 2"] - W3["..."] - W7["Warp 7"] - end - end - - subgraph "Thread Identification" - TID["Thread ID = blockIdx.x * blockDim.x + threadIdx.x"] - WID["Warp ID = threadIdx.x / 32"] - LID["Lane ID = threadIdx.x % 32"] - end - - subgraph "P-space Mapping" - P["P-coordinates
NDimP=1: [thread_id]
NDimP=2: [warp_id, lane_id]"] - end - - T0 --> TID - TID --> WID - TID --> LID - WID --> P - LID --> P - - style T0 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style T32 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style P fill:#fff3e0,stroke:#f57c00,stroke-width:3px - - - - - -.. image:: diagrams/thread_mapping_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "GPU Device" + subgraph "Thread Block" + subgraph "Warp 0" + T0["Thread 0
lane_id=0"] + T1["Thread 1
lane_id=1"] + T2["..."] + T31["Thread 31
lane_id=31"] + end + + subgraph "Warp 1" + T32["Thread 32
lane_id=0"] + T33["Thread 33
lane_id=1"] + T34["..."] + T63["Thread 63
lane_id=31"] + end + + W2["Warp 2"] + W3["..."] + W7["Warp 7"] + end + end + + subgraph "Thread Identification" + TID["Thread ID = blockIdx.x * blockDim.x + threadIdx.x"] + WID["Warp ID = threadIdx.x / 32"] + LID["Lane ID = threadIdx.x % 32"] + end + + subgraph "P-space Mapping" + P["P-coordinates
NDimP=1: [thread_id]
NDimP=2: [warp_id, lane_id]"] + end + + T0 --> TID + TID --> WID + TID --> LID + WID --> P + LID --> P Thread Hierarchy Structure @@ -179,51 +164,36 @@ Thread-to-Data Mapping Once threads know their IDs, they need to map those IDs to specific data elements. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Thread to Data Mapping" - subgraph "Thread Grid" - T00["Thread[0,0]
Warp 0"] - T01["Thread[0,1]
Warp 0"] - T10["Thread[1,0]
Warp 1"] - T11["Thread[1,1]
Warp 1"] - end - - subgraph "Data Tiles" - D00["Data[0:4, 0:4]
16 elements"] - D01["Data[0:4, 4:8]
16 elements"] - D10["Data[4:8, 0:4]
16 elements"] - D11["Data[4:8, 4:8]
16 elements"] - end - - subgraph "Memory Access" - MA["Coalesced Access
Adjacent threads → Adjacent memory"] - end - end - - T00 --> D00 - T01 --> D01 - T10 --> D10 - T11 --> D11 - - D00 --> MA - D01 --> MA - - style T00 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style D00 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style MA fill:#fff3e0,stroke:#f57c00,stroke-width:2px - - - - - -.. image:: diagrams/thread_mapping_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Thread to Data Mapping" + subgraph "Thread Grid" + T00["Thread[0,0]
Warp 0"] + T01["Thread[0,1]
Warp 0"] + T10["Thread[1,0]
Warp 1"] + T11["Thread[1,1]
Warp 1"] + end + + subgraph "Data Tiles" + D00["Data[0:4, 0:4]
16 elements"] + D01["Data[0:4, 4:8]
16 elements"] + D10["Data[4:8, 0:4]
16 elements"] + D11["Data[4:8, 4:8]
16 elements"] + end + + subgraph "Memory Access" + MA["Coalesced Access
Adjacent threads → Adjacent memory"] + end + end + + T00 --> D00 + T01 --> D01 + T10 --> D10 + T11 --> D11 + + D00 --> MA + D01 --> MA Data Distribution Pattern ------------------------- diff --git a/docs/conceptual/ck_tile/tile_distribution.rst b/docs/conceptual/ck_tile/tile_distribution.rst index 3c016318bfb..24417c70c78 100644 --- a/docs/conceptual/ck_tile/tile_distribution.rst +++ b/docs/conceptual/ck_tile/tile_distribution.rst @@ -19,98 +19,66 @@ This design adapts to diverse computational scenarios without manual interventio Complete Tile Distribution System Overview ------------------------------------------ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Logical View" - T["Tensor
Multi-dimensional data"] - TD["TileDistribution
Work assignment"] - TW["TileWindow
Data view"] - end - - subgraph "Coordinate Spaces" - X["X: Physical tensor coords"] - Y["Y: Tile pattern coords"] - P["P: Processing element coords"] - R["R: Replication coords (optional)"] - end - - subgraph "GPU Execution" - W["Warps
32 threads each"] - L["Lanes
Thread within warp"] - REG["Registers
Thread-local storage"] - end - - T --> TD - TD --> TW - - TD --> X - TD --> Y - TD --> P - TD --> R - - P --> W - P --> L - TW --> REG - - style TD fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style P fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style REG fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Logical View" + T["Tensor
Multi-dimensional data"] + TD["TileDistribution
Work assignment"] + TW["TileWindow
Data view"] + end + + subgraph "Coordinate Spaces" + X["X: Physical tensor coords"] + Y["Y: Tile pattern coords"] + P["P: Processing element coords"] + R["R: Replication coords (optional)"] + end + + subgraph "GPU Execution" + W["Warps
32 threads each"] + L["Lanes
Thread within warp"] + REG["Registers
Thread-local storage"] + end + + T --> TD + TD --> TW + + TD --> X + TD --> Y + TD --> P + TD --> R + + P --> W + P --> L + TW --> REG Coordinate System Architecture ------------------------------ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "Input" - TC["Thread Coordinates
(warpId, laneId)"] - end - - subgraph "Transformation Pipeline" - P2Y["P → Y
Thread to pattern"] - Y2X["Y → X
Pattern to physical"] - Y2D["Y → D
Pattern to register"] - end - - subgraph "Output" - MC["Memory Coordinates
Global addresses"] - RI["Register Indices
Local storage"] - end - - TC --> P2Y - P2Y --> Y2X - P2Y --> Y2D - Y2X --> MC - Y2D --> RI - - style TC fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style MC fill:#d1fae5,stroke:#10b981,stroke-width:2px - style RI fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart LR + subgraph "Input" + TC["Thread Coordinates
(warpId, laneId)"] + end + + subgraph "Transformation Pipeline" + P2Y["P → Y
Thread to pattern"] + Y2X["Y → X
Pattern to physical"] + Y2D["Y → D
Pattern to register"] + end + + subgraph "Output" + MC["Memory Coordinates
Global addresses"] + RI["Register Indices
Local storage"] + end + + TC --> P2Y + P2Y --> Y2X + P2Y --> Y2D + Y2X --> MC + Y2D --> RI What is Tile Distribution? -------------------------- @@ -152,50 +120,34 @@ TileDistribution abstracts the mapping between logical problem coordinates and p Problem Space Mapping --------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - - graph TB - subgraph "Problem Space (256×256 Matrix)" - M["Full Matrix
65,536 elements"] - T1["Tile 1
32×32"] - T2["Tile 2
32×32"] - TN["Tile N
32×32"] - end - - subgraph "Thread Assignment" - W0["Warp 0
32 threads"] - W1["Warp 1
32 threads"] - L0["Lane 0-31
Individual threads"] - end - - subgraph "Memory Pattern" - MP["Coalesced Access
Sequential addresses
No bank conflicts"] - end - - M --> T1 - M --> T2 - M --> TN - - T1 --> W0 - T1 --> W1 - W0 --> L0 - L0 --> MP - - style M fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style MP fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_3.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Problem Space (256×256 Matrix)" + M["Full Matrix
65,536 elements"] + T1["Tile 1
32×32"] + T2["Tile 2
32×32"] + TN["Tile N
32×32"] + end + + subgraph "Thread Assignment" + W0["Warp 0
32 threads"] + W1["Warp 1
32 threads"] + L0["Lane 0-31
Individual threads"] + end + + subgraph "Memory Pattern" + MP["Coalesced Access
Sequential addresses
No bank conflicts"] + end + + M --> T1 + M --> T2 + M --> TN + + T1 --> W0 + T1 --> W1 + W0 --> L0 + L0 --> MP Creating a TileDistribution --------------------------- @@ -369,47 +321,31 @@ Creating and using a TileDistribution: Hierarchical Decomposition -------------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Level 1: Block Distribution" - B["Thread Block
256 threads"] - BT1["Block Tile 1
64×64"] - BT2["Block Tile 2
64×64"] - end - - subgraph "Level 2: Warp Distribution" - W["Warp
32 threads"] - WT1["Warp Tile 1
16×16"] - WT2["Warp Tile 2
16×16"] - end - - subgraph "Level 3: Thread Distribution" - T["Thread"] - TT["Thread Tile
2×2"] - end - - B --> BT1 - BT1 --> W - W --> WT1 - WT1 --> T - T --> TT - - style B fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style W fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style T fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_4.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Level 1: Block Distribution" + B["Thread Block
256 threads"] + BT1["Block Tile 1
64×64"] + BT2["Block Tile 2
64×64"] + end + + subgraph "Level 2: Warp Distribution" + W["Warp
32 threads"] + WT1["Warp Tile 1
16×16"] + WT2["Warp Tile 2
16×16"] + end + + subgraph "Level 3: Thread Distribution" + T["Thread"] + TT["Thread Tile
2×2"] + end + + B --> BT1 + BT1 --> W + W --> WT1 + WT1 --> T + T --> TT Advanced Example: Matrix Multiplication Distribution ---------------------------------------------------- @@ -462,45 +398,28 @@ Advanced Example: Matrix Multiplication Distribution Work Distribution Pattern ------------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart TB - subgraph "Matrix C (128×128)" - C["16,384 elements"] - end - - subgraph "Thread Grid (32×32)" - TG["1,024 threads"] - end - - subgraph "Per Thread" - PT["4×4 tile
16 elements"] - end - - subgraph "Memory Access" - MA["Coalesced reads
Efficient writes
No conflicts"] - end - - C --> TG - TG --> PT - PT --> MA - - style C fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style TG fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style PT fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style MA fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_5.svg - :alt: Diagram - :align: center +.. mermaid:: + + flowchart TB + subgraph "Matrix C (128×128)" + C["16,384 elements"] + end + + subgraph "Thread Grid (32×32)" + TG["1,024 threads"] + end + + subgraph "Per Thread" + PT["4×4 tile
16 elements"] + end + + subgraph "Memory Access" + MA["Coalesced reads
Efficient writes
No conflicts"] + end + + C --> TG + TG --> PT + PT --> MA Memory Access Patterns ---------------------- @@ -514,97 +433,67 @@ One of the key benefits of TileDistribution is generating optimal memory access Transformation Pipeline ----------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Input" - TID["Thread ID
(0-1023)"] - end - - subgraph "Stage 1" - P["P-coordinates
(warp, lane)"] - end - - subgraph "Stage 2" - Y["Y-coordinates
(tile position)"] - end - - subgraph "Stage 3" - X["X-coordinates
(tensor indices)"] - end - - subgraph "Output" - ADDR["Memory addresses
Register indices"] - end - - TID --> P - P --> Y - Y --> X - X --> ADDR - - style TID fill:#e0e7ff,stroke:#4338ca,stroke-width:2px - style ADDR fill:#d1fae5,stroke:#10b981,stroke-width:2px - - - - - -.. image:: diagrams/tile_distribution_6.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Input" + TID["Thread ID
(0-1023)"] + end + + subgraph "Stage 1" + P["P-coordinates
(warp, lane)"] + end + + subgraph "Stage 2" + Y["Y-coordinates
(tile position)"] + end + + subgraph "Stage 3" + X["X-coordinates
(tensor indices)"] + end + + subgraph "Output" + ADDR["Memory addresses
Register indices"] + end + + TID --> P + P --> Y + Y --> X + X --> ADDR Performance Comparison ---------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Manual Implementation" - M1["Calculate indices manually"] - M2["Handle boundary conditions"] - M3["Ensure coalescing"] - M4["Manage bank conflicts"] - M5["~200 lines of code"] - end - - subgraph "With TileDistribution" - T1["make_tile_distribution()"] - T2["Automatic optimization"] - T3["~10 lines of code"] - end - - subgraph "Performance" - P1["Same performance"] - P2["Fewer bugs"] - P3["Portable across GPUs"] - end - - M1 --> M5 - T1 --> T3 - - M5 --> P1 - T3 --> P1 - P1 --> P2 - P2 --> P3 - - style M5 fill:#fee2e2,stroke:#ef4444,stroke-width:2px - style T3 fill:#d1fae5,stroke:#10b981,stroke-width:2px - style P3 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px - - - - - - -.. image:: diagrams/tile_distribution_7.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Manual Implementation" + M1["Calculate indices manually"] + M2["Handle boundary conditions"] + M3["Ensure coalescing"] + M4["Manage bank conflicts"] + M5["~200 lines of code"] + end + + subgraph "With TileDistribution" + T1["make_tile_distribution()"] + T2["Automatic optimization"] + T3["~10 lines of code"] + end + + subgraph "Performance" + P1["Same performance"] + P2["Fewer bugs"] + P3["Portable across GPUs"] + end + + M1 --> M5 + T1 --> T3 + + M5 --> P1 + T3 --> P1 + P1 --> P2 + P2 --> P3 Summary ------- diff --git a/docs/conceptual/ck_tile/tile_window.rst b/docs/conceptual/ck_tile/tile_window.rst index 23c006d972b..272526611c2 100644 --- a/docs/conceptual/ck_tile/tile_window.rst +++ b/docs/conceptual/ck_tile/tile_window.rst @@ -13,56 +13,43 @@ TileWindow implements a distribution-aware windowing mechanism that views a subs TileWindow Architecture ----------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Components" - TV["TensorView
Data source"] - TD["TileDistribution
Thread mapping"] - TW["TileWindow
Access gateway"] - LT["LoadStoreTraits
Access optimizer"] - DT["DistributedTensor
Register storage"] - end - - subgraph "Operations" - Load["Load
Global → Registers"] - Compute["Compute
In registers"] - Store["Store
Registers → Global"] - end - - subgraph "Optimizations" - Coal["Coalescing
Adjacent access"] - Vec["Vectorization
Multi-element ops"] - Bank["Bank conflict
avoidance"] - SFC["Space-filling
curve traversal"] - end - - TV --> TW - TD --> TW - TW --> LT - LT --> DT - - TW --> Load - Load --> Compute - Compute --> Store - - Load --> Coal - Load --> Vec - Load --> SFC - Store --> Bank - - style TW fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style LT fill:#fff3e0,stroke:#f57c00,stroke-width:2px - style DT fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - -.. image:: diagrams/tile_window_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Components" + TV["TensorView
Data source"] + TD["TileDistribution
Thread mapping"] + TW["TileWindow
Access gateway"] + LT["LoadStoreTraits
Access optimizer"] + DT["DistributedTensor
Register storage"] + end + + subgraph "Operations" + Load["Load
Global → Registers"] + Compute["Compute
In registers"] + Store["Store
Registers → Global"] + end + + subgraph "Optimizations" + Coal["Coalescing
Adjacent access"] + Vec["Vectorization
Multi-element ops"] + Bank["Bank conflict
avoidance"] + SFC["Space-filling
curve traversal"] + end + + TV --> TW + TD --> TW + TW --> LT + LT --> DT + + TW --> Load + Load --> Compute + Compute --> Store + + Load --> Coal + Load --> Vec + Load --> SFC + Store --> Bank What is a TileWindow? --------------------- @@ -170,42 +157,30 @@ Space-Filling Curves for Memory Access TileWindow uses :ref:`space-filling curves ` to determine the order in which memory is accessed. Space-filling curves provide cache-friendly traversal patterns that help maximize hardware utilization. The "snake" pattern minimizes the distance between consecutive accesses, keeping data in cache longer. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Linear Access Pattern" - L1["0,1,2,3"] - L2["4,5,6,7"] - L3["8,9,10,11"] - L4["12,13,14,15"] - end - - subgraph "Snake Access Pattern" - S1["0,1,2,3"] - S2["7,6,5,4"] - S3["8,9,10,11"] - S4["15,14,13,12"] - end - - L1 --> L2 - L2 --> L3 - L3 --> L4 - - S1 --> S2 - S2 --> S3 - S3 --> S4 - - style S1 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style S2 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - +.. mermaid:: -.. image:: diagrams/tile_window_2.svg - :alt: Diagram - :align: center + graph LR + subgraph "Linear Access Pattern" + L1["0,1,2,3"] + L2["4,5,6,7"] + L3["8,9,10,11"] + L4["12,13,14,15"] + end + + subgraph "Snake Access Pattern" + S1["0,1,2,3"] + S2["7,6,5,4"] + S3["8,9,10,11"] + S4["15,14,13,12"] + end + + L1 --> L2 + L2 --> L3 + L3 --> L4 + + S1 --> S2 + S2 --> S3 + S3 --> S4 **C++ Space-Filling Curve Implementation:** @@ -237,44 +212,32 @@ TileWindow uses :ref:`space-filling curves ` to det TileWindow Data Flow -------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - flowchart LR - subgraph "Step 1: Create Window" - T["Tensor
[256, 256]"] - O["Origin
(64, 64)"] - W["Window Size
[32, 32]"] - end - - subgraph "Step 2: Apply Distribution" - TD["TileDistribution
Thread mapping"] - TW["TileWindow
Created"] - end - - subgraph "Step 3: Load Data" - GM["Global Memory
Window region"] - REG["Registers
Distributed tensor"] - end - - T --> TW - O --> TW - W --> TW - TD --> TW - - TW --> GM - GM -->|"load()"| REG - - style TW fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style REG fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - +.. mermaid:: + + flowchart LR + subgraph "Step 1: Create Window" + T["Tensor
[256, 256]"] + O["Origin
(64, 64)"] + W["Window Size
[32, 32]"] + end + + subgraph "Step 2: Apply Distribution" + TD["TileDistribution
Thread mapping"] + TW["TileWindow
Created"] + end -.. image:: diagrams/tile_window_3.svg - :alt: Diagram - :align: center + subgraph "Step 3: Load Data" + GM["Global Memory
Window region"] + REG["Registers
Distributed tensor"] + end + + T --> TW + O --> TW + W --> TW + TD --> TW + + TW --> GM + GM -->|"load()"| REG Creating and Using TileWindow ----------------------------- @@ -366,50 +329,37 @@ Calls to ``window.load()`` trigger the following sequence of operations: Load Operation Architecture --------------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Load Analysis" - Analyze["Analyze access pattern
Detect coalescing opportunities"] - end - - subgraph "Vectorization" - V1["Scalar: 4 loads"] - V2["Vector2: 2 loads"] - V4["Vector4: 1 load"] - end - - subgraph "Memory Transaction" - Coal["Coalesced access
32 threads → 1 transaction"] - NonCoal["Non-coalesced
32 threads → 32 transactions"] - end - - subgraph "Result" - Reg["Thread registers
Local data"] - end - - Analyze --> V1 - Analyze --> V2 - Analyze --> V4 - - V4 --> Coal - V1 --> NonCoal - - Coal --> Reg - NonCoal --> Reg - - style V4 fill:#d1fae5,stroke:#10b981,stroke-width:2px - style Coal fill:#d1fae5,stroke:#10b981,stroke-width:2px - style NonCoal fill:#fee2e2,stroke:#ef4444,stroke-width:2px - - +.. mermaid:: + + graph TB + subgraph "Load Analysis" + Analyze["Analyze access pattern
Detect coalescing opportunities"] + end + + subgraph "Vectorization" + V1["Scalar: 4 loads"] + V2["Vector2: 2 loads"] + V4["Vector4: 1 load"] + end + + subgraph "Memory Transaction" + Coal["Coalesced access
32 threads → 1 transaction"] + NonCoal["Non-coalesced
32 threads → 32 transactions"] + end -.. image:: diagrams/tile_window_4.svg - :alt: Diagram - :align: center + subgraph "Result" + Reg["Thread registers
Local data"] + end + + Analyze --> V1 + Analyze --> V2 + Analyze --> V4 + + V4 --> Coal + V1 --> NonCoal + + Coal --> Reg + NonCoal --> Reg Memory Access Patterns ---------------------- @@ -586,39 +536,26 @@ Complete Load-Compute-Store Pipeline Performance Characteristics --------------------------- -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph LR - subgraph "Memory Access Optimization" - V["Vectorization
4x fewer transactions"] - C["Coalescing
32x bandwidth efficiency"] - P["Precomputation
Zero overhead addressing"] - S["Space-filling
Optimal cache usage"] - end - - subgraph "Hardware Utilization" - BW["Memory Bandwidth
Near 100% utilization"] - L["Latency Hiding
Overlapped operations"] - R["Register Reuse
Minimal spills"] - end - - V --> BW - C --> BW - P --> L - S --> R - - style V fill:#e3f2fd,stroke:#1976d2,stroke-width:2px - style C fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - style BW fill:#d1fae5,stroke:#10b981,stroke-width:3px - - - -.. image:: diagrams/tile_window_5.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph LR + subgraph "Memory Access Optimization" + V["Vectorization
4x fewer transactions"] + C["Coalescing
32x bandwidth efficiency"] + P["Precomputation
Zero overhead addressing"] + S["Space-filling
Optimal cache usage"] + end + + subgraph "Hardware Utilization" + BW["Memory Bandwidth
Near 100% utilization"] + L["Latency Hiding
Overlapped operations"] + R["Register Reuse
Minimal spills"] + end + + V --> BW + C --> BW + P --> L + S --> R Best Practices diff --git a/docs/conceptual/ck_tile/transforms.rst b/docs/conceptual/ck_tile/transforms.rst index 3dfea276cbb..64f95cfe132 100644 --- a/docs/conceptual/ck_tile/transforms.rst +++ b/docs/conceptual/ck_tile/transforms.rst @@ -29,36 +29,21 @@ Zero-Copy Logical Operations - **Data Storage**: The actual tensor data remains stored in memory in linear fashion, exactly as specified by the original tensor shape and strides at creation time. See :ref:`ck_tile_buffer_views` for more information about raw memory access. - **Logical Mapping**: Transforms create different logical views of the same underlying data and only change how access coordinates are interpreted. See :ref:`ck_tile_tensor_views` for more information about tensor views. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "Tensor Coordinate Transformation" - US["Lower Dimension Space
Source coordinate system"] - LS["Upper Dimension Space
Target coordinate system"] - - DATA["Linear Data in Memory
Layout determined by tensor
shape & strides"] - end - - US -->|"Forward Transform"| LS - LS -->|"Inverse Transform"| US - - DATA -.->|"Same data,
different views"| US - DATA -.->|"Same data,
different views"| LS - - style US fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style LS fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_1.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "Tensor Coordinate Transformation" + US["Lower Dimension Space
Source coordinate system"] + LS["Upper Dimension Space
Target coordinate system"] + + DATA["Linear Data in Memory
Layout determined by tensor
shape & strides"] + end + + US -->|"Forward Transform"| LS + LS -->|"Inverse Transform"| US + + DATA -.->|"Same data,
different views"| US + DATA -.->|"Same data,
different views"| LS Index Calculation Operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -74,82 +59,54 @@ These operations enable bidirectional navigation between different coordinate re Transform System Architecture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - - subgraph "Transform Types" - EMB["EmbedTransform
Linear → Multi-D Strided"] - UNM["MergeTransform
Multi-D → Linear"] - MRG["UnmergeTransform
Linear → Multi-D"] - REP["ReplicateTransform
0D → Multi-D Broadcast"] - OFF["OffsetTransform
Translation"] - PAS["PassThroughTransform
Identity"] - PAD["PadTransform
Boundaries"] - end - - subgraph "Operations" - FWD["Forward
calculate_lower_index()"] - BWD["Backward
calculate_upper_index()"] - UPD["Update
update_lower_index()"] - end - - EMB --> FWD - UNM --> FWD - MRG --> FWD - REP --> FWD - OFF --> FWD - PAS --> FWD - PAD --> FWD - - style FWD fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - - - - - -.. image:: diagrams/transforms_2.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + + subgraph "Transform Types" + EMB["EmbedTransform
Linear → Multi-D Strided"] + UNM["MergeTransform
Multi-D → Linear"] + MRG["UnmergeTransform
Linear → Multi-D"] + REP["ReplicateTransform
0D → Multi-D Broadcast"] + OFF["OffsetTransform
Translation"] + PAS["PassThroughTransform
Identity"] + PAD["PadTransform
Boundaries"] + end + + subgraph "Operations" + FWD["Forward
calculate_lower_index()"] + BWD["Backward
calculate_upper_index()"] + UPD["Update
update_lower_index()"] + end + + EMB --> FWD + UNM --> FWD + MRG --> FWD + REP --> FWD + OFF --> FWD + PAS --> FWD + PAD --> FWD MergeTransform -------------- MergeTransform collapses multiple dimensions from the lower coordinate space into a single dimension in the upper coordinate space, effectively reducing the dimensionality of the tensor representation while preserving data relationships. This transform is fundamental to the :ref:`tile distribution system `. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "MergeTransform: Multi-D → Linear" - LS["Lower Coordinate Space
2D: [4, 5]
Coord: (2, 3)"] - US["Upper Coordinate Space
1D Linear
Index: 13"] - - DATA["Same Tensor Data
Layout: row-major
Size: 20 elements"] - end - - LS -->|"Forward Transform
2×5 + 3 = 13"| US - US -->|"Inverse Transform
13÷5=2, 13%5=3"| LS - - DATA -.->|"Multi-dimensional
view"| LS - DATA -.->|"Linear
view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_3.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "MergeTransform: Multi-D → Linear" + LS["Lower Coordinate Space
2D: [4, 5]
Coord: (2, 3)"] + US["Upper Coordinate Space
1D Linear
Index: 13"] + + DATA["Same Tensor Data
Layout: row-major
Size: 20 elements"] + end + + LS -->|"Forward Transform
2×5 + 3 = 13"| US + US -->|"Inverse Transform
13÷5=2, 13%5=3"| LS + + DATA -.->|"Multi-dimensional
view"| LS + DATA -.->|"Linear
view"| US **C++ Implementation:** @@ -187,36 +144,21 @@ UnmergeTransform UnmergeTransform expands coordinates from a single dimension in the lower coordinate space into multiple dimensions in the upper coordinate space, effectively increasing the dimensionality of the tensor representation while preserving all data relationships. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "UnmergeTransform: Linear → Multi-D" - LS["Lower Coordinate Space
1D Linear
Index: 14"] - US["Upper Coordinate Space
3D: [3, 4, 2]
Coord: (1, 3, 0)"] - - DATA["Same Tensor Data
Layout: row-major
Size: 24 elements"] - end - - LS -->|"Forward Transform
14 = 1×8 + 3×2 + 0"| US - US -->|"Inverse Transform
linearize back"| LS - - DATA -.->|"Linear
view"| LS - DATA -.->|"Multi-dimensional
view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_4.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "UnmergeTransform: Linear → Multi-D" + LS["Lower Coordinate Space
1D Linear
Index: 14"] + US["Upper Coordinate Space
3D: [3, 4, 2]
Coord: (1, 3, 0)"] + + DATA["Same Tensor Data
Layout: row-major
Size: 24 elements"] + end + + LS -->|"Forward Transform
14 = 1×8 + 3×2 + 0"| US + US -->|"Inverse Transform
linearize back"| LS + + DATA -.->|"Linear
view"| LS + DATA -.->|"Multi-dimensional
view"| US **C++ Implementation:** @@ -264,36 +206,21 @@ EmbedTransform EmbedTransform expands linear indices from the lower coordinate space into multi-dimensional coordinates in the upper coordinate space using configurable strides, enabling flexible strided tensor layouts and sub-tensor views within larger buffers. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "EmbedTransform: Linear → Multi-D Strided" - LS["Lower Coordinate Space
1D Linear
Index: 14"] - US["Upper Coordinate Space
2D: [2, 3]
Coord: (1, 2)"] - - DATA["Linear Buffer in Memory"] - end - - LS -->|"Forward Transform
Strides: [12, 1]
14 ÷ 12 = 1, 14 % 12 = 2"| US - US -->|"Inverse Transform
1×12 + 2×1 = 14"| LS - - DATA -.->|"Linear
index view"| LS - DATA -.->|"Multi-dimensional
strided view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_5.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "EmbedTransform: Linear → Multi-D Strided" + LS["Lower Coordinate Space
1D Linear
Index: 14"] + US["Upper Coordinate Space
2D: [2, 3]
Coord: (1, 2)"] + + DATA["Linear Buffer in Memory"] + end + + LS -->|"Forward Transform
Strides: [12, 1]
14 ÷ 12 = 1, 14 % 12 = 2"| US + US -->|"Inverse Transform
1×12 + 2×1 = 14"| LS + + DATA -.->|"Linear
index view"| LS + DATA -.->|"Multi-dimensional
strided view"| US **C++ Implementation:** @@ -329,36 +256,21 @@ ReplicateTransform ReplicateTransform creates a higher-dimensional tensor by replicating (broadcasting) a lower-dimensional tensor. It's essentially a broadcasting operation that takes a tensor with fewer dimensions and logically replicates it across new dimensions without data duplication. An example is taking a scalar (0-dimensional) input and broadcasting it across multiple dimensions, enabling efficient broadcasting patterns where a single value appears at every position in a multi-dimensional coordinate space. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "ReplicateTransform: 0D → Multi-D Broadcasting" - LS["Lower Coordinate Space
0D: Scalar
Empty coordinate []"] - US["Upper Coordinate Space
2D: [3, 4]
All coords: (i, j)"] - - DATA["Single Scalar Value"] - end - - LS -->|"Forward Transform
[] → (i,j) for any i,j"| US - US -->|"Inverse Transform
(i,j) → [] for any i,j"| LS - - DATA -.->|"One scalar
value"| LS - DATA -.->|"Broadcasted view
at all positions"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_6.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "ReplicateTransform: 0D → Multi-D Broadcasting" + LS["Lower Coordinate Space
0D: Scalar
Empty coordinate []"] + US["Upper Coordinate Space
2D: [3, 4]
All coords: (i, j)"] + + DATA["Single Scalar Value"] + end + + LS -->|"Forward Transform
[] → (i,j) for any i,j"| US + US -->|"Inverse Transform
(i,j) → [] for any i,j"| LS + + DATA -.->|"One scalar
value"| LS + DATA -.->|"Broadcasted view
at all positions"| US **C++ Implementation:** @@ -406,36 +318,21 @@ OffsetTransform OffsetTransform shifts coordinates by a fixed offset, creating a translated view of the coordinate space. It performs translation operations where each coordinate in the upper space is mapped to a coordinate in the lower space by adding a constant offset. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "OffsetTransform: 1D → 1D Translation" - LS["Lower Coordinate Space
1D: [0, 63]
Coord: index + offset"] - US["Upper Coordinate Space
1D: [0, 47]
Coord: index"] - - DATA["Linear Buffer in Memory"] - end - - LS -->|"Forward Transform
idx → idx + 16"| US - US -->|"Inverse Transform
idx + 16 → idx"| LS - - DATA -.->|"Lower
view"| LS - DATA -.->|"Upper
view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_7.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "OffsetTransform: 1D → 1D Translation" + LS["Lower Coordinate Space
1D: [0, 63]
Coord: index + offset"] + US["Upper Coordinate Space
1D: [0, 47]
Coord: index"] + + DATA["Linear Buffer in Memory"] + end + + LS -->|"Forward Transform
idx → idx + 16"| US + US -->|"Inverse Transform
idx + 16 → idx"| LS + + DATA -.->|"Lower
view"| LS + DATA -.->|"Upper
view"| US **C++ Implementation:** @@ -483,36 +380,21 @@ PassThroughTransform - Identity No-op transform that passes coordinates unchanged. The PassThrough transform is the simplest coordinate transformation in CK Tile, implementing a perfect identity mapping where input coordinates are passed through unchanged to the output. This transform is essential as a placeholder in transformation chains and for dimensions that require no modification. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "PassThroughTransform: 1D → 1D Identity" - LS["Lower Coordinate Space
1D: [0, 59]
Coord: index"] - US["Upper Coordinate Space
1D: [0, 59]
Coord: index"] - - DATA["Linear Buffer in Memory"] - end - - LS -.->|"Perfect Identity
idx → idx"| US - US -.->|"Perfect Identity
idx → idx"| LS - - DATA -->|"Same buffer
same view"| LS - DATA -->|"Same buffer
same view"| US - - style LS fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px - style US fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_8.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "PassThroughTransform: 1D → 1D Identity" + LS["Lower Coordinate Space
1D: [0, 59]
Coord: index"] + US["Upper Coordinate Space
1D: [0, 59]
Coord: index"] + + DATA["Linear Buffer in Memory"] + end + + LS -.->|"Perfect Identity
idx → idx"| US + US -.->|"Perfect Identity
idx → idx"| LS + + DATA -->|"Same buffer
same view"| LS + DATA -->|"Same buffer
same view"| US **C++ Implementation:** @@ -555,39 +437,21 @@ PadTransform PadTransform adds padding to tensor dimensions, mapping coordinates from upper dimension space (with padding) to lower dimension space (original data). -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "PadTransform: 1D → 1D with Padding" - LS["Lower Coordinate Space
1D: [0, 2] (original data)"] - US["Upper Coordinate Space
1D: [0, 4] (with padding)"] - - DATA["Tensor Data in Memory"] - end - - LS -->|"Forward Transform
idx + left_pad"| US - US -->|"Inverse Transform
idx - left_pad"| LS - - DATA -.->|"Original view"| LS - DATA -.->|"Padded view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_9.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "PadTransform: 1D → 1D with Padding" + LS["Lower Coordinate Space
1D: [0, 2] (original data)"] + US["Upper Coordinate Space
1D: [0, 4] (with padding)"] + + DATA["Tensor Data in Memory"] + end + + LS -->|"Forward Transform
idx + left_pad"| US + US -->|"Inverse Transform
idx - left_pad"| LS + + DATA -.->|"Original view"| LS + DATA -.->|"Padded view"| US **C++ Implementation:** @@ -633,106 +497,63 @@ XorTransform XorTransform applies a 2D XOR mapping for specialized memory access patterns. It performs XOR operations on coordinates to create transformed memory layouts for specific algorithmic optimizations, particularly useful for avoiding :ref:`LDS bank conflicts `. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "XorTransform: 2D → 2D XOR Mapping" - LS["Lower Coordinate Space
2D: [4, 8]
XOR-transformed coords"] - US["Upper Coordinate Space
2D: [4, 8]
Normal coords"] - - DATA["Same Tensor Data"] - end - - LS -->|"Forward Transform
apply XOR reverse"| US - US -->|"Inverse Transform
apply XOR mapping"| LS - - DATA -.->|"XOR pattern
view"| LS - DATA -.->|"Normal
view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_10.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "XorTransform: 2D → 2D XOR Mapping" + LS["Lower Coordinate Space
2D: [4, 8]
XOR-transformed coords"] + US["Upper Coordinate Space
2D: [4, 8]
Normal coords"] + + DATA["Same Tensor Data"] + end + + LS -->|"Forward Transform
apply XOR reverse"| US + US -->|"Inverse Transform
apply XOR mapping"| LS + + DATA -.->|"XOR pattern
view"| LS + DATA -.->|"Normal
view"| US SliceTransform ~~~~~~~~~~~~~~ SliceTransform extracts a sub-region from a tensor dimension. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "SliceTransform: 1D → 1D Sub-region" - LS["Lower Coordinate Space
1D: [0, 9] (original range)"] - US["Upper Coordinate Space
1D: [0, 4] (slice range)"] - - DATA["Tensor Data in Memory"] - end - - LS -->|"Forward Transform
idx + slice_begin"| US - US -->|"Inverse Transform
idx - slice_begin"| LS - - DATA -.->|"Full tensor
view"| LS - DATA -.->|"Sub-region
view"| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - - - -.. image:: diagrams/transforms_11.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "SliceTransform: 1D → 1D Sub-region" + LS["Lower Coordinate Space
1D: [0, 9] (original range)"] + US["Upper Coordinate Space
1D: [0, 4] (slice range)"] + + DATA["Tensor Data in Memory"] + end + + LS -->|"Forward Transform
idx + slice_begin"| US + US -->|"Inverse Transform
idx - slice_begin"| LS + + DATA -.->|"Full tensor
view"| LS + DATA -.->|"Sub-region
view"| US ModuloTransform ~~~~~~~~~~~~~~~ ModuloTransform applies cyclic wrapping to coordinates using modulo operations. -.. - Original mermaid diagram (edit here, then run update_diagrams.py) - - .. mermaid:: - - graph TB - subgraph "ModuloTransform: 1D → 1D Cyclic" - LS["Lower Coordinate Space
1D: [0, 3] (modulus range)"] - US["Upper Coordinate Space
1D: [0, 15] (full range)"] - - DATA["Tensor Data in Memory"] - end - - LS -->|"Forward Transform
idx * cycle_count"| US - US -->|"Inverse Transform
idx % modulus"| LS - - DATA -.->|" "| LS - DATA -.->|" "| US - - style LS fill:#e3f2fd,stroke:#1976d2,stroke-width:3px - style US fill:#fff3e0,stroke:#f57c00,stroke-width:3px - style DATA fill:#f0f9ff,stroke:#0284c7,stroke-width:2px,stroke-dasharray: 5 5 - - - -.. image:: diagrams/transforms_12.svg - :alt: Diagram - :align: center +.. mermaid:: + + graph TB + subgraph "ModuloTransform: 1D → 1D Cyclic" + LS["Lower Coordinate Space
1D: [0, 3] (modulus range)"] + US["Upper Coordinate Space
1D: [0, 15] (full range)"] + + DATA["Tensor Data in Memory"] + end + + LS -->|"Forward Transform
idx * cycle_count"| US + US -->|"Inverse Transform
idx % modulus"| LS + + DATA -.->|" "| LS + DATA -.->|" "| US Summary ------- diff --git a/docs/conf.py b/docs/conf.py index bb7847e1d6d..cc14d5ed138 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,8 +13,8 @@ html_theme_options = {"flavor": "list"} -with open('../CMakeLists.txt', encoding='utf-8') as f: - match = re.search(r'.*set\(version ([0-9.]+)[^0-9.]+', f.read()) +with open("../CMakeLists.txt", encoding="utf-8") as f: + match = re.search(r".*set\(version ([0-9.]+)[^0-9.]+", f.read()) if not match: raise ValueError("VERSION not found!") version_number = match[1] @@ -35,9 +35,9 @@ external_projects_current_project = "composable_kernel" mathjax3_config = { -'tex': { - 'macros': { - 'diag': '\\operatorname{diag}', + "tex": { + "macros": { + "diag": "\\operatorname{diag}", } } } @@ -45,7 +45,13 @@ for sphinx_var in ROCmDocs.SPHINX_VARS: globals()[sphinx_var] = getattr(docs_core, sphinx_var) -extensions += ['sphinxcontrib.bibtex'] -bibtex_bibfiles = ['refs.bib'] +extensions += [ + "sphinxcontrib.mermaid", + "sphinxcontrib.bibtex", +] -cpp_id_attributes = ["__global__", "__device__", "__host__"] \ No newline at end of file +mermaid_output_format = "raw" +bibtex_bibfiles = ["refs.bib"] + +cpp_id_attributes = ["__global__", "__device__", "__host__"] +extensions = globals().get("extensions", []) + ["sphinxcontrib.datatemplates"] diff --git a/docs/data/reference/precision-support.yaml b/docs/data/reference/precision-support.yaml new file mode 100644 index 00000000000..a74fd71b902 --- /dev/null +++ b/docs/data/reference/precision-support.yaml @@ -0,0 +1,25 @@ +name: "Composable Kernel" +tag: "composable-kernel" +data_types: + - type: "int8" + support: "✅" + - type: "int32" + support: "✅" + - type: "float4 (E2M1)" + support: "✅" + - type: "float6 (E2M3)" + support: "✅" + - type: "float6 (E3M2)" + support: "✅" + - type: "float8 (E4M3)" + support: "✅" + - type: "float8 (E5M2)" + support: "✅" + - type: "float16" + support: "✅" + - type: "bfloat16" + support: "✅" + - type: "float32" + support: "✅" + - type: "float64" + support: "✅" diff --git a/docs/index.rst b/docs/index.rst index 2538269a25d..3041aa05948 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -19,7 +19,6 @@ The Composable Kernel project is located in https://github.com/ROCm/rocm-librari * :doc:`Install Composable Kernel <./install/Composable-Kernel-install>` * :doc:`Build from source <./install/Composable-Kernel-build>` - * :doc:`Composable Kernel Docker images <./install/Composable-Kernel-Docker>` .. grid-item-card:: Conceptual @@ -34,6 +33,7 @@ The Composable Kernel project is located in https://github.com/ROCm/rocm-librari .. grid-item-card:: Reference + * :doc:`Composable Kernel precision support <./reference/Composable_Kernel_data_type_support>` * :doc:`Composable Kernel supported scalar types <./reference/Composable_Kernel_supported_scalar_types>` * :doc:`Composable Kernel custom types <./reference/Composable_Kernel_custom_types>` * :doc:`Composable Kernel vector utilities <./reference/Composable_Kernel_vector_utilities>` diff --git a/docs/install/Composable-Kernel-Docker.rst b/docs/install/Composable-Kernel-Docker.rst deleted file mode 100644 index d40cc2bff5c..00000000000 --- a/docs/install/Composable-Kernel-Docker.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. meta:: - :description: Composable Kernel docker files - :keywords: composable kernel, CK, ROCm, API, docker - -.. _docker-hub: - -******************************************************************** -Composable Kernel Docker containers -******************************************************************** - -Docker images that include all the required prerequisites for building Composable Kernel are available on `Docker Hub `_. - -The images also contain `ROCm `_, `CMake `_, and the `ROCm LLVM compiler infrastructure `_. - -Composable Kernel Docker images are named according to their operating system and ROCm version. For example, a Docker image named ``ck_ub22.04_rocm6.3`` would correspond to an Ubuntu 22.04 image with ROCm 6.3. - diff --git a/docs/install/Composable-Kernel-build.rst b/docs/install/Composable-Kernel-build.rst index c6fb0d2fa1a..c5490765ef7 100644 --- a/docs/install/Composable-Kernel-build.rst +++ b/docs/install/Composable-Kernel-build.rst @@ -6,41 +6,24 @@ Build and install Composable Kernel from source *********************************************** -To build Composable Kernel as part of the ROCm Core SDK, see `TheRock build -instructions -`__. -TheRock is the recommended way to build ROCm components from source. +To build Composable Kernel (CK) as part of the ROCm Core SDK, see `TheRock build +instructions `__. TheRock is the recommended way to build ROCm components from source. -Alternatively, you can build Composable Kernel standalone using the following -instructions. +Alternatively, you can build Composable Kernel standalone using the following instructions. Prerequisites ============= The following prerequisites are required to build and install Composable Kernel: -* cmake -* hip-rocclr -* iputils-ping -* jq -* libelf-dev -* libncurses5-dev -* libnuma-dev -* libpthread-stubs0-dev -* llvm-amdgpu -* mpich -* net-tools -* python3 -* python3-dev -* python3-pip -* redis -* rocm-llvm-dev -* zlib1g-dev -* libzstd-dev -* openssh-server -* clang-format-18 - -Docker images that include all the required prerequisites for building Composable Kernel are available on `Docker Hub `_. +* `CMake `_ 3.21 or later +* `Python `_ 3.8 or later +* `Git `_ +* A C++ compiler from the ROCm install, typically ``/opt/rocm/llvm/bin/clang++`` or ``hipcc`` on Linux + +Composable Kernel uses HIP to compile device code. Set ``CMAKE_PREFIX_PATH`` to the ROCm install prefix and ``CMAKE_CXX_COMPILER`` to the ROCm Clang or ``hipcc`` path when you configure the build. + +Pre-built Docker images that bundle ROCm, CMake, and the LLVM toolchain are on `Docker Hub `_. Build and install ================= @@ -81,30 +64,33 @@ Change directory to the ``build`` directory and generate the makefile using the Other build options are: -* ``DISABLE_DL_KERNELS``: Set this to "ON" to not build deep learning (DL) and data parallel primitive (DPP) instances. +* ``DISABLE_DL_KERNELS``: Set this to "ON" to not build deep learning (DL) and data parallel primitive (DPP) instances. DL and DPP instances are useful on architectures that don't support XDL or WMMA. +* ``CK_USE_FP8_ON_UNSUPPORTED_ARCH``: Set to ``ON`` to build FP8 data type instances on gfx90a without native FP8 support. +* ``GPU_TARGETS``: Target GPU architectures. The standard HIP variable. Composable Kernel forwards the list to HIP, so HIP's compatibility rules apply. List one architecture or a small set from the same family. Set this option to build the tests, examples, and tutorials. Enclose the list in quotation marks and separate entries with semicolons (``;``). For example, ``cmake -D GPU_TARGETS="gfx908;gfx90a"``. +* ``GPU_ARCHS``: Target GPU architectures. Composable Kernel-specific. Use this option to build the Composable Kernel library for architectures from different families. If you set ``GPU_ARCHS``, Composable Kernel clears ``GPU_TARGETS`` before configuring HIP. Composable Kernel then builds only the library and skips the tests, examples, and tutorials. Enclose the list in quotation marks and separate entries with semicolons (``;``). For example, ``cmake -D GPU_ARCHS="gfx908;gfx1100"``. +* ``CMAKE_BUILD_TYPE``: The build type. Can be ``None``, ``Release``, ``Debug``, ``RelWithDebInfo``, or ``MinSizeRel``. CMake uses ``Release`` by default. - .. note:: +.. note:: - DL and DPP instances are useful on architectures that don't support XDL or WMMA. + When both ``GPU_TARGETS`` and ``GPU_ARCHS`` are set, Composable Kernel uses ``GPU_ARCHS`` and clears ``GPU_TARGETS``. When neither is set, Composable Kernel picks a default target list based on the detected HIP version. Composable Kernel drops the unsupported architectures ``gfx900``, ``gfx906``, and ``gfx90c``, along with any target the installed compiler can't build for. -* ``CK_USE_FP8_ON_UNSUPPORTED_ARCH``: Set to ``ON`` to build FP8 data type instances on gfx90a without native FP8 support. -* ``GPU_TARGETS``: Target architectures. Target architectures in this list must all be different versions of the same architectures. Enclose the list of targets in quotation marks. Separate multiple targets with semicolons (``;``). For example, ``cmake -D GPU_TARGETS="gfx908;gfx90a"``. This option is required to build tests and examples. -* ``GPU_ARCHS``: Target architectures. Target architectures in this list are not limited to different versions of the same architectures. Enclose the list of targets in quotation marks. Separate multiple targets with semicolons (``;``). For example, ``cmake -D GPU_TARGETS="gfx908;gfx1100"``. -* ``CMAKE_BUILD_TYPE``: The build type. Can be ``None``, ``Release``, ``Debug``, ``RelWithDebInfo``, or ``MinSizeRel``. CMake will use ``Release`` by default. +Build Composable Kernel using the generated makefile. With a default configuration, the build produces the Composable Kernel libraries, the ``ckProfiler`` benchmarking tool, the example binaries, the tutorial binaries, and the test binaries. The output is saved to ``build/lib/`` and ``build/bin/``. The Composable Kernel headers stay in the source tree until ``make install`` copies them to the install location. .. note:: - If neither ``GPU_TARGETS`` nor ``GPU_ARCHS`` is specified, Composable Kernel will be built for all targets supported by the compiler. - -Build Composable Kernel using the generated makefile. This will build the library, the examples, and the tests, and save them to ``bin``. + A default Composable Kernel build can take an hour or more on a workstation. Most of the time goes to compiling operator instances, and build time scales with the number of GPU architectures you select. Limit ``GPU_TARGETS`` to your hardware to cut build time. .. code-block:: bash make -j20 -The ``-j`` option speeds up the build by using multiple threads in parallel. For example, ``-j20`` uses twenty threads in parallel. On average, each thread will use 2GB of memory. Make sure that the number of threads you use doesn't exceed the available memory in your system. +The ``-j`` option runs build steps in parallel. For example, ``-j20`` runs up to twenty jobs at a time. Each parallel job can use several gigabytes of memory because Composable Kernel instance files expand large template instantiations, and link jobs use more memory than compile jobs. Pick a ``-j`` value that fits your available RAM, and lower it if compiles fail with out-of-memory errors. + +.. note:: + + Don't run ``-j`` without a number. Bare ``-j`` launches an unbounded number of jobs and can exhaust memory. -Using ``-j`` alone will launch an unlimited number of threads and is not recommended. + With Ninja, set ``-D CK_PARALLEL_COMPILE_JOBS=N`` and ``-D CK_PARALLEL_LINK_JOBS=M`` at configure time to cap compile and link jobs separately. These options have no effect with Make. Install the Composable Kernel library: diff --git a/docs/install/Composable-Kernel-install.rst b/docs/install/Composable-Kernel-install.rst index 7bbf5867c05..f1830b41899 100644 --- a/docs/install/Composable-Kernel-install.rst +++ b/docs/install/Composable-Kernel-install.rst @@ -4,42 +4,33 @@ .. _installation: -************************* +************************** Install Composable Kernel -************************* +************************** -Before you begin, verify that your system is supported. For more information, -see :ref:`ROCm Core SDK components `. +Before you begin, verify that your system is supported. For more information, see :ref:`ROCm Core SDK components `. -For advanced workflows, source builds, or custom configurations, see -:doc:`./Composable-Kernel-build`. +For advanced workflows, source builds, or custom configurations, see :doc:`./Composable-Kernel-build`. .. _install-rocm: Install the ROCm Core SDK ========================= -Composable Kernel (CK) is included with the ROCm Core SDK on Linux and Windows. -For the most complete installation, we recommend that developers use the -``amdrocm-core-sdk`` meta package on Linux. - -For instructions, see :doc:`Install AMD ROCm `. Use the -selector panel on that page to view instructions appropriate for your system -environment. +Composable Kernel (CK) is included with the ROCm Core SDK on Linux and Windows. For the complete Core SDK installation, use the +``amdrocm-core-sdk`` package. See :doc:`Install AMD ROCm ` for more information. .. _install-base: -Install the ROCm CK package on Linux -==================================== +Install the Composable Kernel package on Linux +================================================ -Alternatively, if you want to install Composable Kernel as part of the ROCm -without additional ROCm libraries and tools, install the ``amdrocm-ck`` -package. +Alternatively, you can use the ``amdrocm-ck`` package to install Composable Kernel without the full ROCm Core SDK. 1. Complete the :doc:`ROCm installation prerequisites ` to install dependencies and configure GPU access permissions. -2. Install the ROCm CK package that matches your desired ROCm version. Package +2. Install the Composable Kernel package that matches your desired ROCm version. Package names use the following format: .. code-block:: shell-session @@ -64,27 +55,27 @@ package. .. code-block:: bash - sudo apt install amdrocm-ck + sudo apt install amdrocm-ck- .. tab-item:: RHEL-based distros .. code-block:: bash - sudo dnf install amdrocm-ck + sudo dnf install amdrocm-ck- .. tab-item:: SLES .. code-block:: bash - sudo zypper install amdrocm-ck + sudo zypper install amdrocm-ck- .. _install-nightly: Install a nightly build ======================= -The `TheRock `__ build system also publishes -nightly builds for the ROCm Core SDK and its components, including Composable -Kernel. See `Nightly release status -`__ for details. +The `TheRock `__ build system also publishes nightly builds for the ROCm Core SDK and its components, including Composable Kernel. See `Nightly release status `__ for details. + +.. note:: + If you choose to install from a nightly build artifact, you'll need to set ``HIP_PLATFORM=amd`` and ``LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib`` after installation. \ No newline at end of file diff --git a/docs/reference/Composable_Kernel_data_type_support.rst b/docs/reference/Composable_Kernel_data_type_support.rst new file mode 100644 index 00000000000..6407fa8f94c --- /dev/null +++ b/docs/reference/Composable_Kernel_data_type_support.rst @@ -0,0 +1,67 @@ +.. meta:: + :description: Composable Kernel library precision support + :keywords: composable kernel, scalar, data types, support, CK, ROCm, precision + +.. _composablekernel-data-type-support: + +*************************************************** +Composable Kernel precision support +*************************************************** + +This topic lists the data type support for the Composable Kernel library on AMD +GPUs. + +This page lists the data types supported by the library itself and does not +indicate hardware support. A type listed here is only usable if the GPU +architecture also supports it; otherwise it is unsupported. For data type support +across the other ROCm libraries and by GPU architecture, see the +:doc:`Data types and precision support page `. + +.. _composablekernel-input-output-type-support: + +Supported data types overview +============================= + +The following table summarizes the input and output data types supported by +Composable Kernel. + +.. list-table:: + :header-rows: 1 + + * + - Icon + - Definition + * + - ✅ + - Fully supported as both an input and output type. + * + - ⚠️ + - Partially supported as an input or output type. + +Data types not listed in the table below are not supported. + +.. datatemplate:yaml:: /data/reference/precision-support.yaml + + .. list-table:: + :header-rows: 1 + :widths: 70, 30 + + * + - Data type + - Support + {% for data_type in data.data_types %} + * + - {{ data_type.type }} + - {{ data_type.support }} + {% endfor %} + +Related references +================== + +For details about the underlying C++ types used by Composable Kernel, see the +following pages: + +* :doc:`Supported scalar data types ` — + the C++ scalar types, their bit widths, and bit-layout descriptions. +* :doc:`Custom types ` — the custom types + Composable Kernel defines for specialized operations. diff --git a/docs/reference/Composable_Kernel_supported_scalar_types.rst b/docs/reference/Composable_Kernel_supported_scalar_types.rst index 7ea1a9eaeb0..47c646b69bd 100644 --- a/docs/reference/Composable_Kernel_supported_scalar_types.rst +++ b/docs/reference/Composable_Kernel_supported_scalar_types.rst @@ -2,6 +2,8 @@ :description: Composable Kernel supported scalar types :keywords: composable kernel, scalar, data types, support, CK, ROCm +.. _composablekernel-supported-scalar-types: + *************************************************** Composable Kernel supported scalar data types *************************************************** diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index d5140261b91..ad6de3413b4 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -9,8 +9,6 @@ subtrees: title: Install Composable Kernel - file: install/Composable-Kernel-build.rst title: Build from source - - file: install/Composable-Kernel-Docker.rst - title: Docker images - caption: Conceptual entries: @@ -30,6 +28,8 @@ subtrees: - caption: Reference entries: + - file: reference/Composable_Kernel_data_type_support.rst + title: Precision support - file: reference/Composable_Kernel_supported_scalar_types.rst title: Scalar types - file: reference/Composable_Kernel_custom_types.rst diff --git a/docs/sphinx/requirements.in b/docs/sphinx/requirements.in index f2fb27e2b94..1936e87b233 100644 --- a/docs/sphinx/requirements.in +++ b/docs/sphinx/requirements.in @@ -1,2 +1,4 @@ rocm-docs-core[api_reference]==1.31.3 sphinxcontrib-bibtex==2.6.5 +sphinxcontrib-mermaid>=1.0 +sphinxcontrib-datatemplates==0.11.0 diff --git a/docs/sphinx/requirements.txt b/docs/sphinx/requirements.txt index e36975219d8..674797c6e03 100644 --- a/docs/sphinx/requirements.txt +++ b/docs/sphinx/requirements.txt @@ -10,12 +10,12 @@ alabaster==1.0.0 # via sphinx asttokens==3.0.1 # via stack-data -attrs==25.4.0 +attrs==26.1.0 # via # jsonschema # jupyter-cache # referencing -babel==2.17.0 +babel==2.18.0 # via # pydata-sphinx-theme # sphinx @@ -23,15 +23,15 @@ beautifulsoup4==4.14.3 # via pydata-sphinx-theme breathe==4.36.0 # via rocm-docs-core -certifi==2026.1.4 +certifi==2026.5.20 # via requests cffi==2.0.0 # via # cryptography # pynacl -charset-normalizer==3.4.4 +charset-normalizer==3.4.7 # via requests -click==8.3.1 +click==8.4.1 # via # click-log # doxysphinx @@ -41,11 +41,11 @@ click-log==0.4.0 # via doxysphinx comm==0.2.3 # via ipykernel -cryptography==46.0.3 +cryptography==48.0.0 # via pyjwt -debugpy==1.8.19 +debugpy==1.8.21 # via ipykernel -decorator==5.2.1 +decorator==5.3.1 # via ipython docutils==0.21.2 # via @@ -66,30 +66,31 @@ fastjsonschema==2.21.2 # rocm-docs-core gitdb==4.0.12 # via gitpython -gitpython==3.1.46 +gitpython==3.1.50 # via rocm-docs-core -greenlet==3.3.0 +greenlet==3.5.1 # via sqlalchemy -idna==3.15 +idna==3.18 # via requests -imagesize==1.4.1 +imagesize==2.0.0 # via sphinx -importlib-metadata==8.7.1 +importlib-metadata==9.0.0 # via # jupyter-cache # myst-nb -ipykernel==7.1.0 +ipykernel==7.2.0 # via myst-nb -ipython==8.38.0 +ipython==8.39.0 # via # ipykernel # myst-nb -jedi==0.19.2 +jedi==0.20.0 # via ipython jinja2==3.1.6 # via # myst-parser # sphinx + # sphinxcontrib-mermaid jsonschema==4.26.0 # via nbformat jsonschema-specifications==2025.9.1 @@ -118,17 +119,17 @@ markdown-it-py==3.0.0 # myst-parser markupsafe==3.0.3 # via jinja2 -matplotlib-inline==0.2.1 +matplotlib-inline==0.2.2 # via # ipykernel # ipython -mdit-py-plugins==0.5.0 +mdit-py-plugins==0.6.1 # via myst-parser mdurl==0.1.2 # via markdown-it-py mpire==2.10.2 # via doxysphinx -myst-nb==1.3.0 +myst-nb==1.4.0 # via rocm-docs-core myst-parser==4.0.1 # via myst-nb @@ -143,40 +144,40 @@ nbformat==5.10.4 # nbclient nest-asyncio==1.6.0 # via ipykernel -packaging==25.0 +packaging==26.2 # via # ipykernel # pydata-sphinx-theme # sphinx -parso==0.8.5 +parso==0.8.7 # via jedi pexpect==4.9.0 # via ipython -platformdirs==4.5.1 +platformdirs==4.10.0 # via jupyter-core prompt-toolkit==3.0.52 # via ipython -psutil==7.2.1 +psutil==7.2.2 # via ipykernel ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -pybtex==0.25.1 +pybtex==0.26.1 # via # pybtex-docutils # sphinxcontrib-bibtex pybtex-docutils==1.0.3 # via sphinxcontrib-bibtex -pycparser==2.23 +pycparser==3.0 # via cffi pydata-sphinx-theme==0.15.4 # via # rocm-docs-core # sphinx-book-theme -pygithub==2.8.1 +pygithub==2.9.1 # via rocm-docs-core -pygments==2.19.2 +pygments==2.20.0 # via # accessible-pygments # ipython @@ -185,7 +186,7 @@ pygments==2.19.2 # sphinx pyjson5==1.6.9 # via doxysphinx -pyjwt[crypto]==2.10.1 +pyjwt[crypto]==2.13.0 # via pygithub pynacl==1.6.2 # via pygithub @@ -201,6 +202,7 @@ pyyaml==6.0.3 # pybtex # rocm-docs-core # sphinx-external-toc + # sphinxcontrib-mermaid pyzmq==27.1.0 # via # ipykernel @@ -209,7 +211,7 @@ referencing==0.37.0 # via # jsonschema # jsonschema-specifications -requests==2.33.0 +requests==2.34.2 # via # pygithub # sphinx @@ -221,11 +223,11 @@ rpds-py==0.30.0 # referencing six==1.17.0 # via python-dateutil -smmap==5.0.2 +smmap==5.0.3 # via gitdb -snowballstemmer==3.0.1 +snowballstemmer==3.1.1 # via sphinx -soupsieve==2.8.1 +soupsieve==2.8.4 # via beautifulsoup4 sphinx==8.1.3 # via @@ -238,47 +240,57 @@ sphinx==8.1.3 # sphinx-copybutton # sphinx-design # sphinx-external-toc + # sphinx-multitoc-numbering # sphinx-notfound-page # sphinxcontrib-bibtex + # sphinxcontrib-mermaid sphinx-book-theme==1.1.4 # via rocm-docs-core sphinx-copybutton==0.5.2 # via rocm-docs-core sphinx-design==0.6.1 # via rocm-docs-core -sphinx-external-toc==1.0.1 +sphinx-external-toc==1.1.0 # via rocm-docs-core +sphinx-multitoc-numbering==0.1.3 + # via sphinx-external-toc sphinx-notfound-page==1.1.0 # via rocm-docs-core sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-bibtex==2.6.5 # via -r requirements.in +sphinxcontrib-datatemplates==0.11.0 + # via -r requirements.in sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx +sphinxcontrib-mermaid==2.0.2 + # via -r requirements.in sphinxcontrib-qthelp==2.0.0 # via sphinx +sphinxcontrib-runcmd==0.2.0 + # via sphinxcontrib-datatemplates sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlalchemy==2.0.45 +sqlalchemy==2.0.50 # via jupyter-cache stack-data==0.6.3 # via ipython -tabulate==0.9.0 +tabulate==0.10.0 # via jupyter-cache -tomli==2.4.0 +tomli==2.4.1 # via sphinx -tornado==6.5.5 +tornado==6.5.6 # via # ipykernel # jupyter-client tqdm==4.67.3 # via mpire -traitlets==5.14.3 +traitlets==5.15.1 # via # ipykernel # ipython @@ -296,13 +308,14 @@ typing-extensions==4.15.0 # myst-nb # pydata-sphinx-theme # pygithub + # pyjwt # referencing # sqlalchemy urllib3==2.7.0 # via # pygithub # requests -wcwidth==0.2.14 +wcwidth==0.7.0 # via prompt-toolkit -zipp==3.23.0 +zipp==4.1.0 # via importlib-metadata diff --git a/example/01_gemm/CMakeLists.txt b/example/01_gemm/CMakeLists.txt index bc2e6a78e7c..83aea5a33b9 100644 --- a/example/01_gemm/CMakeLists.txt +++ b/example/01_gemm/CMakeLists.txt @@ -25,8 +25,6 @@ add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16) add_example_executable(example_gemm_xdl_fp16_v2 gemm_xdl_fp16_v2.cpp) add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16_v2) -add_example_executable(example_gemm_xdl_fp16_streamk_v3 gemm_xdl_fp16_streamk_v3.cpp) -add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16_streamk_v3) add_example_executable(example_gemm_xdl_fp16_v3 gemm_xdl_fp16_v3.cpp) add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16_v3) add_example_executable(example_gemm_xdl_fp8_v3 gemm_xdl_fp8_v3.cpp) @@ -35,10 +33,6 @@ add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp8_v3) add_example_executable(example_gemm_xdl_fp16_fp8_v3 gemm_xdl_fp16_fp8_v3.cpp) add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16_fp8_v3) - -add_example_executable(example_gemm_xdl_fp16_fp8_streamk_v3 gemm_xdl_fp16_fp8_streamk_v3.cpp) -add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp16_fp8_streamk_v3) - add_example_executable(example_gemm_xdl_bf16_v3 gemm_xdl_bf16_v3.cpp) add_example_dependencies(example_gemm_xdl example_gemm_xdl_bf16_v3) @@ -80,8 +74,6 @@ endif(USE_BITINT_EXTENSION_INT4) add_example_executable(example_gemm_xdl_fp64 gemm_xdl_fp64.cpp) add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp64) -add_example_executable(example_gemm_xdl_streamk gemm_xdl_streamk.cpp) - list(APPEND gpu_list gfx90a gfx942 gfx950 gfx1250) set(target 0) foreach(gpu IN LISTS GPU_TARGETS) @@ -95,19 +87,6 @@ foreach(gpu IN LISTS GPU_TARGETS) endif() endforeach() -list(APPEND gpu_list gfx90a gfx942 gfx950 gfx1200 gfx1201 gfx12-generic gfx1250) -set(target 0) -foreach(gpu IN LISTS GPU_TARGETS) - if(gpu IN_LIST gpu_list AND target EQUAL 0) - add_example_executable(example_gemm_xdl_bf16_streamk_v3 gemm_xdl_bf16_streamk_v3.cpp) - add_example_dependencies(example_gemm_xdl example_gemm_xdl_bf16_streamk_v3) - - add_example_executable(example_gemm_xdl_fp8_streamk_v3 gemm_xdl_fp8_streamk_v3.cpp) - add_example_dependencies(example_gemm_xdl example_gemm_xdl_fp8_streamk_v3) - set(target 1) - endif() -endforeach() - list(APPEND gpu_list_tf32 gfx942 gfx950) set(target 0) foreach(gpu IN LISTS GPU_TARGETS) diff --git a/example/01_gemm/README.md b/example/01_gemm/README.md index ae0e918b8d0..7e82067df2c 100644 --- a/example/01_gemm/README.md +++ b/example/01_gemm/README.md @@ -162,8 +162,6 @@ Split-K is supported (requires zeroing output buffer if splitK > 1). - **DeviceGemmMultipleDLayernorm**: GEMM fused with layernorm - **DeviceGemmMultipleDMultipleR**: GEMM fused with reductions and custom global reductions - **DeviceGemmReduce**: GEMM fused with reduction -- **DeviceGemm_Streamk_V2**: Stream K with reduction instead of AtomicAdd -- **DeviceGemmStreamK**: Stream K using AtomicAdd --- diff --git a/example/01_gemm/common.hpp b/example/01_gemm/common.hpp index a7dca891fd5..07eed72aa50 100644 --- a/example/01_gemm/common.hpp +++ b/example/01_gemm/common.hpp @@ -42,33 +42,6 @@ struct ProblemSize final ck::index_t StrideC = -1; }; -struct ProblemSizeStreamK final -{ - ck::index_t M = 3840; - ck::index_t N = 4096; - ck::index_t K = 4096; - - ck::index_t StrideA = -1; - ck::index_t StrideB = -1; - ck::index_t StrideC = -1; - - ck::index_t NumSKBlocks = -1; // number of stream-k blocks -}; -struct ProblemSizeStreamK_universal final -{ - ck::index_t M = 3840; - ck::index_t N = 4096; - ck::index_t K = 4096; - - ck::index_t StrideA = -1; - ck::index_t StrideB = -1; - ck::index_t StrideC = -1; - - ck::index_t Grid_size = -1; // defaults to max occupancy - ck::index_t Streamk_sel = 1; // defaults to 1-tile SK - ck::StreamKReductionStrategy reduction_strategy = ck::StreamKReductionStrategy::Atomic; -}; - struct ProblemSizeSplitK final { ck::index_t M = 3840; @@ -148,123 +121,6 @@ bool parse_cmd_args(int argc, return true; } -template <> -bool parse_cmd_args(int argc, - char* argv[], - ProblemSizeStreamK_universal& problem_size, - ExecutionConfig& config) -{ - if(argc == 1) - { - // use default case - } - else if(argc == 4) - { - config.do_verification = std::stoi(argv[1]); - config.init_method = std::stoi(argv[2]); - config.time_kernel = std::stoi(argv[3]); - } - else if(argc >= 10) - { - config.do_verification = std::stoi(argv[1]); - config.init_method = std::stoi(argv[2]); - config.time_kernel = std::stoi(argv[3]); - - problem_size.M = std::stoi(argv[4]); - problem_size.N = std::stoi(argv[5]); - problem_size.K = std::stoi(argv[6]); - - problem_size.StrideA = std::stoi(argv[7]); - problem_size.StrideB = std::stoi(argv[8]); - problem_size.StrideC = std::stoi(argv[9]); - - if(argc >= 11) - { - problem_size.Streamk_sel = std::stoi(argv[10]); - - if(argc >= 12) - { - problem_size.Grid_size = std::stoi(argv[11]); - - if(argc >= 13) - { - int reduction_strategy = std::stoi(argv[12]); - problem_size.reduction_strategy = reduction_strategy == 0 - ? ck::StreamKReductionStrategy::Atomic - : ck::StreamKReductionStrategy::Reduction; - } - } - } - } - else - { - std::cerr - << "arg1: verification (0=no, 1=CPU, 2=GPU, 3=CPU and GPU)" << std::endl - << "arg2: initialization (0=no init, 1=integer value, 2=decimal value)" << std::endl - << "arg3: time kernel (0=no, 1=yes)" << std::endl - << "arg4 to 9: M (256x), N(128x), K(32x), StrideA, StrideB, StrideC (default: -1 or 0)" - << std::endl - << "arg10: stream-k select (-1: default config, 0: all DP, 1: 1-tile SK, 2: 2-tile SK)" - << std::endl - << "arg11: Grid_size(-1 for max occupancy)" << std::endl - << "arg12: Reduction strategy (0: Atomic, 1: Reduction)" << std::endl; - return false; - } - - return true; -} - -template <> -bool parse_cmd_args(int argc, - char* argv[], - ProblemSizeStreamK& problem_size, - ExecutionConfig& config) -{ - if(argc == 1) - { - // use default case - } - else if(argc == 4) - { - config.do_verification = std::stoi(argv[1]); - config.init_method = std::stoi(argv[2]); - config.time_kernel = std::stoi(argv[3]); - } - else if(argc >= 10) - { - config.do_verification = std::stoi(argv[1]); - config.init_method = std::stoi(argv[2]); - config.time_kernel = std::stoi(argv[3]); - - problem_size.M = std::stoi(argv[4]); - problem_size.N = std::stoi(argv[5]); - problem_size.K = std::stoi(argv[6]); - - problem_size.StrideA = std::stoi(argv[7]); - problem_size.StrideB = std::stoi(argv[8]); - problem_size.StrideC = std::stoi(argv[9]); - - if(argc >= 11) - { - problem_size.NumSKBlocks = std::stoi(argv[10]); - } - } - else - { - std::cerr - << "arg1: verification (0=no, 1=CPU, 2=GPU, 3=CPU and GPU)" << std::endl - << "arg2: initialization (0=no init, 1=integer value, 2=decimal value)" << std::endl - << "arg3: time kernel (0=no, 1=yes)" << std::endl - << "arg4 to 9: M (256x), N(128x), K(32x), StrideA, StrideB, StrideC (default: -1 or 0)" - << std::endl - << "arg10: stream-k select (0: all DP, 1: 1-tile SK, 2: 2-tile SK)" - << "\narg11: Grid_size(-1 for max occupancy)" << std::endl; - return false; - } - - return true; -} - template <> bool parse_cmd_args(int argc, char* argv[], diff --git a/example/01_gemm/gemm_xdl_bf16_streamk_v3.cpp b/example/01_gemm/gemm_xdl_bf16_streamk_v3.cpp deleted file mode 100644 index 754cc8f6f53..00000000000 --- a/example/01_gemm/gemm_xdl_bf16_streamk_v3.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#include "common.hpp" - -#include "ck/tensor_operation/gpu/device/impl/device_gemm_xdl_cshuffle_streamk_v3.hpp" - -using ADataType = ck::bhalf_t; -using BDataType = ck::bhalf_t; -using CDataType = ck::bhalf_t; -using AccDataType = float; -using CShuffleDataType = ck::bhalf_t; - -using ALayout = Row; -using BLayout = Col; -using CLayout = Row; - -using AElementOp = PassThrough; -using BElementOp = PassThrough; -using CElementOp = PassThrough; - -static constexpr auto GemmDefault = ck::tensor_operation::device::GemmSpecialization::Default; - -// clang-format off -using DeviceGemmV2_Streamk_Instance = - ck::tensor_operation::device::DeviceGemm_Xdl_CShuffle_Streamk_V3< - ALayout, BLayout, CLayout, - ADataType, BDataType, CDataType, AccDataType, CShuffleDataType, - PassThrough, PassThrough, PassThrough, GemmDefault, - 256, - 128, 128, - 64, 8, 8, - 16, 16, - 4, 4, - S<8, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 8, 8, 0, - S<8, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 8, 8, 0, - 1, 2, S<1, 32, 1, 8>, 8, - ck::BlockGemmPipelineScheduler::Intrawave,ck::BlockGemmPipelineVersion::v3>; -// clang-format on - -using ReferenceGemmInstance = ck::tensor_operation::host:: - ReferenceGemm; - -using ReferenceGemmInstanceGPU = ck::tensor_operation::device::ReferenceGemm; - -#include "run_gemm_example_streamk_v2.inc" - -int main(int argc, char* argv[]) { return !run_gemm_universal_streamk_example(argc, argv); } diff --git a/example/01_gemm/gemm_xdl_fp16_fp8_streamk_v3.cpp b/example/01_gemm/gemm_xdl_fp16_fp8_streamk_v3.cpp deleted file mode 100644 index e7c00610742..00000000000 --- a/example/01_gemm/gemm_xdl_fp16_fp8_streamk_v3.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#include "common.hpp" - -#include "ck/tensor_operation/gpu/device/impl/device_gemm_xdl_cshuffle_streamk_v3.hpp" - -using ADataType = ck::half_t; -using BDataType = ck::f8_t; -using AccDataType = float; -using CShuffleDataType = ck::half_t; -using CDataType = ck::half_t; - -using ALayout = Row; -using BLayout = Col; -using CLayout = Row; - -using AElementOp = PassThrough; -using BElementOp = PassThrough; -using CElementOp = PassThrough; - -static constexpr auto GemmDefault = ck::tensor_operation::device::GemmSpecialization::Default; - -// clang-format off -using DeviceGemmV2_Streamk_Instance = - ck::tensor_operation::device::DeviceGemm_Xdl_CShuffle_Streamk_V3< - ALayout, BLayout, CLayout, - ADataType, BDataType, CDataType, AccDataType, CShuffleDataType, - AElementOp, BElementOp, CElementOp, GemmDefault, - 64, - 32, 32, - 256, 8, 16, - 16, 16, - 2, 2, - S<32, 2, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 8, 8, 0, - S<16, 4, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 16, 16, 0, - 1, 1, S<1, 16, 1, 4>, 4, - ck::BlockGemmPipelineScheduler::Interwave, ck::BlockGemmPipelineVersion::v1>; -// clang-format on - -using ReferenceGemmInstanceGPU = ck::tensor_operation::device::ReferenceGemm; - -using ReferenceGemmInstance = ck::tensor_operation::host::ReferenceGemm; - -#include "run_gemm_example_streamk_v2.inc" - -int main(int argc, char* argv[]) { return !run_gemm_universal_streamk_example(argc, argv); } diff --git a/example/01_gemm/gemm_xdl_fp16_streamk_v3.cpp b/example/01_gemm/gemm_xdl_fp16_streamk_v3.cpp deleted file mode 100644 index 0997afcdca1..00000000000 --- a/example/01_gemm/gemm_xdl_fp16_streamk_v3.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#include "common.hpp" - -#include "ck/tensor_operation/gpu/device/impl/device_gemm_xdl_cshuffle_streamk_v3.hpp" - -using ADataType = ck::half_t; -using BDataType = ck::half_t; -using AccDataType = float; -using CShuffleDataType = float; -using CDataType = ck::half_t; - -using ALayout = Row; -using BLayout = Row; -using CLayout = Row; - -using AElementOp = PassThrough; -using BElementOp = PassThrough; -using CElementOp = PassThrough; - -static constexpr auto GemmDefault = ck::tensor_operation::device::GemmSpecialization::MNPadding; - -// clang-format off -using DeviceGemmV2_Streamk_Instance = - ck::tensor_operation::device::DeviceGemm_Xdl_CShuffle_Streamk_V3< - ALayout, BLayout, CLayout, - ADataType, BDataType, CDataType, AccDataType, CShuffleDataType, - PassThrough, PassThrough, PassThrough, GemmDefault, - 256, - 224, 256, - 64, 8, 2, - 16, 16, - 7, 8, - S<8, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 8, 8, 0, - S<8, 32, 1>, S<0, 2, 1>, S<0, 2, 1>, - 1, 8, 2, 0, - 1, 2, S<1, 32, 1, 8>, 8, - ck::BlockGemmPipelineScheduler::Intrawave,ck::BlockGemmPipelineVersion::v3>; -// clang-format on - -using ReferenceGemmInstance = ck::tensor_operation::host:: - ReferenceGemm; - -using ReferenceGemmInstanceGPU = ck::tensor_operation::device::ReferenceGemm; - -#include "run_gemm_example_streamk_v2.inc" - -int main(int argc, char* argv[]) { return !run_gemm_universal_streamk_example(argc, argv); } diff --git a/example/01_gemm/gemm_xdl_fp8_streamk_v3.cpp b/example/01_gemm/gemm_xdl_fp8_streamk_v3.cpp deleted file mode 100644 index e4a01c2c13d..00000000000 --- a/example/01_gemm/gemm_xdl_fp8_streamk_v3.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#include "common.hpp" - -#include "ck/tensor_operation/gpu/device/impl/device_gemm_xdl_cshuffle_streamk_v3.hpp" - -using ADataType = ck::f8_t; -using BDataType = ck::f8_t; -using AccDataType = float; -using CShuffleDataType = ck::half_t; -using CDataType = ck::half_t; - -using ALayout = Row; -using BLayout = Col; -using CLayout = Row; - -using AElementOp = PassThrough; -using BElementOp = PassThrough; -using CElementOp = PassThrough; - -static constexpr auto GemmDefault = ck::tensor_operation::device::GemmSpecialization::Default; - -// clang-format off -using DeviceGemmV2_Streamk_Instance = - ck::tensor_operation::device::DeviceGemm_Xdl_CShuffle_Streamk_V3< - ALayout, BLayout, CLayout, - ADataType, BDataType, CDataType, AccDataType, CShuffleDataType, - PassThrough, PassThrough, PassThrough, GemmDefault, - 256, - 128, 256, - 128, 16, 16, - 16, 16, - 4, 8, - S<8, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 16, 16, 1, - S<8, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, - 2, 16, 16, 1, - 1, 2, S<1, 32, 1, 8>, 8, - ck::BlockGemmPipelineScheduler::Intrawave,ck::BlockGemmPipelineVersion::v3, ck::f8_t>; -// clang-format on - -using ReferenceGemmInstance = ck::tensor_operation::host:: - ReferenceGemm; -using ReferenceGemmInstanceGPU = ck::tensor_operation::device::ReferenceGemm; - -#include "run_gemm_example_streamk_v2.inc" - -int main(int argc, char* argv[]) { return !run_gemm_universal_streamk_example(argc, argv); } diff --git a/example/01_gemm/gemm_xdl_streamk.cpp b/example/01_gemm/gemm_xdl_streamk.cpp deleted file mode 100644 index caf98c1cff3..00000000000 --- a/example/01_gemm/gemm_xdl_streamk.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#include "common.hpp" - -#include "ck/tensor_operation/gpu/device/impl/device_gemm_xdl_streamk.hpp" - -using ADataType = ck::half_t; -using BDataType = ck::half_t; -using AccDataType = float; -using CShuffleDataType = float; -using CDataType = ck::half_t; - -using F16 = ck::half_t; - -using ALayout = Row; -using BLayout = Row; -using CLayout = Row; - -using AElementOp = PassThrough; -using BElementOp = PassThrough; -using CElementOp = PassThrough; - -// clang-format off -using DeviceGemmStreamK = ck::tensor_operation::device::DeviceGemmXdlStreamK -// ######| AData| BData| CData| AccData| ALayout| BLayout| CLayout| A| B| C| Block| MPer| NPer| K0Per| K1| MPer| NPer| MXdl| NXdl| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockLds| BBlockTransfer| BBlockTransfer| BBlockTransfer| BlockTransfer| BBlockTransfer| BBlockTransfer| BBlockLds| CShuffle| CShuffle| CBlockTransferClusterLengths| CBlockTransfer| -// ######| Type| Type| Type| Type| | | | Elementwise| Elementwise| Elementwise| Size| Block| Block| Block| | XDL| XDL| Per| Per| ThreadCluster| ThreadCluster| SrcAccessOrder| SrcVectorDim| SrcScalar| DstScalar| AddExtraM| ThreadCluster| ThreadCluster| SrcAccessOrder| SrcVectorDim| SrcScalar| DstScalar| AddExtraN| MXdlPerWave| NXdlPerWave| _MBlock_MWaveMPerXdl| ScalarPerVector| -// ######| | | | | | | | Operation| Operation| Operation| | | | | | | | Wave| Wave| Lengths_K0_M_K1| ArrangeOrder| | | PerVector| PerVector_K1| | Lengths_K0_N_K1| ArrangeOrder| | | PerVector| PerVector_K1| | PerShuffle| PerShuffle| _NBlock_NWaveNPerXdl| _NWaveNPerXdl| -// ######| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - < ADataType, BDataType, CDataType, AccDataType, ALayout, BLayout, CLayout, AElementOp, BElementOp, CElementOp, 256, 128, 128, 4, 8, 32, 32, 2, 2, S<4, 64, 1>, S<1, 0, 2>, S<1, 0, 2>, 2, 8, 8, 1, S<4, 64, 1>, S<0, 2, 1>, S<0, 2, 1>, 1, 2, 8, 1, 1, 1, S<1, 32, 1, 8>, 8>; - - // < ADataType, BDataType, CDataType, AccDataType, ALayout, BLayout, CLayout, AElementOp, BElementOp, CElementOp, 256, 256, 128, 4, 8, 32, 32, 4, 2, S<4, 64, 1>, S<1, 0, 2>, S<1, 0, 2>, 2, 8, 8, 1, S<4, 64, 1>, S<0, 2, 1>, S<0, 2, 1>, 1, 2, 2, 1, 1, 1, S<1, 32, 1, 8>, 8>; - // < ADataType, BDataType, CDataType, AccDataType, ALayout, BLayout, CLayout, AElementOp, BElementOp, CElementOp, 128, 32, 64, 4, 8, 32, 32, 1, 1, S<4, 32, 1>, S<1, 0, 2>, S<1, 0, 2>, 2, 8, 8, 1, S<4, 32, 1>, S<0, 2, 1>, S<0, 2, 1>, 1, 2, 8, 1, 1, 1, S<1, 16, 1, 8>, 8>; - // < ADataType, BDataType, CDataType, AccDataType, ALayout, BLayout, CLayout, AElementOp, BElementOp, CElementOp, 128, 32, 128, 4, 8, 32, 32, 1, 1, S<8, 16, 1>, S<1, 0, 2>, S<1, 0, 2>, 2, 8, 8, 1, S<8, 16, 1>, S<0, 2, 1>, S<0, 2, 1>, 1, 2, 2, 1, 1, 1, S<1, 32, 1, 4>, 8>; - -// instance for double rate mfma instruction on gfx950 -using DeviceGemmStreamK2 = ck::tensor_operation::device::DeviceGemmXdlStreamK -// ######| AData| BData| CData| AccData| ALayout| BLayout| CLayout| A| B| C| Block| MPer| NPer| K0Per| K1| MPer| NPer| MXdl| NXdl| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockTransfer| ABlockLds| BBlockTransfer| BBlockTransfer| BBlockTransfer| BlockTransfer| BBlockTransfer| BBlockTransfer| BBlockLds| CShuffle| CShuffle| CBlockTransferClusterLengths| CBlockTransfer| -// ######| Type| Type| Type| Type| | | | Elementwise| Elementwise| Elementwise| Size| Block| Block| Block| | XDL| XDL| Per| Per| ThreadCluster| ThreadCluster| SrcAccessOrder| SrcVectorDim| SrcScalar| DstScalar| AddExtraM| ThreadCluster| ThreadCluster| SrcAccessOrder| SrcVectorDim| SrcScalar| DstScalar| AddExtraN| MXdlPerWave| NXdlPerWave| _MBlock_MWaveMPerXdl| ScalarPerVector| -// ######| | | | | | | | Operation| Operation| Operation| | | | | | | | Wave| Wave| Lengths_K0_M_K1| ArrangeOrder| | | PerVector| PerVector_K1| | Lengths_K0_N_K1| ArrangeOrder| | | PerVector| PerVector_K1| | PerShuffle| PerShuffle| _NBlock_NWaveNPerXdl| _NWaveNPerXdl| -// ######| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - < ADataType, BDataType, CDataType, AccDataType, ALayout, BLayout, CLayout, AElementOp, BElementOp, CElementOp, 256, 256, 128, 4, 16, 32, 32, 4, 2, S<4, 64, 1>, S<1, 0, 2>, S<1, 0, 2>, 2, 8, 8, 1, S<4, 32, 1>, S<0, 2, 1>, S<0, 2, 1>, 1, 4, 8, 1, 1, 1, S<1, 32, 1, 8>, 8>; - -// clang-format on - -using DeviceGemmInstance = DeviceGemmStreamK; -using DeviceGemmInstance2 = DeviceGemmStreamK2; - -using ReferenceGemmInstance = ck::tensor_operation::host:: - ReferenceGemm; - -using ReferenceGemmInstanceGPU = ck::tensor_operation::device::ReferenceGemm; - -#include "run_gemm_example_streamk.inc" - -int main(int argc, char* argv[]) { return !run_gemm_streamk_example(argc, argv); } diff --git a/example/01_gemm/run_gemm_example_streamk.inc b/example/01_gemm/run_gemm_example_streamk.inc deleted file mode 100644 index 2761ce28e92..00000000000 --- a/example/01_gemm/run_gemm_example_streamk.inc +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#pragma once - -#include "ck/host_utility/device_prop.hpp" -#include "ck/tensor_operation/gpu/device/device_gemm_streamk.hpp" - -template -bool run_gemm(const ProblemType& problem_size, const ExecutionConfig& config) -{ -#if defined(BUILD_INT4_EXAMPLE) && defined(CK_EXPERIMENTAL_BIT_INT_EXTENSION_INT4) - static_assert(sizeof(ck::int4_t) == sizeof(int8_t)); -#endif - - using namespace ck::literals; - - auto M = problem_size.M; - auto N = problem_size.N; - auto K = problem_size.K; - auto StrideA = problem_size.StrideA; - auto StrideB = problem_size.StrideB; - auto StrideC = problem_size.StrideC; - - auto f_host_tensor_descriptor = - [](std::size_t row, std::size_t col, std::size_t stride, auto layout) { - if constexpr(std::is_same_v) - { - return HostTensorDescriptor({row, col}, {stride, 1_uz}); - } - else - { - return HostTensorDescriptor({row, col}, {1_uz, stride}); - } - }; - - auto f_get_default_stride = - [](std::size_t row, std::size_t col, ck::index_t stride, auto layout) { - if(stride == -1 || stride == 0) - { - // give a chance if stride is -1, return a default packed stride - if constexpr(std::is_same_v) - { - return static_cast(col); - } - else - { - return static_cast(row); - } - } - else - return static_cast(stride); - }; - - StrideA = f_get_default_stride(M, K, StrideA, ALayout{}); - StrideB = f_get_default_stride(K, N, StrideB, BLayout{}); - StrideC = f_get_default_stride(M, N, StrideC, CLayout{}); - - Tensor a_m_k(f_host_tensor_descriptor(M, K, StrideA, ALayout{})); - Tensor b_k_n(f_host_tensor_descriptor(K, N, StrideB, BLayout{})); - - switch(config.init_method) - { - case 0: - ck::utils::FillConstant{ck::type_convert(1.f)}(a_m_k); - ck::utils::FillConstant{ck::type_convert(1.f)}(b_k_n); - break; - case 1: - ck::utils::FillUniformDistributionIntegerValue{-5.f, 5.f}(a_m_k); - ck::utils::FillUniformDistributionIntegerValue{-5.f, 5.f}(b_k_n); - break; - case 2: - ck::utils::FillUniformDistribution{-1.f, 1.f}(a_m_k); - ck::utils::FillUniformDistribution{-1.f, 1.f}(b_k_n); - break; - case 3: - ck::utils::FillUniformDistributionIntegerValue{1.f, 1.f}(a_m_k); - ck::utils::FillUniformDistributionIntegerValue{-5.f, 5.f}(b_k_n); - break; - case 4: - ck::utils::FillUniformDistributionIntegerValue{-5.f, 5.f}(a_m_k); - ck::utils::FillUniformDistributionIntegerValue{1.f, 1.f}(b_k_n); - break; - case 5: - ck::utils::FillUniformDistributionIntegerValue{-2.f, 2.f}(a_m_k); - ck::utils::FillUniformDistributionIntegerValue{-2.f, 2.f}(b_k_n); - break; - default: - ck::utils::FillUniformDistribution{-0.1f, 0.1f}(a_m_k); - ck::utils::FillUniformDistribution{-0.1f, 0.1f}(b_k_n); - } - - Tensor c_m_n_host_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - Tensor c_m_n_device_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - Tensor c_m_n_device_ref_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - - std::cout << "a_m_k: " << a_m_k.mDesc << std::endl; - std::cout << "b_k_n: " << b_k_n.mDesc << std::endl; - std::cout << "c_m_n: " << c_m_n_host_result.mDesc << std::endl; - -#ifdef BUILD_INT4_EXAMPLE - DeviceMem a_m_k_device_buf(sizeof(KernelADataType) * a_m_k.mDesc.GetElementSpaceSize()); - DeviceMem b_k_n_device_buf(sizeof(KernelBDataType) * b_k_n.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_buf(sizeof(KernelCDataType) * - c_m_n_device_result.mDesc.GetElementSpaceSize()); - - const Tensor a_m_k_converted(a_m_k); - const Tensor b_k_n_converted(b_k_n); - - a_m_k_device_buf.ToDevice(a_m_k_converted.mData.data()); - b_k_n_device_buf.ToDevice(b_k_n_converted.mData.data()); -#else - DeviceMem a_m_k_device_buf(sizeof(ADataType) * a_m_k.mDesc.GetElementSpaceSize()); - DeviceMem b_k_n_device_buf(sizeof(BDataType) * b_k_n.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_buf(sizeof(CDataType) * c_m_n_device_result.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_ref_buf(sizeof(CDataType) * - c_m_n_device_ref_result.mDesc.GetElementSpaceSize()); - - a_m_k_device_buf.ToDevice(a_m_k.mData.data()); - b_k_n_device_buf.ToDevice(b_k_n.mData.data()); -#endif - DeviceMem workspace; - - auto a_element_op = AElementOp{}; - auto b_element_op = BElementOp{}; - auto c_element_op = CElementOp{}; - - using BaseStreamK = ck::tensor_operation::device::DeviceGemmStreamK; - - // do GEMM - static_assert(std::is_base_of::value && - std::is_base_of::value); - auto gemm = DeviceGemmInstance{}; - auto gemm2 = DeviceGemmInstance2{}; // instance for double rate mfma instruction - BaseStreamK* op_ptr = (ck::get_device_name() == "gfx950") ? static_cast(&gemm2) - : static_cast(&gemm); - - float ave_time = 0; - auto invoker_ptr = op_ptr->MakeInvokerPointer(); - - auto argument_ptr = op_ptr->MakeArgumentPointer( -#ifdef BUILD_INT4_EXAMPLE - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_buf.GetDeviceBuffer()), -#else - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_buf.GetDeviceBuffer()), -#endif - M, - N, - K, - StrideA, - StrideB, - StrideC, - a_element_op, - b_element_op, - c_element_op, - problem_size.NumSKBlocks); - - if(!op_ptr->IsSupportedArgument(argument_ptr.get())) - { - std::cerr << op_ptr->GetTypeString() << " does not support this problem" << std::endl; - - return true; - } - - auto argument = argument_ptr.get(); - std::size_t workspace_size = op_ptr->GetWorkSpaceSize(argument); - if(workspace_size != 0) - { - workspace.Realloc(workspace_size); - op_ptr->SetWorkSpacePointer(argument, workspace.GetDeviceBuffer()); - } - - ave_time = invoker_ptr->Run(argument_ptr.get(), StreamConfig{nullptr, config.time_kernel}); - - std::size_t flop = 2_uz * M * N * K; - std::size_t num_btype = - sizeof(ADataType) * M * K + sizeof(BDataType) * K * N + sizeof(CDataType) * M * N; - - float tflops = static_cast(flop) / 1.E9 / ave_time; - - float gb_per_sec = num_btype / 1.E6 / ave_time; - - std::cout << "Perf: " << ave_time << " ms, " << tflops << " TFlops, " << gb_per_sec << " GB/s, " - << op_ptr->GetTypeString() << std::endl; - - bool pass = true; - - if((config.do_verification == 1) || (config.do_verification == 3)) - { - // CPU verification - auto ref_gemm = ReferenceGemmInstance{}; - auto ref_invoker = ref_gemm.MakeInvoker(); - - auto ref_argument = ref_gemm.MakeArgument( - a_m_k, b_k_n, c_m_n_host_result, a_element_op, b_element_op, c_element_op); - - std::cout << "Running verification on CPU." << std::endl; - ref_invoker.Run(ref_argument); - -#ifdef BUILD_INT4_EXAMPLE - Tensor c_m_n_device_result_converted(c_m_n_host_result.mDesc); - - c_m_n_device_buf.FromDevice(c_m_n_device_result_converted.mData.data()); - - c_m_n_device_result = c_m_n_device_result_converted.CopyAsType(); - - return ck::utils::check_err(c_m_n_device_result_converted, c_m_n_host_result); -#else - c_m_n_device_buf.FromDevice(c_m_n_device_result.mData.data()); - - pass &= ck::utils::check_err(c_m_n_device_result, - c_m_n_host_result, - "Error: Incorrect results!", - get_rtol(), - get_atol()); -#endif - } - - if((config.do_verification == 2) || (config.do_verification == 3)) - { - // GPU verification - auto ref_gemm_gpu = ReferenceGemmInstanceGPU{}; - auto ref_invoker_gpu = ref_gemm_gpu.MakeInvoker(); - - auto ref_argument_gpu = ref_gemm_gpu.MakeArgument( - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_ref_buf.GetDeviceBuffer()), - M, - N, - K, - a_element_op, - b_element_op, - c_element_op); - - std::cout << "Running verification on GPU." << std::endl; - ref_invoker_gpu.Run(ref_argument_gpu, StreamConfig{}); - - c_m_n_device_ref_buf.FromDevice(c_m_n_device_ref_result.mData.data()); - c_m_n_device_buf.FromDevice(c_m_n_device_result.mData.data()); - - pass &= ck::utils::check_err(c_m_n_device_result, - c_m_n_device_ref_result, - "Error: Incorrect results!", - get_rtol(), - get_atol()); - } - - return pass == true; -} - -bool run_gemm_streamk_example(int argc, char* argv[]) -{ - ProblemSizeStreamK problem_size; - ExecutionConfig config; - - return !parse_cmd_args(argc, argv, problem_size, config) || run_gemm(problem_size, config); -} diff --git a/example/01_gemm/run_gemm_example_streamk_v2.inc b/example/01_gemm/run_gemm_example_streamk_v2.inc deleted file mode 100644 index 4416c601785..00000000000 --- a/example/01_gemm/run_gemm_example_streamk_v2.inc +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -#pragma once - -template -bool run_gemm(const ProblemType& problem_size, const ExecutionConfig& config) -{ -#if defined(BUILD_INT4_EXAMPLE) && defined(CK_EXPERIMENTAL_BIT_INT_EXTENSION_INT4) - static_assert(sizeof(ck::int4_t) == sizeof(int8_t)); -#endif - - using namespace ck::literals; - - auto M = problem_size.M; - auto N = problem_size.N; - auto K = problem_size.K; - auto StrideA = problem_size.StrideA; - auto StrideB = problem_size.StrideB; - auto StrideC = problem_size.StrideC; - auto Grid_size = problem_size.Grid_size; - auto Streamk_sel = problem_size.Streamk_sel; - - auto reduction_strategy = problem_size.reduction_strategy; - if(reduction_strategy == ck::StreamKReductionStrategy::Atomic) - { - std::cout << "Using Atomic reduction strategy" << std::endl; - } - else - { - std::cout << "Using Parallel reduction strategy" << std::endl; - } - - auto f_host_tensor_descriptor = - [](std::size_t row, std::size_t col, std::size_t stride, auto layout) { - if constexpr(std::is_same_v) - { - return HostTensorDescriptor({row, col}, {stride, 1_uz}); - } - else - { - return HostTensorDescriptor({row, col}, {1_uz, stride}); - } - }; - - auto f_get_default_stride = - [](std::size_t row, std::size_t col, ck::index_t stride, auto layout) { - if(stride == -1 || stride == 0) - { - // give a chance if stride is -1, return a default packed stride - if constexpr(std::is_same_v) - { - return static_cast(col); - } - else - { - return static_cast(row); - } - } - else - return static_cast(stride); - }; - - auto f_get_default_streamk_policy = [](ck::index_t streamk_sel) { - if(streamk_sel == -1) - { - return static_cast(4); - } - else - return static_cast(streamk_sel); - }; - - StrideA = f_get_default_stride(M, K, StrideA, ALayout{}); - StrideB = f_get_default_stride(K, N, StrideB, BLayout{}); - StrideC = f_get_default_stride(M, N, StrideC, CLayout{}); - - Streamk_sel = f_get_default_streamk_policy(Streamk_sel); - - Tensor a_m_k(f_host_tensor_descriptor(M, K, StrideA, ALayout{})); - Tensor b_k_n(f_host_tensor_descriptor(K, N, StrideB, BLayout{})); - - switch(config.init_method) - { - case 0: - a_m_k.GenerateTensorValue(GeneratorTensor_1{1}); - b_k_n.GenerateTensorValue(GeneratorTensor_1{1}); - break; - case 1: - a_m_k.GenerateTensorValue(GeneratorTensor_2{-2, 2}); - b_k_n.GenerateTensorValue(GeneratorTensor_2{-2, 2}); - break; - case 2: - a_m_k.GenerateTensorValue(GeneratorTensor_1{1}); - b_k_n.GenerateTensorValue(GeneratorTensor_2{-2, 2}); - break; - case 3: - a_m_k.GenerateTensorValue(GeneratorTensor_2{-2, 2}); - b_k_n.GenerateTensorValue(GeneratorTensor_1{1}); - break; - default: - a_m_k.GenerateTensorValue(GeneratorTensor_3{0.0, 1.0}); - b_k_n.GenerateTensorValue(GeneratorTensor_3{-0.5, 0.5}); - } - - Tensor c_m_n_host_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - Tensor c_m_n_device_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - Tensor c_m_n_device_ref_result(f_host_tensor_descriptor(M, N, StrideC, CLayout{})); - - std::cout << "a_m_k: " << a_m_k.mDesc << std::endl; - std::cout << "b_k_n: " << b_k_n.mDesc << std::endl; - std::cout << "c_m_n: " << c_m_n_host_result.mDesc << std::endl; - -#ifdef BUILD_INT4_EXAMPLE - DeviceMem a_m_k_device_buf(sizeof(KernelADataType) * a_m_k.mDesc.GetElementSpaceSize()); - DeviceMem b_k_n_device_buf(sizeof(KernelBDataType) * b_k_n.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_buf(sizeof(KernelCDataType) * - c_m_n_device_result.mDesc.GetElementSpaceSize()); - - const Tensor a_m_k_converted(a_m_k); - const Tensor b_k_n_converted(b_k_n); - - a_m_k_device_buf.ToDevice(a_m_k_converted.mData.data()); - b_k_n_device_buf.ToDevice(b_k_n_converted.mData.data()); -#else - DeviceMem a_m_k_device_buf(sizeof(ADataType) * a_m_k.mDesc.GetElementSpaceSize()); - DeviceMem b_k_n_device_buf(sizeof(BDataType) * b_k_n.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_buf(sizeof(CDataType) * c_m_n_device_result.mDesc.GetElementSpaceSize()); - DeviceMem c_m_n_device_ref_buf(sizeof(CDataType) * - c_m_n_device_ref_result.mDesc.GetElementSpaceSize()); - - a_m_k_device_buf.ToDevice(a_m_k.mData.data()); - b_k_n_device_buf.ToDevice(b_k_n.mData.data()); -#endif - DeviceMem workspace; - - auto a_element_op = AElementOp{}; - auto b_element_op = BElementOp{}; - auto c_element_op = CElementOp{}; - - // do GEMM - auto gemm = DeviceGemmV2_Streamk_Instance{}; - auto invoker = gemm.MakeInvoker(); - float ave_time = 0; - - auto argument = gemm.MakeArgument( -#ifdef BUILD_INT4_EXAMPLE - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_buf.GetDeviceBuffer()), -#else - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_buf.GetDeviceBuffer()), -#endif - M, - N, - K, - StrideA, - StrideB, - StrideC, - Streamk_sel, - Grid_size, - a_element_op, - b_element_op, - c_element_op, - reduction_strategy); - - if(!gemm.IsSupportedArgument(argument)) - { - std::cerr << gemm.GetTypeString() << " does not support this problem" << std::endl; - - return true; - } - - std::size_t workspace_size = gemm.GetWorkSpaceSize(&argument); - if(workspace_size != 0) - { - workspace.Realloc(workspace_size); - gemm.SetWorkSpacePointer(&argument, workspace.GetDeviceBuffer()); - } - - bool pass = true; - if((config.do_verification == 1) || (config.do_verification == 3)) - { - auto ref_gemm = ReferenceGemmInstance{}; - auto ref_invoker = ref_gemm.MakeInvoker(); - - auto ref_argument = ref_gemm.MakeArgument( - a_m_k, b_k_n, c_m_n_host_result, PassThrough{}, PassThrough{}, PassThrough{}); - - ref_invoker.Run(ref_argument); - - ave_time = invoker.Run(argument, StreamConfig{nullptr, false, 1}); -#ifdef BUILD_INT4_EXAMPLE - Tensor c_m_n_device_result_converted(c_m_n_host_result.mDesc); - - c_m_n_device_buf.FromDevice(c_m_n_device_result_converted.mData.data()); - - c_m_n_device_result = c_m_n_device_result_converted.CopyAsType(); - - return ck::utils::check_err(c_m_n_device_result_converted, c_m_n_host_result); -#else - c_m_n_device_buf.FromDevice(c_m_n_device_result.mData.data()); - - pass &= ck::utils::check_err(c_m_n_device_result, - c_m_n_host_result, - "Error: Incorrect results!", - get_rtol(), - get_atol()); -#endif - } - - if((config.do_verification == 2) || (config.do_verification == 3)) - { - // GPU verification - auto ref_gemm_gpu = ReferenceGemmInstanceGPU{}; - auto ref_invoker_gpu = ref_gemm_gpu.MakeInvoker(); - - auto ref_argument_gpu = ref_gemm_gpu.MakeArgument( - static_cast(a_m_k_device_buf.GetDeviceBuffer()), - static_cast(b_k_n_device_buf.GetDeviceBuffer()), - static_cast(c_m_n_device_ref_buf.GetDeviceBuffer()), - M, - N, - K, - a_element_op, - b_element_op, - c_element_op); - - std::cout << "Running verification on GPU." << std::endl; - ref_invoker_gpu.Run(ref_argument_gpu, StreamConfig{}); - - c_m_n_device_ref_buf.FromDevice(c_m_n_device_ref_result.mData.data()); - c_m_n_device_buf.FromDevice(c_m_n_device_result.mData.data()); - - pass &= ck::utils::check_err(c_m_n_device_result, - c_m_n_device_ref_result, - "Error: Incorrect results!", - get_rtol(), - get_atol()); - } - - if(config.time_kernel) - { - ave_time = invoker.Run(argument, StreamConfig{nullptr, config.time_kernel}); - - std::size_t flop = 2_uz * M * N * K; - std::size_t num_btype = - sizeof(ADataType) * M * K + sizeof(BDataType) * K * N + sizeof(CDataType) * M * N; - - float tflops = static_cast(flop) / 1.E9 / ave_time; - - float gb_per_sec = num_btype / 1.E6 / ave_time; - - std::cout << "Perf: " << ave_time << " ms, " << tflops << " TFlops, " << gb_per_sec - << " GB/s, " << gemm.GetTypeString() - << (reduction_strategy == ck::StreamKReductionStrategy::Atomic ? " (Atomic)" - : " (Reduction)") - << std::endl; - } - return pass; -} - -bool run_gemm_universal_streamk_example(int argc, char* argv[]) -{ - ProblemSizeStreamK_universal problem_size; - ExecutionConfig config; - - return !parse_cmd_args(argc, argv, problem_size, config) || run_gemm(problem_size, config); -} diff --git a/example/32_batched_gemm_scale_softmax_gemm/grouped_query_attention_forward_wmma_fp16.cpp b/example/32_batched_gemm_scale_softmax_gemm/grouped_query_attention_forward_wmma_fp16.cpp index 66b2aa8508f..4b714a5f9eb 100644 --- a/example/32_batched_gemm_scale_softmax_gemm/grouped_query_attention_forward_wmma_fp16.cpp +++ b/example/32_batched_gemm_scale_softmax_gemm/grouped_query_attention_forward_wmma_fp16.cpp @@ -3,7 +3,7 @@ /* Grouped Query Attention, -Ainslie, Joshua, James Lee-Thorp, Michiel de Jong, Yury Zemlyanskiy, Federico Lebrón, and Sumit +Ainslie, Joshua, James Lee-Thorp, Michiel de Jong, Yury Zemlyanskiy, Federico Lebron, and Sumit Sanghai. "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints." arXiv, May 22, 2023. https://doi.org/10.48550/arXiv.2305.13245. diff --git a/example/64_fpAintB_gemm/fp16int8_gemm_wmma.cpp b/example/64_fpAintB_gemm/fp16int8_gemm_wmma.cpp index 450d1b643f9..dd7b43fff64 100644 --- a/example/64_fpAintB_gemm/fp16int8_gemm_wmma.cpp +++ b/example/64_fpAintB_gemm/fp16int8_gemm_wmma.cpp @@ -6,7 +6,7 @@ #include "ck/tensor_operation/gpu/device/impl/device_fpAintB_gemm_wmma.hpp" // Implementation follows the paper: -// Kim, Young Jin, Rawn Henry, Raffy Fahim, and Hany Hassan Awadalla. "Who Says Elephants Can’t Run: +// Kim, Young Jin, Rawn Henry, Raffy Fahim, and Hany Hassan Awadalla. "Who Says Elephants Can't Run: // Bringing Large Scale MoE Models into Cloud Scale Production." arXiv, November 17, 2022. // https://doi.org/10.48550/arXiv.2211.10017. Assume weight (Matrix B) is add preprocess to // unsigned. diff --git a/example/ck_tile/01_fmha/CMakeLists.txt b/example/ck_tile/01_fmha/CMakeLists.txt index 0650bd3de01..c1c731a3871 100644 --- a/example/ck_tile/01_fmha/CMakeLists.txt +++ b/example/ck_tile/01_fmha/CMakeLists.txt @@ -2,8 +2,8 @@ # SPDX-License-Identifier: MIT set(INST_TARGETS ${SUPPORTED_GPU_TARGETS}) -# Currently only gfx9 and gfx12 archs are supported by FMHA -list(FILTER INST_TARGETS INCLUDE REGEX "gfx9|gfx12") +# Currently only gfx9, gfx11, and gfx12 archs are supported by FMHA +list(FILTER INST_TARGETS INCLUDE REGEX "gfx9|gfx1[12]") if(NOT INST_TARGETS) message(WARNING "Skipping Tile Engine FMHA compilation: No supported GPU targets (gfx9, gfx11, gfx12) found in SUPPORTED_GPU_TARGETS: ${SUPPORTED_GPU_TARGETS}") return() @@ -64,7 +64,7 @@ set(FMHA_BWD_CODE_GEN_COMMON_ARGS # there is no corresponding instance for parameters). if(BUILD_TESTING) # Filters are in the order of FMHA_FWD_KNOWN_APIS: fwd,fwd_splitkv_combine@fwd_splitkv,fwd_appendkv,pagedkv_prefill - list(APPEND FMHA_FWD_CODE_GEN_COMMON_ARGS --filter *_nlogits*_nskip*_nsink*,*@*_nlogits*_nbias*_nsink*,*,*_nlogits*_nskip*_pagedkv*) + list(APPEND FMHA_FWD_CODE_GEN_COMMON_ARGS --filter *_nlogits*_nskip*,*@*_nlogits*_nbias*,*,*_nlogits*_nskip*_pagedkv*) endif() # generate a list of kernels, but not actually emit files at config sta diff --git a/example/ck_tile/01_fmha/codegen/cpp_symbol_map.py b/example/ck_tile/01_fmha/codegen/cpp_symbol_map.py index 79fe6492a67..61e40716814 100644 --- a/example/ck_tile/01_fmha/codegen/cpp_symbol_map.py +++ b/example/ck_tile/01_fmha/codegen/cpp_symbol_map.py @@ -144,6 +144,7 @@ def get_mask_cpp_check_expr(mask: str) -> str: "qs": "ck_tile::BlockFmhaPipelineQSKSVS", "qr_async_trload": "ck_tile::BlockFmhaPipelineQRKSVSAsyncTrload", "qr_async_trload_v3": "ck_tile::BlockFmhaFwdV3Pipeline", + "qr_tdm": "ck_tile::BlockFmhaPipelineQRKSVSTdm", } PIPELINE_ENUM_MAP = { @@ -155,6 +156,7 @@ def get_mask_cpp_check_expr(mask: str) -> str: "qr_pagedkv": "ck_tile::BlockFmhaPipelineEnum::QRKSVS", "qr_async_trload": "ck_tile::BlockFmhaPipelineEnum::QRKSVS_ASYNC_TRLOAD", "qr_async_trload_v3": "ck_tile::BlockFmhaPipelineEnum::QRKSVS_ASYNC_TRLOAD_V3", + "qr_tdm": "ck_tile::BlockFmhaPipelineEnum::QRKSVS_TDM", } BOOL_MAP = { diff --git a/example/ck_tile/01_fmha/codegen/ops/fmha_batch_prefill.py b/example/ck_tile/01_fmha/codegen/ops/fmha_batch_prefill.py index 72d5970bbfd..b687cb97612 100644 --- a/example/ck_tile/01_fmha/codegen/ops/fmha_batch_prefill.py +++ b/example/ck_tile/01_fmha/codegen/ops/fmha_batch_prefill.py @@ -32,6 +32,14 @@ preprocessor_check="defined(__gfx94__) || defined(__gfx950__)", ) +# Architecture trait for tiles that are only valid / only wanted on gfx942 +# (e.g. MI308). Used to gate a tile's device-side compilation so it is skipped +# on other archs +GFX942_ARCH = ArchTrait( + "gfx942", + preprocessor_check="defined(__gfx942__)", +) + DTYPE_BITS = { "fp32": 32, "fp16": 16, @@ -167,6 +175,7 @@ FMHA_FWD_API = """ #include #include +#include namespace {{ bool get_num_cus(unsigned& num_cu) {{ @@ -206,6 +215,11 @@ return r; }} + // Host-side arch identity, used to mirror device-only arch gates (e.g. tiles + // restricted via F_arch) in the host dispatch so we never select an + // arm whose device image was elided for this arch. + [[maybe_unused]] const std::string device_name = ck_tile::get_device_name(); + [[maybe_unused]] auto get_num_blocks = [&](unsigned kM0) {{ return get_num_thread_blocks(a.batch, a.nhead_q, a.max_seqlen_q, kM0); }}; @@ -226,7 +240,7 @@ """ FMHA_FWD_API_INNER_DISPATCH = """ {F_if}((t.is_group_mode == {F_mode}) && (t.is_v_rowmajor == {F_vlayout}) && (t.has_logits_soft_cap == {F_logits}) && ({F_mask_check}) && (t.bias_type == {F_bias_check}) && (t.has_lse == {F_lse}) && (t.has_dropout == {F_dropout}) && (t.qscale_type == {F_qscale_check}) && (t.has_sink == {F_sink}) && - ({F_scheck}) && ({F_skcheck}) && ({F_dcheck}) && ({F_dvcheck}) && ({F_constraint}) && (t.kv_memory_layout == {F_kv_memory_layout}) && (t.kv_lookup_table == {F_kv_lookup_table}) && (t.page_size == {F_page_size}) && (fmha_batch_prefill_select_kv_load_mode(a.page_block_size, {F_bn0}, a.num_total_pages, a.batch_stride_k, kElementBytes) == {F_kv_load_mode})) {{ + ({F_scheck}) && ({F_skcheck}) && ({F_dcheck}) && ({F_dvcheck}) && ({F_constraint}) && ({F_arch_host}) && (t.kv_memory_layout == {F_kv_memory_layout}) && (t.kv_lookup_table == {F_kv_lookup_table}) && (t.page_size == {F_page_size}) && (fmha_batch_prefill_select_kv_load_mode(a.page_block_size, {F_bn0}, a.num_total_pages, a.batch_stride_k, a.batch_stride_v, kElementBytes, a.k_ptr, a.v_ptr) == {F_kv_load_mode})) {{ using trait_ = fmha_fwd_batch_prefill_traits_<{F_hdim}, {F_dtype}, {F_mode}, {F_bm0}, {F_bn0}, {F_bk0}, {F_bn1}, {F_bk1}, {F_bk0max}, {F_vlayout}, {F_pipeline_enum}, {F_logits}, {F_mask}, {F_bias}, {F_lse}, {F_dropout}, {F_qscale}, {F_spad}, {F_skpad}, {F_dpad}, {F_dvpad}, false, false, {F_sink}, {F_page_size}, {F_kv_memory_layout}, {F_kv_lookup_table}, {F_kv_load_mode}>; return fmha_batch_prefill_(s, a); }} @@ -277,6 +291,9 @@ class FmhaFwdApiTrait: kv_lookup_table: str page_size: int = 1 # page block size use_global_load: bool = False # use global_load_lds_* for >2GB KV cache + # Host-side arch predicate mirroring a tile's device-only F_arch gate. + # "true" means arch-agnostic (no host restriction). + arch_host: str = "true" @property def name(self) -> str: @@ -486,6 +503,7 @@ def api(self) -> str: F_dcheck=trait.dcheck, F_dvcheck=trait.dvcheck, F_constraint=trait.constraint, + F_arch_host=trait.arch_host, F_spad=BOOL_MAP[trait.spad], F_skpad=BOOL_MAP[trait.skpad], F_dpad=BOOL_MAP[trait.dpad], @@ -547,6 +565,11 @@ class FmhaFwdTileSize: F_wk1: int # gemm1 warp size along k F_occupancy: int # occupancy, -1 will let pipeline decide the occupancy, other value will overwrite occupancy F_constraint: CppConstraint = field(default_factory=lambda: CppConstraint()) + # Optional compile-time arch guard for this tile's device code. When set, + # the kernel body is only instantiated during the device pass for matching + # archs (host pass always keeps it so the host symbol still exists). This is + # independent from F_constraint, which is a runtime dispatch predicate. + F_arch: Optional[ArchTrait] = None @property def name(self) -> str: @@ -619,11 +642,20 @@ def template(self) -> str: F_page_size=self.F_page_size, F_sink=BOOL_MAP[self.F_pipeline.F_sink], F_kv_load_mode=KV_LOAD_MODE_ENUM_MAP[self.F_use_global_load], - F_arch_check=CDNA3_PLUS_ARCH.preprocessor_check - if self.F_use_global_load - else "true", + F_arch_check=self._arch_check(), ) + def _arch_check(self) -> str: + # Combine any arch guards that apply to this kernel. + checks = [] + if self.F_use_global_load: + checks.append(CDNA3_PLUS_ARCH.preprocessor_check) + if self.F_tile.F_arch is not None: + checks.append(self.F_tile.F_arch.preprocessor_check) + if not checks: + return "true" + return " && ".join(f"({c})" for c in checks) + @property def name(self) -> str: # TODO: we don't encode idx here @@ -668,6 +700,11 @@ def api_trait(self) -> FmhaFwdApiTrait: kv_lookup_table=self.F_pipeline.F_kv_lookup_table, page_size=self.F_page_size, use_global_load=self.F_use_global_load, + arch_host=( + self.F_tile.F_arch.device_name_check + if self.F_tile.F_arch is not None + else "true" + ), ) @@ -677,12 +714,18 @@ def get_hdim_tile_size_dict(dtype: str) -> Optional[dict]: if dtype in ["fp16", "bf16"]: return { 128 : [FmhaFwdTileSize(128, 128, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 32, 32, 16, 32, 32, 16, -1)], - 256 : [FmhaFwdTileSize(128, 128, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 32, 32, 16, 32, 32, 16, -1)], + 256 : [ + FmhaFwdTileSize(128, 32, 16, 256, 16, 256, 4, 1, 1, 4, 1, 1, 32, 32, 16, 32, 32, 16, 2, CppConstraint("num_cus < 128"), GFX942_ARCH), + FmhaFwdTileSize(128, 128, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 32, 32, 16, 32, 32, 16, -1), + ], } # fmt: skip elif dtype in ["fp8bf16"]: return { 128 : [FmhaFwdTileSize(128, 128, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 32, 32, 32, 32, 32, 32, -1)], - 256 : [FmhaFwdTileSize(128, 128, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 32, 32, 32, 32, 32, 32, -1)], + 256 : [ + FmhaFwdTileSize(128, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 32, 32, 32, 32, 32, 32, 2, CppConstraint("num_cus < 128"), GFX942_ARCH), + FmhaFwdTileSize(128, 128, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 32, 32, 32, 32, 32, 32, -1), + ], } # fmt: skip else: return None diff --git a/example/ck_tile/01_fmha/codegen/ops/fmha_bwd.py b/example/ck_tile/01_fmha/codegen/ops/fmha_bwd.py index 8079b3d8581..dae78e243ce 100644 --- a/example/ck_tile/01_fmha/codegen/ops/fmha_bwd.py +++ b/example/ck_tile/01_fmha/codegen/ops/fmha_bwd.py @@ -28,6 +28,13 @@ FMHA_BWD_KERNEL_HEADER = """// SPDX-License-Identifier: MIT // Copyright (c) 2018-2025, Advanced Micro Devices, Inc. All rights reserved.\n // auto generated by generate.py +#if defined(__HIP_DEVICE_COMPILE__) && \\ + (defined(__gfx1100__) || defined(__gfx1101__) || defined(__gfx1102__) || \\ + defined(__gfx1103__) || defined(__gfx1150__) || defined(__gfx1151__) || \\ + defined(__gfx1152__) || defined(__gfx1153__) || defined(__gfx11_generic__)) +#undef CK_TILE_USE_AMD_BUFFER_ATOMIC_ADD_FLOAT +#define CK_TILE_USE_AMD_BUFFER_ATOMIC_ADD_FLOAT 1 +#endif #include "fmha_bwd.hpp" """ diff --git a/example/ck_tile/01_fmha/codegen/ops/fmha_fwd.py b/example/ck_tile/01_fmha/codegen/ops/fmha_fwd.py index 38ba926b4e9..99b92c4a158 100644 --- a/example/ck_tile/01_fmha/codegen/ops/fmha_fwd.py +++ b/example/ck_tile/01_fmha/codegen/ops/fmha_fwd.py @@ -310,11 +310,21 @@ def name(self) -> str: def scheck(self) -> str: if self.mode == "group": return "true/*group mode spad always true*/" # group mode only generate spad/skpad == true - if self.pipeline_tag in ["qr_async", "qr_async_trload", "qr_async_trload_v3"]: + if self.pipeline_tag == "qr_async": if self.spad == "t": return "true" # always support else: return "true" + elif self.pipeline_tag in ["qr_async_trload", "qr_async_trload_v3", "qr_tdm"]: + if self.spad == "t": + return "true" # padded trload always supports any seqlen_q + else: + # An unpadded trload instance issues unpredicated full-tile + # stores of round_up(seqlen_q, bm0) rows; selecting it for a + # tile-unaligned seqlen_q writes past O/LSE (gfx9 OOB fault). + # Gate it to aligned seqlen_q so unaligned shapes fall through + # to the padded qr_async instance. + return f"a.seqlen_q % {self.bm0} == 0" elif self.pipeline_tag in ["qr", "qr_hpad", "qs"]: if self.spad == "t": return f"true /*a.seqlen_q % {self.bm0} != 0*/" # TODO: order of get_pipelines() matters! (ugly) @@ -345,28 +355,25 @@ def skcheck(self) -> str: return f"true /*a.seqlen_k % {self.bn0} != 0*/" # TODO: order of get_pipelines() matters! (ugly) else: return f"(a.cu_seqlen_k_ptr == nullptr) && (a.seqlen_k != 0 && a.seqlen_k % {self.bn0} == 0)" - elif self.pipeline_tag in ["qr_async_trload", "qr_async_trload_v3"]: + elif self.pipeline_tag in ["qr_async_trload", "qr_async_trload_v3", "qr_tdm"]: if self.skpad == "t": return "true" else: - return "true" + # See scheck: an unpadded trload instance over-reads K/V on a + # tile-unaligned seqlen_k. Gate it to aligned seqlen_k so + # unaligned shapes fall through to the padded qr_async instance. + return f"(a.cu_seqlen_k_ptr == nullptr) && (a.seqlen_k != 0 && a.seqlen_k % {self.bn0} == 0)" else: assert False @property def dcheck(self) -> str: - if self.pipeline_tag == "qr_async": - vec = int((32 * 4) / DTYPE_BITS[self.dtype]) - if self.dpad == "t": - return f"a.hdim_q % {vec} == 0" - else: - assert False - elif self.pipeline_tag == "qr_hpad": + if self.pipeline_tag == "qr_hpad": if self.dpad == "t": return "a.hdim_q % 8 == 0" else: assert False - elif self.pipeline_tag in ["qr", "qs", "qr_async_trload", "qr_async_trload_v3"]: + elif self.pipeline_tag in ["qr", "qs", "qr_async", "qr_async_trload", "qr_async_trload_v3", "qr_tdm"]: bk0submax = K0_MAX_SUBMAX_MAP[self.bk0max] if self.dpad == "t": return f"true /*a.hdim_q % {bk0submax} != 0*/" # TODO: order of get_pipelines() matters! (ugly) @@ -377,18 +384,12 @@ def dcheck(self) -> str: @property def dvcheck(self) -> str: - if self.pipeline_tag == "qr_async": - vec = int((32 * 4) / DTYPE_BITS[self.dtype]) - if self.dvpad == "t": - return f"a.hdim_v % {vec} == 0" - else: - assert False - elif self.pipeline_tag == "qr_hpad": + if self.pipeline_tag == "qr_hpad": if self.dvpad == "t": return "a.hdim_v % 8 == 0" else: assert False - elif self.pipeline_tag in ["qr", "qs", "qr_async_trload", "qr_async_trload_v3"]: + elif self.pipeline_tag in ["qr", "qs", "qr_async", "qr_async_trload", "qr_async_trload_v3", "qr_tdm"]: bk0submax = K0_MAX_SUBMAX_MAP[self.bk0max] if self.dvpad == "t": return f"true /*a.hdim_v % {bk0submax} != 0*/" # TODO: order of get_pipelines() matters! (ugly) @@ -1046,6 +1047,9 @@ def get_pipelines( pipelines.append(FmhaFwdPipeline("qr", "row", "f", "f", "f", "f", logits, bias, lse, dropout, qscale, mask, skip, "f", sink)) # fmt: skip pipelines.append(FmhaFwdPipeline("qr", "row", "t", "t", "t", "t", logits, bias, lse, dropout, qscale, mask, skip, "f", sink)) # fmt: skip else: + # skpad=f + dpad=t/dvpad=t variant covers padded head dims (e.g. d=16, d=160) + # when seqlen_k is divisible by bn0. Restored after #6526 changed it to + # "f","f","f","f", which left those cases with no dispatchable qr_async kernel. pipelines.append(FmhaFwdPipeline("qr_async", "row", "t", "f", "t", "t", logits, bias, lse, dropout, qscale, mask, skip, "f", sink)) # fmt: skip pipelines.append(FmhaFwdPipeline("qr_async", "row", "t", "t", "t", "t", logits, bias, lse, dropout, qscale, mask, skip, "f", sink)) # fmt: skip if receipt == 1 and bias != "bias": @@ -1060,9 +1064,11 @@ def get_pipelines( ["f", "t"], ): if hdim == 64: - pipelines.append(FmhaFwdPipeline("qr", "row", "t", "f", "t", "t", logits, bias, "f", "f", qscale, mask, "f", "f", sink)) # fmt: skip + pipelines.append(FmhaFwdPipeline("qr", "row", "f", "f", "f", "f", logits, bias, "f", "f", qscale, mask, "f", "f", sink)) # fmt: skip pipelines.append(FmhaFwdPipeline("qr", "row", "t", "t", "t", "t", logits, bias, "f", "f", qscale, mask, "f", "f", sink)) # fmt: skip else: + # skpad=f + dpad=t/dvpad=t variant covers padded head dims when seqlen_k is + # divisible by bn0. Restored after #6526 changed it to "f","f","f","f". pipelines.append(FmhaFwdPipeline("qr_async", "row", "t", "f", "t", "t", logits, bias, "f", "f", qscale, mask, "f", "f", sink)) # fmt: skip pipelines.append(FmhaFwdPipeline("qr_async", "row", "t", "t", "t", "t", logits, bias, "f", "f", qscale, mask, "f", "f", sink)) # fmt: skip return pipelines @@ -1169,6 +1175,9 @@ def get_pipelines( ): pipelines.append(FmhaFwdPipeline("qr", "col", "f", "f", "f", "f", logits, bias, lse, dropout, qscale, mask, "f", "f", sink)) # fmt: skip pipelines.append(FmhaFwdPipeline("qr", "col", "t", "t", "t", "t", logits, bias, lse, dropout, qscale, mask, "f", "f", sink)) # fmt: skip + if hdim > 64 and dtype in cls._DT_MXFP8: + pipelines.append(FmhaFwdPipeline("qr_async", "col", "f", "f", "f", "f", logits, bias, lse, dropout, qscale, mask, "f", "f", sink)) # fmt: skip + pipelines.append(FmhaFwdPipeline("qr_async", "col", "t", "t", "t", "t", logits, bias, lse, dropout, qscale, mask, "f", "f", sink)) # fmt: skip return pipelines @@ -1355,7 +1364,8 @@ def get_hdim_tile_size_dict(cls, dtype: str) -> Optional[dict]: # bm0, bn0, bk0, bn1, bk1, ( 32, 32) : [FmhaFwdTileSize( 64, 64, 32, 32, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], ( 64, 64) : [FmhaFwdTileSize( 64, 64, 32, 64, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], - (128, 128) : [FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], + (128, 128) : [FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1, CppConstraint("a.max_seqlen_q < 2048")), + FmhaFwdTileSize(128, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], (192, 128) : [FmhaFwdTileSize( 64, 64, 32, 128, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], (256, 256) : [FmhaFwdTileSize( 64, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 32, 16, 16, 32, -1)], } # fmt: skip @@ -1381,6 +1391,24 @@ def get_pipelines( pipelines = [] if dtype in cls._DT_FP16_BF16: qscale = "no" + # qr_tdm: gfx1250 TDM pipeline, preferred for d=128. + # Emitted first so runtime dispatcher selects qr_tdm over qr + # when both match (dispatch order = list order in generated code). + # NOTE: dropout is not yet implemented in qr_tdm — only emit + # dropout="f" so dropout workloads fall through to qr. + if hdim == 128 and hdim_v == 128: + for logits, mask, bias, lse, sink in itertools.product( + ["t", "f"], + get_mask_map(mask_impl).keys(), + BIAS_MAP.keys(), + ["t", "f"], + ["t", "f"], + ): + pipelines.append(FmhaFwdPipeline("qr_tdm", "row", "f", "f", "f", "f", logits, bias, lse, "f", qscale, mask, "f", "f", sink)) # fmt: skip + pipelines.append(FmhaFwdPipeline("qr_tdm", "row", "f", "f", "t", "t", logits, bias, lse, "f", qscale, mask, "f", "f", sink)) # fmt: skip + + # qr: generic pipeline fallback for trait combos not covered by + # qr_tdm (e.g., bias, dropout, skip, d!=128). for logits, mask, bias, lse, dropout, skip, sink in itertools.product( ["t", "f"], get_mask_map(mask_impl).keys(), @@ -1465,10 +1493,9 @@ def fit(problem_ctx: ProblemContext, kernel_ctx: KernelContext) -> bool: def fit(problem_ctx: ProblemContext, kernel_ctx: KernelContext) -> bool: cond = problem_ctx.dtype in ["fp16", "bf16"] cond &= kernel_ctx.pipeline.F_vlayout == "row" - cond &= kernel_ctx.pipeline.F_bias in ["no", "alibi"] + cond &= kernel_ctx.pipeline.F_bias in ["no", "alibi", "bias"] cond &= kernel_ctx.pipeline.F_qscale == "no" cond &= kernel_ctx.pipeline.F_skip == "f" - cond &= kernel_ctx.pipeline.F_sink == "f" return cond return Product(name="Flash attention integration", rule=fit) diff --git a/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_splitkv.py b/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_splitkv.py index 849f463afa0..ed025dcf5fc 100644 --- a/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_splitkv.py +++ b/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_splitkv.py @@ -128,7 +128,7 @@ namespace {{ template void run_instance(const ck_tile::stream_config& s, fmha_fwd_splitkv_args a) {{ - if constexpr ({F_hdim} == 128 && {F_bias} == ck_tile::BlockAttentionBiasEnum::NO_BIAS + if constexpr ({F_bias} == ck_tile::BlockAttentionBiasEnum::NO_BIAS && (std::is_same_v<{F_mask}, ck_tile::SimplifiedGenericAttentionMask> || std::is_same_v<{F_mask}, FmhaMasks::NoMask>)) {{ if (a.max_seqlen_q == 1 && a.nhead_k < a.nhead_q) {{ @@ -283,7 +283,7 @@ """ FMHA_FWD_SPLITKV_API_INNER_DISPATCH = """{F_if}((t.is_group_mode == {F_mode}) && (t.is_v_rowmajor == {F_vlayout}) && (t.has_logits_soft_cap == {F_logits}) && ({F_mask_check}) && (t.bias_type == {F_bias_check}) && (t.do_fp8_static_quant == {F_squant}) && - ((a.block_table_ptr != nullptr) == {F_pagedkv}) && (t.has_sink == {F_sink}) && ({F_scheck}) && ({F_skcheck}) && ({F_dcheck}) && ({F_dvcheck})) {{ + ((a.block_table_ptr != nullptr) == {F_pagedkv}) && (t.has_sink == {F_sink}) && ({F_scheck}) && ({F_seqtune}) && ({F_skcheck}) && ({F_dcheck}) && ({F_dvcheck})) {{ using traits_ = fmha_fwd_splitkv_traits_<{F_hdim}, {F_dtype}, {F_mode}, {F_bm0}, {F_bn0}, {F_bk0}, {F_bn1}, {F_bk1}, {F_bk0max}, {F_vlayout}, {F_pipeline_enum}, {F_logits}, {F_mask}, {F_bias}, true, {F_squant}, {F_pagedkv},{F_sink}, {F_spad}, {F_skpad}, {F_dpad}, {F_dvpad}>; // get combine kernel tile sizes @@ -364,6 +364,14 @@ def scheck(self) -> str: else: assert False + def seqtune(self, max_bm0: int) -> str: + if self.bm0 == max_bm0: + return "true/*fall back to largest tile*/" + else: + if self.mode == "group": + return f"a.max_seqlen_q <= {self.bm0}" + return f"a.seqlen_q <= {self.bm0}" + @property def skcheck(self) -> str: if self.mode == "group": @@ -561,6 +569,7 @@ def api(self) -> str: for i_dtype, (dtype, pool_by_dtype) in enumerate(pool_by_arch.items()): per_hdim_case = str() for i_hdim, (hdim, pool_by_hdim) in enumerate(pool_by_dtype.items()): + max_bm0 = max((t.bm0 for t in pool_by_hdim), default=0) inners = str() for i_trait, trait in enumerate(pool_by_hdim): inners += FMHA_FWD_SPLITKV_API_INNER_DISPATCH.format( @@ -579,6 +588,7 @@ def api(self) -> str: F_pagedkv=BOOL_MAP[trait.pagedkv], F_sink=BOOL_MAP[trait.sink], F_scheck=trait.scheck, + F_seqtune=trait.seqtune(max_bm0), F_skcheck=trait.skcheck, F_dcheck=trait.dcheck, F_dvcheck=trait.dvcheck, @@ -763,6 +773,7 @@ def get_pipelines(dtype, hdim, mask_impl) -> List[FmhaFwdSplitKVPipeline]: pipelines.append(Pipeline("qr", "row", "t", "f", "f", "f", logits, bias, "t", squant, pagedkv, sink, mask)) # fmt: skip pipelines.append(Pipeline("qr", "row", "t", "t", "f", "f", logits, bias, "t", squant, pagedkv, sink, mask)) # fmt: skip pipelines.append(Pipeline("qr", "row", "t", "t", "t", "t", logits, bias, "t", squant, pagedkv, sink, mask)) # fmt: skip + pipelines.append(Pipeline("qr_nwarp_sshuffle", "row", "t", "t", "f", "f", logits, bias, "t", squant, pagedkv, sink, mask)) # fmt: skip elif dtype in ["fp8", "bf8"]: for logits, mask, bias in itertools.product( ["t", "f"], get_mask_map(mask_impl).keys(), BIAS_MAP.keys() @@ -846,11 +857,15 @@ class KernelComponentFactoryGfx11(KernelComponentFactoryBase): def get_hdim_tile_size_dict(dtype: str) -> Optional[dict]: if dtype in ["fp16", "bf16"]: return { - # bm0, bn0, bk0, bn1, bk1, - "32" : FmhaFwdTileSize( 64, 64, 16, 32, 32, 32, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "64" : FmhaFwdTileSize( 64, 64, 32, 64, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "128": FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "256": FmhaFwdTileSize( 64, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), + # bm0, bn0, bk0, bn1, bk1, + "32" : [FmhaFwdTileSize( 16, 64, 16, 32, 32, 32, 1, 2, 1, 1, 2, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 16, 32, 32, 32, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "64" : [FmhaFwdTileSize( 16, 64, 32, 64, 32, 64, 1, 4, 1, 1, 4, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 64, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "128": [FmhaFwdTileSize( 16, 64, 32, 128, 32, 128, 1, 4, 1, 1, 4, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "256": [FmhaFwdTileSize( 16, 64, 32, 256, 32, 256, 1, 4, 1, 1, 4, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], } # fmt: skip else: return None @@ -863,11 +878,15 @@ class KernelComponentFactoryGfx12(KernelComponentFactoryBase): def get_hdim_tile_size_dict(dtype: str) -> Optional[dict]: if dtype in ["fp16", "bf16"]: return { - # bm0, bn0, bk0, bn1, bk1, - "32" : FmhaFwdTileSize( 64, 64, 16, 32, 32, 32, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "64" : FmhaFwdTileSize( 64, 64, 32, 64, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "128": FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), - "256": FmhaFwdTileSize( 64, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1), + # bm0, bn0, bk0, bn1, bk1, + "32" : [FmhaFwdTileSize( 16, 64, 16, 32, 32, 32, 1, 2, 1, 1, 2, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 16, 32, 32, 32, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "64" : [FmhaFwdTileSize( 16, 64, 32, 64, 32, 64, 1, 4, 1, 1, 4, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 64, 32, 64, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "128": [FmhaFwdTileSize( 16, 128, 32, 128, 32, 128, 1, 8, 1, 1, 8, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 128, 32, 128, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], + "256": [FmhaFwdTileSize( 16, 128, 32, 256, 32, 256, 1, 8, 1, 1, 8, 1, 16, 16, 16, 16, 16, 16, -1), + FmhaFwdTileSize( 64, 64, 32, 256, 32, 256, 4, 1, 1, 4, 1, 1, 16, 16, 16, 16, 16, 16, -1)], } # fmt: skip elif dtype in ["fp8", "bf8"]: return { @@ -930,11 +949,17 @@ def get_fwd_splitkv_blobs( d = factory.get_hdim_tile_size_dict(dtype) if d is None: continue - # for hdim_str, mode, mask, bias, lse in itertools.product(d.keys(), MODE_MAP.keys(), MASK_MAP.keys(), ["t", "f"], ["t", "f"]): for hdim_str, mode in itertools.product(d.keys(), MODE_MAP.keys()): - tile = d[hdim_str] + tiles = d[hdim_str] + if not isinstance(tiles, list): + tiles = [tiles] hdim = int(hdim_str) - for pipeline in factory.get_pipelines(dtype, hdim, mask_impl): + for tile, pipeline in itertools.product( + tiles, factory.get_pipelines(dtype, hdim, mask_impl) + ): + # Use qr_nwarp_sshuffle with multiple N warps and qr otherwise + if (tile.F_rn0 != 1) != (pipeline.tag == "qr_nwarp_sshuffle"): + continue if mode == "group": if pipeline.F_spad != "t" or pipeline.F_skpad != "t": # in group mode, spad/skpad must be true, since we can't predict if seqlen of current batch need pad or not diff --git a/example/ck_tile/01_fmha/example_fmha_fwd.cpp b/example/ck_tile/01_fmha/example_fmha_fwd.cpp index 122d232a1c9..826bbc25324 100644 --- a/example/ck_tile/01_fmha/example_fmha_fwd.cpp +++ b/example/ck_tile/01_fmha/example_fmha_fwd.cpp @@ -119,7 +119,9 @@ auto create_args(int argc, char* argv[]) "", "Batch-mode only: per-batch effective seqlen for KV (exclude PAD).\n" "Comma-separated list of length 'b'. If empty, no override.") - .insert("init_sink", "0", "value to init the output tensor sink value for validation"); + .insert("init_sink", "0", "value to init the output tensor sink value for validation") + .insert( + "pack_gqa", "1", "1: enable Pack-GQA (fold GQA Q heads into seqlen for non-causal)"); bool result = arg_parser.parse(argc, argv); return std::make_tuple(result, arg_parser); @@ -163,6 +165,7 @@ auto run(const ck_tile::ArgParser& arg_parser) std::string init_method = arg_parser.get_str("init"); uint32_t seed = arg_parser.get_uint32("seed"); int init_sink_value = arg_parser.get_int("init_sink"); + int pack_gqa = arg_parser.get_int("pack_gqa"); ck_tile::stream_config stream_config{nullptr, true, @@ -210,6 +213,7 @@ auto run(const ck_tile::ArgParser& arg_parser) seed, do_validation, init_sink_value, + pack_gqa, stream_config, json); } diff --git a/example/ck_tile/01_fmha/fmha_bwd.hpp b/example/ck_tile/01_fmha/fmha_bwd.hpp index 20e4a822413..93e770a0cdf 100644 --- a/example/ck_tile/01_fmha/fmha_bwd.hpp +++ b/example/ck_tile/01_fmha/fmha_bwd.hpp @@ -18,6 +18,17 @@ #include #include +// Function pointer type for workspace packing (no captures, points to code segment) +using PrepareWorkspaceHostFunc = size_t (*)(void*, // host_ws + ck_tile::index_t, // batch + ck_tile::index_t, // hdim_q + ck_tile::index_t, // nhead_q + ck_tile::index_t, // seqlen_q + ck_tile::index_t, // seqlen_k + const ck_tile::index_t*, // seqstart_q + const ck_tile::index_t* // seqstart_k +); + struct FmhaBwdFp32 { }; @@ -588,6 +599,56 @@ float fmha_bwd(const fmha_bwd_traits&, fmha_bwd_args, const ck_tile::stream_conf struct fmha_bwd_launcher { + // POD closure for graph capture (trivially destructible, no heap allocation) + struct GraphClosure + { + PrepareWorkspaceHostFunc func_ptr; + void* pin_w_ptr; + const ck_tile::index_t* seqstart_q_ptr; + const ck_tile::index_t* seqstart_k_ptr; + ck_tile::index_t batch; + ck_tile::index_t hdim_q; + ck_tile::index_t nhead_q; + ck_tile::index_t seqlen_q; + ck_tile::index_t seqlen_k; + + static void invoke(void* ud) + { + auto* closure = static_cast(ud); + if(closure->func_ptr) + { + // Callback runs on the HIP driver helper thread across a C ABI boundary; + // any exception escaping it would call std::terminate. + try + { + closure->func_ptr(closure->pin_w_ptr, + closure->batch, + closure->hdim_q, + closure->nhead_q, + closure->seqlen_q, + closure->seqlen_k, + closure->seqstart_q_ptr, + closure->seqstart_k_ptr); + } + catch(const std::exception& e) + { + // The H2D queued after this callback will copy indeterminate + // metadata to device and the kernel will produce wrong results; + // unlikely in practice since pack_workspace_host only throws on + // precondition violations. + std::cerr << "fmha_bwd_launcher: pack_workspace_host threw: " << e.what() + << '\n'; + } + catch(...) + { + std::cerr << "fmha_bwd_launcher: pack_workspace_host threw unknown\n"; + } + } + } + }; + static_assert(std::is_trivially_destructible_v, + "GraphClosure must be trivially destructible for placement-new without dtor"); + std::function run{ [](fmha_bwd_args, const ck_tile::stream_config&) { std::cerr << "fmha_bwd: no kernel found for given traits, skipping run\n"; @@ -603,8 +664,28 @@ struct fmha_bwd_launcher ~fmha_bwd_launcher() noexcept { schedule_pin_staging_release(); } // Stream-async: zero dq_acc, D2H seqstart, host-pack metadata, H2D into device_ws. - // `pinned_host_alloc` returns a shared_ptr to a pinned host buffer; its deleter - // is invoked on the stream tail after the H2D completes. + // + // `pinned_host_alloc` returns a shared_ptr to a pinned host buffer. + // + // **Deleter behavior differs by mode**: + // - Normal mode: deleter is invoked on the stream tail after H2D completes. + // - Graph capture mode: deleter is NOT invoked; caller must keep buffer alive + // until hipGraphDestroy (see precondition #2 below). + // + // REQUIRED PRECONDITIONS for `pinned_host_alloc`: + // + // 1. **Capture-safe allocation**: The allocator must NOT call synchronizing APIs + // (e.g., bare hipHostMalloc) during active stream capture, as these invalidate + // the capture and cause hipStreamEndCapture to fail. Use a caching allocator + // that serves from cache during capture (e.g., PyTorch CachingHostAllocator). + // + // 2. **Buffer lifetime in graph mode**: In graph capture mode (detected via + // hipStreamIsCapturing), the returned buffer is NOT freed automatically after + // the H2D completes. The caller MUST keep the buffer alive for the graph's + // entire lifetime (until hipGraphDestroy), otherwise graph replay will read + // from freed memory. In normal (non-graph) mode, the buffer is automatically + // freed on the stream tail after the H2D. + // void prepare_workspace_async( // void* device_ws_ptr, const int* seqstart_q_dev, @@ -634,8 +715,20 @@ struct fmha_bwd_launcher const size_t seqstart_stride = ck_tile::integer_least_multiple(seqstart_bytes, static_cast(16)); const size_t pin_w_offset = 2 * seqstart_stride; - const size_t total_bytes = pin_w_offset + host_ws_size_; - auto pin_base = pinned_host_alloc(total_bytes); + const size_t data_size = pin_w_offset + host_ws_size_; + + // Check if we're in graph capture mode + hipStreamCaptureStatus capture_status; + HIP_CHECK_ERROR(hipStreamIsCapturing(stream, &capture_status)); + const bool is_graph_capture = (capture_status == hipStreamCaptureStatusActive); + + // Allocate pinned buffer with extra aligned space for closure + // Both modes use placement new for closure (POD, trivially destructible) + constexpr size_t closure_align = alignof(GraphClosure); + constexpr size_t closure_size = sizeof(GraphClosure); + const size_t aligned_data = (data_size + closure_align - 1) & ~(closure_align - 1); + const size_t total_bytes = aligned_data + closure_size; + auto pin_base = pinned_host_alloc(total_bytes); if(needs_zero_dq_acc_ && workspace_size > host_ws_size_) HIP_CHECK_ERROR(hipMemsetAsync(static_cast(device_ws_ptr) + host_ws_size_, @@ -643,12 +736,14 @@ struct fmha_bwd_launcher workspace_size - host_ws_size_, stream)); - char* base = static_cast(pin_base.get()); - int* pin_q = reinterpret_cast(base); - int* pin_k = reinterpret_cast(base + seqstart_stride); - void* pin_w = base + pin_w_offset; - const int* seqstart_q_pinned = traits_.is_group_mode ? pin_q : nullptr; - const int* seqstart_k_pinned = traits_.is_group_mode ? pin_k : nullptr; + char* base = static_cast(pin_base.get()); + int* pin_q = reinterpret_cast(base); + int* pin_k = reinterpret_cast(base + seqstart_stride); + void* pin_w = base + pin_w_offset; + const ck_tile::index_t* seqstart_q_pinned = + traits_.is_group_mode ? reinterpret_cast(pin_q) : nullptr; + const ck_tile::index_t* seqstart_k_pinned = + traits_.is_group_mode ? reinterpret_cast(pin_k) : nullptr; if(traits_.is_group_mode) { @@ -662,55 +757,56 @@ struct fmha_bwd_launcher pin_k, seqstart_k_dev, seqstart_bytes, hipMemcpyDeviceToHost, stream)); } - auto pack_closure = std::make_unique>( - [=, fn = pack_workspace_host_]() { fn(pin_w, seqstart_q_pinned, seqstart_k_pinned); }); - // Callback runs on the HIP driver helper thread across a C ABI boundary; - // any exception escaping it would call std::terminate. - HIP_CHECK_ERROR(hipLaunchHostFunc( - stream, - [](void* ud) { - std::unique_ptr> c{static_cast*>(ud)}; - try - { - (*c)(); - } - catch(const std::exception& e) - { - // The H2D queued after this callback will copy indeterminate - // metadata to device and the kernel will produce wrong results; - // unlikely in practice since pack_workspace_host_ only throws on - // precondition violations. - std::cerr << "fmha_bwd_launcher: pack_workspace_host threw: " << e.what() - << '\n'; - } - catch(...) - { - std::cerr << "fmha_bwd_launcher: pack_workspace_host threw unknown\n"; - } - }, - pack_closure.get())); - // Ownership transferred to the callback only after a successful launch. - pack_closure.release(); + // === UNIFIED PATH: Both modes use placement new for POD closure === + // Construct closure in aligned location within pinned buffer (all POD, trivially + // destructible) + void* closure_addr = base + aligned_data; + auto* closure = new(closure_addr) GraphClosure{ + prepare_ws_func_, // Function pointer (points to code segment, always valid) + pin_w, + seqstart_q_pinned, + seqstart_k_pinned, + batch_, // Copy captured data (independent of launcher lifetime) + hdim_q_, + nhead_q_, + seqlen_q_, + seqlen_k_}; + + HIP_CHECK_ERROR(hipLaunchHostFunc(stream, GraphClosure::invoke, closure)); HIP_CHECK_ERROR( hipMemcpyAsync(device_ws_ptr, pin_w, host_ws_size_, hipMemcpyHostToDevice, stream)); - // Release any previous in-flight buffer before taking a new one. - schedule_pin_staging_release(); - pin_staging_ = std::move(pin_base); - release_stream_ = stream; + if(!is_graph_capture) + { + // Normal mode: transfer ownership of pinned buffer and schedule release. + // The H2D memcpy above copies host-prepared metadata to device workspace. + // Pinned buffer must stay alive until H2D completes, so we schedule its + // release on the stream tail (via hipLaunchHostFunc callback). + schedule_pin_staging_release(); // Release any previous in-flight buffer first + pin_staging_ = std::move(pin_base); + release_stream_ = stream; + } + // Graph mode: pin_base stays owned by caller (via shared_ptr ref-count). + // Caller must keep it alive for the graph's lifetime. Closure and data pointers + // within pin_base remain valid as long as caller holds pin_base. } private: fmha_bwd_traits traits_{}; size_t host_ws_size_ = 0; bool needs_zero_dq_acc_ = false; - // Pure CPU; safe to invoke from a hipLaunchHostFunc callback. - std::function - pack_workspace_host_{[](void*, const int*, const int*) { - std::cerr - << "fmha_bwd: no kernel found for given traits, skipping pack_workspace_host\n"; - }}; + + // Function pointer (points to code segment, survives launcher destruction) + PrepareWorkspaceHostFunc prepare_ws_func_ = nullptr; + + // Captured data (copied to closure in graph mode) + ck_tile::index_t batch_ = 0; + ck_tile::index_t hdim_q_ = 0; + ck_tile::index_t nhead_q_ = 0; + ck_tile::index_t seqlen_q_ = 0; + ck_tile::index_t seqlen_k_ = 0; + std::shared_ptr pin_staging_; hipStream_t release_stream_ = nullptr; @@ -756,15 +852,16 @@ struct fmha_bwd_launcher t.is_group_mode ? t.seqlen_q : t.batch * t.seqlen_q; device_ws_size = fmha_bwd_dq_dk_dv_dq_ws_device_upper_bound_( t.batch, t.hdim_q, t.nhead_q, total_seqlen_q_padded, t.max_seqlen_k); - pack_workspace_host_ = [batch = t.batch, - hdim_q = t.hdim_q, - nhead_q = t.nhead_q, - seqlen_q = t.seqlen_q, - seqlen_k = t.seqlen_k // - ](void* host_ws, const int* seqstart_q, const int* seqstart_k) { - fmha_bwd_dq_dk_dv_dq_prepare_ws_host_( - host_ws, batch, hdim_q, nhead_q, seqlen_q, seqlen_k, seqstart_q, seqstart_k); - }; + + // Store function pointer (directly assign template-instantiated function) + prepare_ws_func_ = &fmha_bwd_dq_dk_dv_dq_prepare_ws_host_; + + // Store captured data as member variables + batch_ = t.batch; + hdim_q_ = t.hdim_q; + nhead_q_ = t.nhead_q; + seqlen_q_ = t.seqlen_q; + seqlen_k_ = t.seqlen_k; } workspace_size = host_ws_size_ + device_ws_size; needs_zero_dq_acc_ = fmha_bwd_dq_dk_dv_needs_zero_dq_acc_(); diff --git a/example/ck_tile/01_fmha/fmha_fwd.hpp b/example/ck_tile/01_fmha/fmha_fwd.hpp index fdf3fe8e7fe..50ba8ffb6ae 100644 --- a/example/ck_tile/01_fmha/fmha_fwd.hpp +++ b/example/ck_tile/01_fmha/fmha_fwd.hpp @@ -677,29 +677,55 @@ struct fmha_batch_prefill_args // Selects the KV-cache load mode for a batch-prefill dispatch arm. // GLOBAL_LOAD_LDS: required when (a) the page is smaller than one K/V tile -// so per-page SRD is impossible, AND (b) the total KV-pool byte size -// exceeds INT32_MAX so SRD's 32-bit byte offset cannot address it. +// so per-page SRD is impossible, AND (b) the SRD voffset arithmetic would +// overflow for either K or V. The hardware computes +// addr = (base[63:32] << 32) | ((base[31:0] + voffset) & 0xFFFFFFFF) +// and the voffset chain in ck_tile is signed int32 (index_t), so it wraps +// once base[31:0] + max_voffset exceeds INT32_MAX (0x7FFFFFFF, ~2GB) - NOT +// 0xFFFFFFFF - even when the KV pool itself is well under 2GB. K and V are +// independently allocated, so each is checked separately; either one +// crossing the bound forces GLOBAL_LOAD_LDS. // BUFFER_LOAD: every other case - the SGPR-resident SRD path is fastest. -// Inputs are taken as plain integers so the helper has no template parameter -// and can be called from each codegen-emitted dispatcher arm with the arm's -// compile-time kN0 / element_bytes substituted as constants. +// k_base_ptr/v_base_ptr are the VAs of the first elements of the K and V caches; +// the low 32 bits of each determine whether the voffset addition wraps. inline ck_tile::BlockAttentionKVCacheLoadModeEnum fmha_batch_prefill_select_kv_load_mode(ck_tile::index_t page_block_size, ck_tile::index_t kN0, ck_tile::index_t num_total_pages, ck_tile::index_t batch_stride_k, - ck_tile::index_t element_bytes) + ck_tile::index_t batch_stride_v, + ck_tile::index_t element_bytes, + const void* k_base_ptr, + const void* v_base_ptr) { - // Promote every operand to long_index_t so overflow is impossible regardless - // of multiplication order. A bare `static_cast(num_total_pages) - // * batch_stride_k * element_bytes` only works because of left-to-right - // associativity - a future reorder of the operands would silently truncate. - const auto kv_pool_bytes = static_cast(num_total_pages) * - static_cast(batch_stride_k) * - static_cast(element_bytes); - return (page_block_size < kN0 && kv_pool_bytes > INT32_MAX) - ? ck_tile::BlockAttentionKVCacheLoadModeEnum::GLOBAL_LOAD_LDS - : ck_tile::BlockAttentionKVCacheLoadModeEnum::BUFFER_LOAD; + if(page_block_size >= kN0) + return ck_tile::BlockAttentionKVCacheLoadModeEnum::BUFFER_LOAD; + + // Maximum byte offsets that buffer_load will add to K/V base pointers. + // Each page is addressed as page_id * batch_stride * element_bytes. + const auto k_pool_bytes = static_cast(num_total_pages) * + static_cast(batch_stride_k) * + static_cast(element_bytes); + const auto v_pool_bytes = static_cast(num_total_pages) * + static_cast(batch_stride_v) * + static_cast(element_bytes); + + // Low 32 bits of each base VA. K and V are independently allocated and may + // have different low-32 values, so both are checked. Compare against + // INT32_MAX (not UINT32_MAX): the low32 bits themselves are unsigned, but the + // voffset they are added to is signed int32, so the effective address is + // already wrong once base[31:0] + pool crosses 0x7FFFFFFF. A sum in the + // (2GB, 4GB] range still fits in 32 unsigned bits but has passed the signed + // wrap point - that is exactly the band this check must route to global load. + const auto k_lo32 = + static_cast(reinterpret_cast(k_base_ptr)) & 0xFFFFFFFFULL; + const auto v_lo32 = + static_cast(reinterpret_cast(v_base_ptr)) & 0xFFFFFFFFULL; + const bool srd_would_overflow = + (k_lo32 + k_pool_bytes) > INT32_MAX || (v_lo32 + v_pool_bytes) > INT32_MAX; + + return srd_would_overflow ? ck_tile::BlockAttentionKVCacheLoadModeEnum::GLOBAL_LOAD_LDS + : ck_tile::BlockAttentionKVCacheLoadModeEnum::BUFFER_LOAD; } template diff --git a/example/ck_tile/01_fmha/fmha_fwd_runner.hpp b/example/ck_tile/01_fmha/fmha_fwd_runner.hpp index 0b51dffa466..638fbe1a9f9 100644 --- a/example/ck_tile/01_fmha/fmha_fwd_runner.hpp +++ b/example/ck_tile/01_fmha/fmha_fwd_runner.hpp @@ -165,8 +165,10 @@ int override_num_splits_if_necessary( if(num_splits < 1 && p_drop == 0.0f) { + // props.multiProcessorCount for >=gfx10 is the number of WGPs (each has 2 CUs) + const int num_blocks_per_SM = props.warpSize == 32 ? 4 : 2; return num_splits_heuristic( - batch * nhead * num_m_blocks, props.multiProcessorCount * 2, 128); + batch * nhead * num_m_blocks, props.multiProcessorCount * num_blocks_per_SM, 128); } return num_splits; @@ -252,6 +254,7 @@ fwd_result fmha_fwd_run(mode_enum mode, uint32_t seed, int do_validation, int init_sink_value, + int pack_gqa, const ck_tile::stream_config& stream_config, std::optional json = std::nullopt) { @@ -648,8 +651,18 @@ fwd_result fmha_fwd_run(mode_enum mode, // legalize num_splits according to other options if(num_splits < 1) { + int nhead_merged = nhead; + int max_seqlen_q_merged = max_seqlen_q; + // When max_seqlen_q == 1 and multiple head groups are merged (kMergeNumHeadGroupsSeqLenQ) + // then more splits are required + if(bias.type == bias_enum::no_bias && mask.type == mask_enum::no_mask && + max_seqlen_q == 1 && nhead_k < nhead) + { + nhead_merged = nhead_k; + max_seqlen_q_merged = max_seqlen_q * (nhead / nhead_k); + } num_splits = override_num_splits_if_necessary( - batch, nhead, max_seqlen_q, hdim_v, p_drop, num_splits); + batch, nhead_merged, max_seqlen_q_merged, hdim_v, p_drop, num_splits); } if(128 < num_splits) { @@ -690,6 +703,19 @@ fwd_result fmha_fwd_run(mode_enum mode, ? seqstart_k_with_padding_host.back() : seqstart_k_host.back())); + // Compute Pack-GQA dimensions early so buffer allocations use the right sizes + const int nhead_ratio = nhead / nhead_k; + int pack_gqa_nhead = nhead; + int pack_gqa_seqlen_q = shape_seqlen_q; + if(pack_gqa && nhead_ratio > 1 && mask.type == mask_enum::no_mask && + bias.type == bias_enum::no_bias && i_perm && o_perm && mode == mode_enum::batch && + q_eff_lens_per_batch.empty() && kv_eff_lens_per_batch.empty() && + qscale.type != quant_scale_enum::mx) + { + pack_gqa_nhead = nhead_k; + pack_gqa_seqlen_q = nhead_ratio * shape_seqlen_q; + } + const ck_tile::index_t num_block_scale_q = (mode == mode_enum::batch) ? ck_tile::integer_divide_ceil(shape_seqlen_q, block_scale_size_q_) @@ -738,14 +764,16 @@ fwd_result fmha_fwd_run(mode_enum mode, std::max(shape_seqlen_q, shape_seqlen_k), rotary_dim, next_seed()); ck_tile::HostTensor lse_acc_host( - 1 < num_splits || use_kvcache - ? std::array{shape_batch, nhead, num_splits, shape_seqlen_q} - : std::array{1, 1, 1, 1}); + 1 < num_splits || use_kvcache ? std::array{shape_batch, + pack_gqa_nhead, + num_splits, + pack_gqa_seqlen_q} + : std::array{1, 1, 1, 1}); ck_tile::HostTensor o_acc_host( 1 < num_splits || use_kvcache ? std::array{shape_batch, - nhead, + pack_gqa_nhead, num_splits, - shape_seqlen_q, + pack_gqa_seqlen_q, hdim_v} : std::array{1, 1, 1, 1, 1}); @@ -777,14 +805,14 @@ fwd_result fmha_fwd_run(mode_enum mode, // batch mode of lse data layout is [batch, nhead, seqlen_q] // group mode of lse data layout is [nhead, total_seqlen_q] ck_tile::HostTensor lse_host( - lse ? std::array{shape_batch, nhead, shape_seqlen_q} + lse ? std::array{shape_batch, pack_gqa_nhead, pack_gqa_seqlen_q} : std::array{1, 1, 1} /* dummy shape for simplifying code */); ck_tile::HostTensor o_host( - get_lengths(o_perm, shape_batch, nhead, shape_seqlen_q, hdim_v)); + get_lengths(o_perm, shape_batch, pack_gqa_nhead, pack_gqa_seqlen_q, hdim_v)); ck_tile::HostTensor randval_host( - p_drop > 0 ? get_lengths(true, shape_batch, nhead, shape_seqlen_q, max_seqlen_k) + p_drop > 0 ? get_lengths(true, shape_batch, pack_gqa_nhead, pack_gqa_seqlen_q, max_seqlen_k) : std::array{1, 1, 1, 1}); ck_tile::HostTensor block_table_host( @@ -1172,7 +1200,17 @@ fwd_result fmha_fwd_run(mode_enum mode, } }; - const auto init_args = [&, k_paddings_ = seqlen_kpads](auto& args) { + // Pack-GQA: print status (dimensions already computed earlier for buffer allocation) + if(pack_gqa_nhead != nhead) + { + std::cout << "[Pack-GQA] Enabled: nhead " << nhead << "->" << pack_gqa_nhead + << ", seqlen_q " << shape_seqlen_q << "->" << pack_gqa_seqlen_q << std::endl; + } + + const auto init_args = [&, + pack_gqa_nhead_ = pack_gqa_nhead, + pack_gqa_seqlen_q_ = pack_gqa_seqlen_q, + k_paddings_ = seqlen_kpads](auto& args) { /// NOTE: we broadcast bias from [1, 1, seqlen_q, seqlen_k] to [batch, nhead, seqlen_q, /// seqlen_k] in this example, hence both the 'batch_stride_bias' & /// 'nhead_stride_bias' are 0. @@ -1198,7 +1236,7 @@ fwd_result fmha_fwd_run(mode_enum mode, const ck_tile::index_t stride_o_acc = (hdim_v); const ck_tile::index_t stride_o = (o_perm ? hdim_v : nhead * hdim_v); // setup nhead_stride_* arguments - const ck_tile::index_t nhead_stride_q = (i_perm ? shape_seqlen_q * hdim_q : hdim_q); + const ck_tile::index_t nhead_stride_q = (i_perm ? pack_gqa_seqlen_q_ * hdim_q : hdim_q); const ck_tile::index_t nhead_stride_k = (0 < page_block_size ? (i_perm ? page_block_size * hdim_q : hdim_q) : (i_perm ? shape_seqlen_k * hdim_q : hdim_q)); @@ -1219,16 +1257,16 @@ fwd_result fmha_fwd_run(mode_enum mode, }(); const ck_tile::index_t nhead_stride_bias = (i_perm ? 0 * shape_seqlen_q * max_seqlen_k : 0 * max_seqlen_k); - const ck_tile::index_t nhead_stride_randval = (shape_seqlen_q * max_seqlen_k); - const ck_tile::index_t nhead_stride_lse = shape_seqlen_q; - const ck_tile::index_t nhead_stride_lse_acc = (num_splits * shape_seqlen_q); - const ck_tile::index_t nhead_stride_o_acc = (num_splits * shape_seqlen_q * hdim_v); - const ck_tile::index_t nhead_stride_o = (o_perm ? shape_seqlen_q * hdim_v : hdim_v); + const ck_tile::index_t nhead_stride_randval = (pack_gqa_seqlen_q_ * max_seqlen_k); + const ck_tile::index_t nhead_stride_lse = pack_gqa_seqlen_q_; + const ck_tile::index_t nhead_stride_lse_acc = (num_splits * pack_gqa_seqlen_q_); + const ck_tile::index_t nhead_stride_o_acc = (num_splits * pack_gqa_seqlen_q_ * hdim_v); + const ck_tile::index_t nhead_stride_o = (o_perm ? pack_gqa_seqlen_q_ * hdim_v : hdim_v); const ck_tile::index_t nhead_stride_q_descale = num_block_scale_q; const ck_tile::index_t nhead_stride_k_descale = num_block_scale_kv; const ck_tile::index_t nhead_stride_v_descale = num_block_scale_kv; // setup batch_stride_* arguments - const ck_tile::index_t batch_stride_q = (nhead * shape_seqlen_q * hdim_q); + const ck_tile::index_t batch_stride_q = (pack_gqa_nhead_ * pack_gqa_seqlen_q_ * hdim_q); const ck_tile::index_t batch_stride_k = (0 < page_block_size ? (nhead_k * page_block_size * hdim_q) : (nhead_k * shape_seqlen_k * hdim_q)); @@ -1236,20 +1274,23 @@ fwd_result fmha_fwd_run(mode_enum mode, const ck_tile::index_t batch_stride_v = (0 < page_block_size ? (nhead_k * hdim_v * page_block_size) : (nhead_k * hdim_v * shape_seqlen_k)); - const ck_tile::index_t batch_stride_vnew = (nhead_k * hdim_v * seqlen_knew); - const ck_tile::index_t batch_stride_bias = (0 * nhead * shape_seqlen_q * max_seqlen_k); - const ck_tile::index_t batch_stride_randval = (nhead * shape_seqlen_q * max_seqlen_k); - const ck_tile::index_t batch_stride_lse = (nhead * shape_seqlen_q); - const ck_tile::index_t batch_stride_lse_acc = (nhead * num_splits * shape_seqlen_q); - const ck_tile::index_t batch_stride_o_acc = (nhead * num_splits * shape_seqlen_q * hdim_v); - const ck_tile::index_t batch_stride_o = (nhead * shape_seqlen_q * hdim_v); + const ck_tile::index_t batch_stride_vnew = (nhead_k * hdim_v * seqlen_knew); + const ck_tile::index_t batch_stride_bias = (0 * nhead * shape_seqlen_q * max_seqlen_k); + const ck_tile::index_t batch_stride_randval = + (pack_gqa_nhead_ * pack_gqa_seqlen_q_ * max_seqlen_k); + const ck_tile::index_t batch_stride_lse = (pack_gqa_nhead_ * pack_gqa_seqlen_q_); + const ck_tile::index_t batch_stride_lse_acc = + (pack_gqa_nhead_ * num_splits * pack_gqa_seqlen_q_); + const ck_tile::index_t batch_stride_o_acc = + (pack_gqa_nhead_ * num_splits * pack_gqa_seqlen_q_ * hdim_v); + const ck_tile::index_t batch_stride_o = (pack_gqa_nhead_ * pack_gqa_seqlen_q_ * hdim_v); const ck_tile::index_t batch_stride_block_table = (max_num_page_blocks / batch); const ck_tile::index_t batch_stride_q_descale = num_block_scale_q * nhead; const ck_tile::index_t batch_stride_k_descale = num_block_scale_kv * nhead_k; const ck_tile::index_t batch_stride_v_descale = num_block_scale_kv * nhead_k; // setup split_stride_* arguments (only used in split-kv kernel) - const ck_tile::index_t split_stride_lse_acc = (shape_seqlen_q); - const ck_tile::index_t split_stride_o_acc = (shape_seqlen_q * hdim_v); + const ck_tile::index_t split_stride_lse_acc = (pack_gqa_seqlen_q_); + const ck_tile::index_t split_stride_o_acc = (pack_gqa_seqlen_q_ * hdim_v); args.q_ptr = q_buf.GetDeviceBuffer(); args.k_ptr = k_buf.GetDeviceBuffer(); @@ -1259,14 +1300,14 @@ fwd_result fmha_fwd_run(mode_enum mode, else args.sink_ptr = nullptr; args.batch = batch; - args.seqlen_q = shape_seqlen_q; // unused in group mode + args.seqlen_q = pack_gqa_seqlen_q_; // unused in group mode, or packed seqlen args.hdim_q = hdim_q; args.hdim_v = hdim_v; - args.nhead_q = nhead; + args.nhead_q = pack_gqa_nhead_; args.nhead_k = nhead_k; if constexpr(std::is_same_v>) { - args.num_head_q_total = nhead; + args.num_head_q_total = pack_gqa_nhead_; args.head_start = 0; } @@ -1315,8 +1356,8 @@ fwd_result fmha_fwd_run(mode_enum mode, args.lse_ptr = lse_buf.GetDeviceBuffer(); args.o_ptr = o_buf.GetDeviceBuffer(); - args.seqlen_k = shape_seqlen_k; // unused in group mode (or kvcache enabled) - args.max_seqlen_q = max_seqlen_q; + args.seqlen_k = shape_seqlen_k; // unused in group mode (or kvcache enabled) + args.max_seqlen_q = pack_gqa_seqlen_q_; // use packed seqlen for grid size args.scale_s = scale_s; @@ -2304,9 +2345,21 @@ fwd_result fmha_fwd_run(mode_enum mode, if(lse) { ck_tile::HostTensor lse_host_result({nhead, real_seqlen_q}); - lse_host_result.ForEach([&](auto& self, auto idx) { - self(idx) = lse_host(b_idx, idx[0], idx[1] + query_offset); - }); + if(pack_gqa_nhead != nhead) + { + lse_host_result.ForEach([&](auto& self, auto idx) { + ck_tile::index_t packed_head = idx[0] / nhead_ratio; + ck_tile::index_t packed_seq = + (idx[0] % nhead_ratio) * real_seqlen_q + idx[1] + query_offset; + self(idx) = lse_host(b_idx, packed_head, packed_seq); + }); + } + else + { + lse_host_result.ForEach([&](auto& self, auto idx) { + self(idx) = lse_host(b_idx, idx[0], idx[1] + query_offset); + }); + } // Use smaller rtol/atol as LSE is computed and stored in fp32, so there is no // precision loss due to conversion @@ -2329,30 +2382,73 @@ fwd_result fmha_fwd_run(mode_enum mode, } if(p_drop > 0) { - ck_tile::HostTensor randval_host_ref( - {nhead, real_seqlen_q, real_seqlen_k}); - ck_tile::reference_batched_dropout_randval( - randval_host_ref, wb, drop_seed, drop_offset); - ck_tile::reference_batched_dropout( - p_host_ref, randval_host_ref, p_undrop_in_uint8_t, rp_undrop); + const bool is_pack_gqa_active = (pack_gqa_nhead != nhead); + if(is_pack_gqa_active) + { + const int nhead_ratio_local = nhead / nhead_k; + ck_tile::HostTensor randval_packed_ref( + {pack_gqa_nhead, pack_gqa_seqlen_q, real_seqlen_k}); + ck_tile::reference_batched_dropout_randval( + randval_packed_ref, wb, drop_seed, drop_offset); + + ck_tile::HostTensor randval_host_ref( + {nhead, real_seqlen_q, real_seqlen_k}); + randval_host_ref.ForEach([&](auto& self, const auto& idx) { + ck_tile::index_t h = idx[0]; + ck_tile::index_t s = idx[1]; + ck_tile::index_t k = idx[2]; + ck_tile::index_t packed_head = h / nhead_ratio_local; + ck_tile::index_t packed_seq = (h % nhead_ratio_local) * real_seqlen_q + s; + self(idx) = randval_packed_ref(packed_head, packed_seq, k); + }); - ck_tile::HostTensor randval_host_result( - {nhead, real_seqlen_q, real_seqlen_k}); - randval_host_result.ForEach([&](auto& self, const auto& idx) { - self(idx) = randval_host(b_idx, idx[0], idx[1] + query_offset, idx[2]); - }); - masked_s_host_ref.ForEach([&](const auto& self, const auto& idx) { - // Ignore all masked values in validation check - if(std::isinf(self(idx))) + ck_tile::reference_batched_dropout( + p_host_ref, randval_host_ref, p_undrop_in_uint8_t, rp_undrop); + + ck_tile::HostTensor randval_host_result( + {pack_gqa_nhead, pack_gqa_seqlen_q, real_seqlen_k}); + randval_host_result.ForEach([&](auto& self, const auto& idx) { + self(idx) = randval_host(b_idx, idx[0], idx[1] + query_offset, idx[2]); + }); + bool cur_pass = ck_tile::check_err(randval_host_result, + randval_packed_ref, + "DROPOUT RANDVAL Error: Incorrect results!"); + pass &= cur_pass; + if(!cur_pass) { - randval_host_ref(idx) = 0; - randval_host_result(idx) = 0; + break; } - }); - bool cur_pass = ck_tile::check_err(randval_host_result, - randval_host_ref, - "DROPOUT RANDVAL Error: Incorrect results!"); - pass &= cur_pass; + } + else + { + ck_tile::HostTensor randval_host_ref( + {nhead, real_seqlen_q, real_seqlen_k}); + ck_tile::reference_batched_dropout_randval( + randval_host_ref, wb, drop_seed, drop_offset); + ck_tile::reference_batched_dropout( + p_host_ref, randval_host_ref, p_undrop_in_uint8_t, rp_undrop); + + ck_tile::HostTensor randval_host_result( + {nhead, real_seqlen_q, real_seqlen_k}); + randval_host_result.ForEach([&](auto& self, const auto& idx) { + self(idx) = randval_host(b_idx, idx[0], idx[1] + query_offset, idx[2]); + }); + masked_s_host_ref.ForEach([&](const auto& self, const auto& idx) { + if(std::isinf(self(idx))) + { + randval_host_ref(idx) = 0; + randval_host_result(idx) = 0; + } + }); + bool cur_pass = ck_tile::check_err(randval_host_result, + randval_host_ref, + "DROPOUT RANDVAL Error: Incorrect results!"); + pass &= cur_pass; + if(!cur_pass) + { + break; + } + } } if constexpr(is_mx) @@ -2422,7 +2518,16 @@ fwd_result fmha_fwd_run(mode_enum mode, ck_tile::HostTensor o_host_result({nhead, real_seqlen_q, hdim_v}); // clang-format off // permute - if(o_perm) o_host_result.ForEach([&](auto& self, auto idx) { self(idx) = o_host(b_idx, idx[0], idx[1] + query_offset, idx[2]); }); + if(pack_gqa_nhead != nhead) + { + // Pack-GQA: o_host uses packed layout, unpack for comparison + o_host_result.ForEach([&](auto& self, auto idx) { + ck_tile::index_t packed_head = idx[0] / nhead_ratio; + ck_tile::index_t packed_seq = (idx[0] % nhead_ratio) * real_seqlen_q + idx[1] + query_offset; + self(idx) = o_host(b_idx, packed_head, packed_seq, idx[2]); + }); + } + else if(o_perm) o_host_result.ForEach([&](auto& self, auto idx) { self(idx) = o_host(b_idx, idx[0], idx[1] + query_offset, idx[2]); }); else o_host_result.ForEach([&](auto& self, auto idx) { self(idx) = o_host(b_idx, idx[1] + query_offset, idx[0], idx[2]); }); // clang-format on auto [rtol, atol] = get_elimit(init_method); diff --git a/example/ck_tile/01_fmha/script/benchmark_fwd.sh b/example/ck_tile/01_fmha/script/benchmark_fwd.sh index f2b3a48dcb6..12dc305ab58 100755 --- a/example/ck_tile/01_fmha/script/benchmark_fwd.sh +++ b/example/ck_tile/01_fmha/script/benchmark_fwd.sh @@ -53,4 +53,4 @@ $EXE $base_group_args -s_qpad=1152,896,576,320 -s_kpad=1152,896,576,320 $EXE $base_group_args -s_qpad=1536,1152,768,384 -s_kpad=1536,1152,768,384 # high physical pad -$EXE $base_group_args -s_qpad=2048,1536,1024,512 -s_kpad=2048,1536,1024,512 +$EXE $base_group_args -s_qpad=2048,1536,1024,512 -s_kpad=2048,1536,1024,512 \ No newline at end of file diff --git a/example/ck_tile/03_gemm/CMakeLists.txt b/example/ck_tile/03_gemm/CMakeLists.txt index 85094df6770..81949dd00a2 100644 --- a/example/ck_tile/03_gemm/CMakeLists.txt +++ b/example/ck_tile/03_gemm/CMakeLists.txt @@ -21,8 +21,8 @@ if(GPU_TARGETS MATCHES "gfx94|gfx95|gfx90a|gfx125") list(APPEND EXAMPLE_GEMM_COMPILE_OPTIONS -mllvm -enable-noalias-to-md-conversion=0) list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS -Wno-unused-local-typedef) list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS -Wno-gnu-line-marker) - #list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS --save-temps) - list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS "SHELL: -mllvm -greedy-reverse-local-assignment=1 -mllvm -enable-noalias-to-md-conversion=0") + # list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS --save-temps) + list(APPEND EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS "SHELL: -mllvm -greedy-reverse-local-assignment=1 -mllvm -enable-noalias-to-md-conversion=1") target_compile_options(tile_example_gemm_basic PRIVATE ${EXAMPLE_GEMM_COMPILE_OPTIONS}) target_compile_options(tile_example_gemm_universal PRIVATE ${EXAMPLE_GEMM_COMPILE_OPTIONS}) target_compile_options(tile_example_gemm_weight_preshuffle PRIVATE ${EXAMPLE_WEIGHT_PRESHUFFLE_COMPILE_OPTIONS}) diff --git a/example/ck_tile/03_gemm/gemm_basic.cpp b/example/ck_tile/03_gemm/gemm_basic.cpp index 7d6a2adc384..413b30fec8d 100644 --- a/example/ck_tile/03_gemm/gemm_basic.cpp +++ b/example/ck_tile/03_gemm/gemm_basic.cpp @@ -44,7 +44,6 @@ int run_gemm_example(ck_tile::ArgParser& arg_parser) #ifdef CK_GFX950_SUPPORT else if(data_type == "tf32") { - // Pass tf32_t as A/B types - epilogue auto-detects and maps to float for data operations return run_gemm_example_prec_type static float gemm(const ck_tile::GemmHostArgs& args, const ck_tile::stream_config& s) { - // ADataTypeCompute: compute type (tf32_t for TF32 mode, used for warp gemm selection) - // ADataTypeBuf: buffer/storage type (fp32 when tf32) - using ADataTypeCompute = ADataType_; - using BDataTypeCompute = BDataType_; - using ADataTypeBuf = ck_tile::if_select_t; - using BDataTypeBuf = ck_tile::if_select_t; - - if constexpr(std::is_same_v) + if constexpr(std::is_same_v) { - static_assert(std::is_same_v, - "ADataTypeCompute and BDataTypeCompute must be the same"); + static_assert(std::is_same_v, + "ADataType and BDataType must be the same"); } if constexpr(Persistent) @@ -37,12 +30,13 @@ struct BasicInvoker std::cout << "WARNING: Ignoring persistent kernel option for basic gemm." << std::endl; } - constexpr bool is_fp32_input = std::is_same_v; - constexpr bool is_tf32_compute = std::is_same_v; + constexpr bool is_fp32_or_tf32_input = + std::is_same_v || std::is_same_v; + constexpr bool is_tf32_compute = std::is_same_v; // This part comes from the Codegen - constexpr ck_tile::index_t M_Tile = is_fp32_input ? 128 : 256; - constexpr ck_tile::index_t N_Tile = is_fp32_input ? 128 : 256; + constexpr ck_tile::index_t M_Tile = is_fp32_or_tf32_input ? 128 : 256; + constexpr ck_tile::index_t N_Tile = is_fp32_or_tf32_input ? 128 : 256; constexpr ck_tile::index_t K_Tile = 64; #if CK_TILE_USE_WMMA @@ -53,17 +47,19 @@ struct BasicInvoker constexpr ck_tile::index_t M_Warp_Tile = 16; constexpr ck_tile::index_t N_Warp_Tile = 16; constexpr ck_tile::index_t K_Warp_Tile = - ck_tile::get_k_warp_tile(); + ck_tile::get_k_warp_tile(); ck_tile::ignore = is_tf32_compute; #else // gfx950: fp32 uses 16x16x16 tile (native MFMA) // tf32 uses 32x32x16 tile (3x bf16 32x32x16 MFMA emulation) - constexpr ck_tile::index_t M_Warp = (is_fp32_input && !is_tf32_compute) ? 4 : 2; - constexpr ck_tile::index_t N_Warp = (is_fp32_input && !is_tf32_compute) ? 4 : 2; + constexpr ck_tile::index_t M_Warp = (is_fp32_or_tf32_input && !is_tf32_compute) ? 4 : 2; + constexpr ck_tile::index_t N_Warp = (is_fp32_or_tf32_input && !is_tf32_compute) ? 4 : 2; constexpr ck_tile::index_t K_Warp = 1; - constexpr ck_tile::index_t M_Warp_Tile = (is_fp32_input && !is_tf32_compute) ? 16 : 32; - constexpr ck_tile::index_t N_Warp_Tile = (is_fp32_input && !is_tf32_compute) ? 16 : 32; + constexpr ck_tile::index_t M_Warp_Tile = + (is_fp32_or_tf32_input && !is_tf32_compute) ? 16 : 32; + constexpr ck_tile::index_t N_Warp_Tile = + (is_fp32_or_tf32_input && !is_tf32_compute) ? 16 : 32; constexpr ck_tile::index_t K_Warp_Tile = 16; #endif @@ -81,15 +77,15 @@ struct BasicInvoker BLayout, CLayout>; - using AComputeDataType = std:: - conditional_t, BDataType_, ADataType_>; + using AComputeDataType = + std::conditional_t, BDataType, ADataType>; using BComputeDataType = - std::conditional_t || - std::is_same_v, - ADataType_, - BDataType_>; - using CodegenPipelineProblem = ck_tile::GemmPipelineProblem || + std::is_same_v, + ADataType, + BDataType>; + using CodegenPipelineProblem = ck_tile::GemmPipelineProblem; using GemmEpilogue = ck_tile::CShuffleEpilogue< - ck_tile::CShuffleEpilogueProblem, AccDataType, CDataType, @@ -141,7 +137,7 @@ struct BasicInvoker } // Declare rotating_mem_ptr here so it stays in scope until it is needed - std::unique_ptr> rotating_mem_ptr; + std::unique_ptr> rotating_mem_ptr; std::function preprocess; auto clear_gemm_output = [&]() { @@ -154,21 +150,16 @@ struct BasicInvoker { std::cout << "Flushing cache..." << std::endl; - ck_tile::HostTensor a_m(ck_tile::host_tensor_descriptor( + ck_tile::HostTensor a_m(ck_tile::host_tensor_descriptor( args.M, args.K, args.stride_A, is_row_major(ALayout{}))); - ck_tile::HostTensor b_n(ck_tile::host_tensor_descriptor( + ck_tile::HostTensor b_n(ck_tile::host_tensor_descriptor( args.K, args.N, args.stride_B, is_row_major(BLayout{}))); auto size_a_buffer = a_m.get_element_space_size_in_bytes(); auto size_b_buffer = b_n.get_element_space_size_in_bytes(); - rotating_mem_ptr = - std::make_unique>( - kargs.as_ptr[0], - kargs.bs_ptr[0], - s.rotating_count_, - size_a_buffer, - size_b_buffer); + rotating_mem_ptr = std::make_unique>( + kargs.as_ptr[0], kargs.bs_ptr[0], s.rotating_count_, size_a_buffer, size_b_buffer); rotating_mem_ptr->Print(); preprocess = [&]() { diff --git a/example/ck_tile/03_gemm/gemm_utils.hpp b/example/ck_tile/03_gemm/gemm_utils.hpp index 2574b1dbc42..676677408f0 100644 --- a/example/ck_tile/03_gemm/gemm_utils.hpp +++ b/example/ck_tile/03_gemm/gemm_utils.hpp @@ -3,16 +3,15 @@ #pragma once -#include -#include - #include "ck_tile/core.hpp" -#include "ck_tile/core/numeric/pk_fp4.hpp" #include "ck_tile/host/kernel_launch.hpp" #include "ck_tile/ops/epilogue.hpp" #include "ck_tile/ops/gemm.hpp" #include "ck_tile/utility/json_dump.hpp" +#include +#include + struct GemmConfigBase { static constexpr bool kPadM = false; @@ -41,12 +40,9 @@ struct GemmConfigBase ck_tile::DataCachePrefetchKind::None; static constexpr ck_tile::DataCachePrefetchKind DataCachePrefetchB = ck_tile::DataCachePrefetchKind::None; + static constexpr bool Async = false; }; -// Type trait for tf32 storage type (tf32 uses float for memory layout calculations) -template -using prec_storage_type = ck_tile::if_select_t; - template struct GemmConfigMemoryInterwave : public GemmConfigBase { @@ -93,7 +89,7 @@ struct GemmConfigComputeV3 : public GemmConfigBase // Compute V3 only support Intrawave scheduler static constexpr ck_tile::index_t M_Tile = 16; static constexpr ck_tile::index_t N_Tile = 64; - static constexpr ck_tile::index_t K_Tile = 256 / sizeof(prec_storage_type); + static constexpr ck_tile::index_t K_Tile = 256 / sizeof(PrecType); static constexpr ck_tile::index_t M_Warp = 1; static constexpr ck_tile::index_t N_Warp = 4; @@ -133,7 +129,33 @@ struct GemmConfigComputeV3_2 : public GemmConfigBase { static constexpr ck_tile::index_t M_Tile = 128; static constexpr ck_tile::index_t N_Tile = 128; - static constexpr ck_tile::index_t K_Tile = 128 / sizeof(prec_storage_type); + static constexpr ck_tile::index_t K_Tile = 128 / sizeof(PrecType); + + static constexpr ck_tile::index_t M_Warp = 2; + static constexpr ck_tile::index_t N_Warp = 2; + static constexpr ck_tile::index_t K_Warp = 1; + + static constexpr ck_tile::index_t M_Warp_Tile = 16; + static constexpr ck_tile::index_t N_Warp_Tile = 16; + static constexpr ck_tile::index_t K_Warp_Tile = + ck_tile::get_k_warp_tile(); + + static constexpr bool DoubleSmemBuffer = false; + static constexpr ck_tile::GemmPipeline Pipeline = ck_tile::GemmPipeline::COMPUTE_V3; + + static constexpr int kBlockPerCu = 2; +}; + +template +struct GemmConfigComputeV3_3 : public GemmConfigBase +{ + static constexpr bool kPadM = true; + static constexpr bool kPadN = true; + static constexpr bool kPadK = true; + + static constexpr ck_tile::index_t M_Tile = 128; + static constexpr ck_tile::index_t N_Tile = 256 / sizeof(PrecType); + static constexpr ck_tile::index_t K_Tile = 128 / sizeof(PrecType); static constexpr ck_tile::index_t M_Warp = 2; static constexpr ck_tile::index_t N_Warp = 2; @@ -148,6 +170,7 @@ struct GemmConfigComputeV3_2 : public GemmConfigBase static constexpr ck_tile::GemmPipeline Pipeline = ck_tile::GemmPipeline::COMPUTE_V3; static constexpr int kBlockPerCu = 2; + static constexpr bool Async = true; }; template @@ -313,7 +336,7 @@ struct GemmConfigPreshufflePrefill : public GemmConfigBase { static constexpr ck_tile::index_t M_Tile = 128; static constexpr ck_tile::index_t N_Tile = 128; - static constexpr ck_tile::index_t K_Tile = 128 / sizeof(prec_storage_type); + static constexpr ck_tile::index_t K_Tile = 128 / sizeof(PrecType); static constexpr ck_tile::index_t M_Warp = 1; static constexpr ck_tile::index_t N_Warp = 4; @@ -322,7 +345,7 @@ struct GemmConfigPreshufflePrefill : public GemmConfigBase static constexpr ck_tile::index_t M_Warp_Tile = 16; static constexpr ck_tile::index_t N_Warp_Tile = 16; static constexpr ck_tile::index_t K_Warp_Tile = - ck_tile::get_k_warp_tile, M_Warp_Tile, true>(); + ck_tile::get_k_warp_tile(); static constexpr int kBlockPerCu = 2; static constexpr auto Scheduler = ck_tile::GemmPipelineScheduler::Default; @@ -331,6 +354,19 @@ struct GemmConfigPreshufflePrefill : public GemmConfigBase static constexpr bool DoubleSmemBuffer = true; static constexpr int N_Repeat = N_Tile / N_Warp_Tile / N_Warp; static constexpr bool TiledMMAPermuteN = N_Repeat % 2 == 0; + + static constexpr bool Async = false; +}; + +template +struct GemmConfigPreshufflePrefillAsync : public GemmConfigPreshufflePrefill +{ + static constexpr ck_tile::index_t N_Tile = 256; + + // N_Repeat is even in this config + static constexpr bool TiledMMAPermuteN = true; + + static constexpr bool Async = true; }; template @@ -360,8 +396,8 @@ struct GemmTypeConfig; template <> struct GemmTypeConfig { - using ADataType = float; - using BDataType = float; + using ADataType = ck_tile::tf32_t; + using BDataType = ck_tile::tf32_t; using AccDataType = float; using CDataType = float; }; diff --git a/example/ck_tile/03_gemm/gemm_weight_preshuffle_invoker.hpp b/example/ck_tile/03_gemm/gemm_weight_preshuffle_invoker.hpp index fcd9243bebf..cb335607bc0 100644 --- a/example/ck_tile/03_gemm/gemm_weight_preshuffle_invoker.hpp +++ b/example/ck_tile/03_gemm/gemm_weight_preshuffle_invoker.hpp @@ -33,6 +33,8 @@ struct WeightPreshuffleInvoker GemmConfig::TileParitionerGroupNum, GemmConfig::TileParitionerM01>; + static constexpr ck_tile::index_t VectorSize = 16; + using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits; + GemmConfig::DataCachePrefetchB, + GemmConfig::Async>; + constexpr auto scheduler = GemmConfig::Scheduler; using AComputeDataType = diff --git a/example/ck_tile/03_gemm/gemm_weight_preshuffle_tdm_data_cache_prefetch.cpp b/example/ck_tile/03_gemm/gemm_weight_preshuffle_tdm_data_cache_prefetch.cpp index 59b938f92d3..6034b84b576 100644 --- a/example/ck_tile/03_gemm/gemm_weight_preshuffle_tdm_data_cache_prefetch.cpp +++ b/example/ck_tile/03_gemm/gemm_weight_preshuffle_tdm_data_cache_prefetch.cpp @@ -182,6 +182,8 @@ struct GemmConfigWeightPreshuffleTDMPrefetch : public GemmConfigBase static constexpr ck_tile::DataCachePrefetchKind DataCachePrefetchB = DataCachePrefetchB_; static constexpr int N_Repeat = N_Tile / N_Warp_Tile / N_Warp; static constexpr bool TiledMMAPermuteN = N_Repeat % 2 == 0; + + static constexpr bool Async = false; }; int main(int argc, char* argv[]) diff --git a/example/ck_tile/03_gemm/run_gemm_example.inc b/example/ck_tile/03_gemm/run_gemm_example.inc index 2698d594889..54313336a29 100644 --- a/example/ck_tile/03_gemm/run_gemm_example.inc +++ b/example/ck_tile/03_gemm/run_gemm_example.inc @@ -209,8 +209,6 @@ std::tuple inline parse_ge return std::make_tuple(M, N, K); } -// ADataType_ and BDataType_ are original types (e.g., tf32_t for TF32 mode) -// They are passed through invoke_gemm to invoker for tf32 auto-detection template float mapping for host tensors and device buffers using TypeConfig = GemmTypeConfig; using ADataTypeBuf = typename TypeConfig::ADataType; using BDataTypeBuf = typename TypeConfig::BDataType; @@ -357,8 +349,8 @@ int run_gemm_example_with_layouts(ck_tile::ArgParser& arg_parser, float ave_time = invoke_gemm, AccDataType, CDataType, @@ -411,12 +403,12 @@ int run_gemm_example_with_layouts(ck_tile::ArgParser& arg_parser, if(arg_parser.get_int("v") == 1) { - ck_tile::reference_gemm( + ck_tile::reference_gemm( a_m_k, b_k_n, c_m_n_ref); const float max_accumulated_value = *std::max_element(c_m_n_ref.mData.begin(), c_m_n_ref.mData.end()); const auto rtol_atol = - calculate_rtol_atol( + calculate_rtol_atol( K, kbatch, max_accumulated_value); pass = do_verify(c_m_n_dev_result, c_m_n_ref, rtol_atol, "CPU"); } @@ -440,8 +432,8 @@ int run_gemm_example_with_layouts(ck_tile::ArgParser& arg_parser, BDataTypeBuf* d_B = static_cast(b_k_n_dev_buf.GetDeviceBuffer()); CDataType* d_C = static_cast(c_m_n_gpu_buf_ref.GetDeviceBuffer()); - ck_tile::reference_gemm_gpu( + calculate_rtol_atol( K, kbatch, max_accumulated_value); pass = do_verify(c_m_n_dev_result, c_m_n_ref, rtol_atol, "GPU"); } diff --git a/example/ck_tile/03_gemm/universal_gemm_invoker.hpp b/example/ck_tile/03_gemm/universal_gemm_invoker.hpp index 79e6d259919..1b7957e66a7 100644 --- a/example/ck_tile/03_gemm/universal_gemm_invoker.hpp +++ b/example/ck_tile/03_gemm/universal_gemm_invoker.hpp @@ -57,6 +57,7 @@ struct UniversalInvoker GemmConfig::TileParitionerGroupNum, GemmConfig::TileParitionerM01>>; + constexpr ck_tile::index_t VectorSize = 16; using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits; + GemmConfig::DataCachePrefetchB, + GemmConfig::Async>; constexpr auto scheduler = GemmConfig::Scheduler; @@ -247,6 +249,7 @@ struct UniversalInvoker GemmConfig::TileParitionerGroupNum, GemmConfig::TileParitionerM01>; + constexpr ck_tile::index_t VectorSize = 16; using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits; + GemmConfig::Preshuffle, + VectorSize, + GemmConfig::DataCachePrefetchA, + GemmConfig::DataCachePrefetchB, + GemmConfig::Async>; constexpr auto scheduler = GemmConfig::Scheduler; using AComputeDataType = diff --git a/example/ck_tile/05_reduce/multiple_reduce_multiblock.cpp b/example/ck_tile/05_reduce/multiple_reduce_multiblock.cpp index 2384dc2aa58..29eedb57dbc 100644 --- a/example/ck_tile/05_reduce/multiple_reduce_multiblock.cpp +++ b/example/ck_tile/05_reduce/multiple_reduce_multiblock.cpp @@ -245,7 +245,7 @@ bool run(const ck_tile::ArgParser& arg_parser) if(pass_op) { - std::cout << "✅ valid results for this operation" << std::endl; + std::cout << "[OK] valid results for this operation" << std::endl; } pass &= pass_op; }); diff --git a/example/ck_tile/20_grouped_convolution/CMakeLists.txt b/example/ck_tile/20_grouped_convolution/CMakeLists.txt index 18e71c255d4..3f199f9cc06 100644 --- a/example/ck_tile/20_grouped_convolution/CMakeLists.txt +++ b/example/ck_tile/20_grouped_convolution/CMakeLists.txt @@ -8,9 +8,6 @@ if(GPU_TARGETS MATCHES "gfx94|gfx95|gfx90a|gfx11|gfx12") add_executable(tile_example_grouped_conv_fwd grouped_convolution_forward.cpp) target_compile_options(tile_example_grouped_conv_fwd PRIVATE ${EXAMPLE_CONV_COMPILE_OPTIONS}) - add_executable(tile_example_grouped_conv_fwd_large_tensor grouped_convolution_forward_large_tensor.cpp) - target_compile_options(tile_example_grouped_conv_fwd_large_tensor PRIVATE ${EXAMPLE_CONV_COMPILE_OPTIONS}) - add_executable(tile_example_grouped_conv_fwd_bias_clamp grouped_convolution_forward_bias_clamp.cpp) target_compile_options(tile_example_grouped_conv_fwd_bias_clamp PRIVATE ${EXAMPLE_GEMM_COMPILE_OPTIONS}) @@ -18,7 +15,7 @@ if(GPU_TARGETS MATCHES "gfx94|gfx95|gfx90a|gfx11|gfx12") target_compile_options(tile_example_grouped_conv_bwd_weight PRIVATE ${EXAMPLE_CONV_COMPILE_OPTIONS}) # StreamK requires cross-CU coherence (StreamKCoherency), CDNA only. - if(GPU_TARGETS MATCHES "gfx90a|gfx942|gfx950") + if(GPU_TARGETS MATCHES "gfx90a|gfx942|gfx950|gfx1250") add_executable(tile_example_grouped_conv_bwd_weight_streamk grouped_convolution_backward_weight_streamk.cpp) target_compile_options(tile_example_grouped_conv_bwd_weight_streamk PRIVATE ${EXAMPLE_CONV_COMPILE_OPTIONS}) endif() diff --git a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_data_invoker.hpp b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_data_invoker.hpp index 1679fec7dfc..cdecdac9146 100644 --- a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_data_invoker.hpp +++ b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_data_invoker.hpp @@ -45,6 +45,8 @@ struct GroupedConvolutionBackwardDataInvoker GroupedConvTraitsType::FixedGemmParams::TilePartitionerGroupNum, GroupedConvTraitsType::FixedGemmParams::TilePartitionerM01>; + constexpr bool LargeTensors = false; + using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits< GroupedConvTraitsType::FixedGemmParams::kPadM, GroupedConvTraitsType::FixedGemmParams::kPadN, @@ -56,7 +58,13 @@ struct GroupedConvolutionBackwardDataInvoker GroupedConvTraitsType::FixedGemmParams::TransposeC, GroupedConvTraitsType::FixedGemmParams::UseStructuredSparsity, GroupedConvTraitsType::FixedGemmParams::Persistent, - ConvConfig::NumWaveGroups>; + ConvConfig::NumWaveGroups, + GroupedConvTraitsType::FixedGemmParams::Preshuffle, + GroupedConvTraitsType::FixedGemmParams::LDSVectorSize, + ck_tile::DataCachePrefetchKind::None, + ck_tile::DataCachePrefetchKind::None, + false, /*Async*/ + LargeTensors>; constexpr auto scheduler = ConvConfig::Scheduler; using UniversalGemmProblem = ck_tile::UniversalGemmPipelineProblem< diff --git a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_invoker.hpp b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_invoker.hpp index 533abdd3391..2b38e68650a 100644 --- a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_invoker.hpp +++ b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_invoker.hpp @@ -64,6 +64,8 @@ struct GroupedConvolutionBackwardWeightInvoker using TilePartitioner = typename PartitionerPolicy::template type; + constexpr bool LargeTensors = false; + using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits< GroupedConvTraitsType::FixedGemmParams::kPadM, GroupedConvTraitsType::FixedGemmParams::kPadN, @@ -75,7 +77,13 @@ struct GroupedConvolutionBackwardWeightInvoker GroupedConvTraitsType::FixedGemmParams::TransposeC, GroupedConvTraitsType::FixedGemmParams::UseStructuredSparsity, GroupedConvTraitsType::FixedGemmParams::Persistent, - ConvConfig::NumWaveGroups>; + ConvConfig::NumWaveGroups, + GroupedConvTraitsType::FixedGemmParams::Preshuffle, + GroupedConvTraitsType::FixedGemmParams::LDSVectorSize, + ck_tile::DataCachePrefetchKind::None, + ck_tile::DataCachePrefetchKind::None, + false, /*Async*/ + LargeTensors>; constexpr auto scheduler = ConvConfig::Scheduler; using UniversalGemmProblem = ck_tile::UniversalGemmPipelineProblem< diff --git a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_two_stage_invoker.hpp b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_two_stage_invoker.hpp index 68c85e9495f..e277e1fd31a 100644 --- a/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_two_stage_invoker.hpp +++ b/example/ck_tile/20_grouped_convolution/grouped_convolution_backward_weight_two_stage_invoker.hpp @@ -50,6 +50,8 @@ struct GroupedConvolutionBackwardWeightTwoStageInvoker GroupedConvTraitsType::FixedGemmParams::TilePartitionerGroupNum, GroupedConvTraitsType::FixedGemmParams::TilePartitionerM01>; + constexpr bool LargeTensors = false; + using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits< GroupedConvTraitsType::FixedGemmParams::kPadM, GroupedConvTraitsType::FixedGemmParams::kPadN, @@ -61,7 +63,13 @@ struct GroupedConvolutionBackwardWeightTwoStageInvoker GroupedConvTraitsType::FixedGemmParams::TransposeC, GroupedConvTraitsType::FixedGemmParams::UseStructuredSparsity, GroupedConvTraitsType::FixedGemmParams::Persistent, - ConvConfig::NumWaveGroups>; + ConvConfig::NumWaveGroups, + GroupedConvTraitsType::FixedGemmParams::Preshuffle, + GroupedConvTraitsType::FixedGemmParams::LDSVectorSize, + ck_tile::DataCachePrefetchKind::None, + ck_tile::DataCachePrefetchKind::None, + false, /*Async*/ + LargeTensors>; constexpr auto scheduler = ConvConfig::Scheduler; diff --git a/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_invoker.hpp b/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_invoker.hpp index a396dd82cbf..7fb246f5ab6 100644 --- a/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_invoker.hpp +++ b/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_invoker.hpp @@ -1,12 +1,6 @@ // Copyright (c) Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT -// Regular grouped convolution invoker (no split-image) -// This invoker demonstrates regular convolution without split-image. -// It always uses Kernel (split-image disabled). -// For large images that require split-image, use -// grouped_convolution_forward_split_image_invoker.hpp - #pragma once #include "grouped_convolution_utils.hpp" @@ -53,6 +47,8 @@ struct GroupedConvolutionForwardInvoker GroupedConvTraitsType::FixedGemmParams::TilePartitionerGroupNum, GroupedConvTraitsType::FixedGemmParams::TilePartitionerM01>; + constexpr bool LargeTensors = false; + using GemmUniversalTraits = ck_tile::TileGemmUniversalTraits< GroupedConvTraitsType::FixedGemmParams::kPadM, GroupedConvTraitsType::FixedGemmParams::kPadN, @@ -64,7 +60,13 @@ struct GroupedConvolutionForwardInvoker GroupedConvTraitsType::FixedGemmParams::TransposeC, GroupedConvTraitsType::FixedGemmParams::UseStructuredSparsity, GroupedConvTraitsType::FixedGemmParams::Persistent, - ConvConfig::NumWaveGroups>; + ConvConfig::NumWaveGroups, + GroupedConvTraitsType::FixedGemmParams::Preshuffle, + GroupedConvTraitsType::FixedGemmParams::LDSVectorSize, + ck_tile::DataCachePrefetchKind::None, + ck_tile::DataCachePrefetchKind::None, + false, /*Async*/ + LargeTensors>; constexpr auto scheduler = ConvConfig::Scheduler; // ===================================================================== diff --git a/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_large_tensor.cpp b/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_large_tensor.cpp deleted file mode 100644 index 9a7eb7082a9..00000000000 --- a/example/ck_tile/20_grouped_convolution/grouped_convolution_forward_large_tensor.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. -// SPDX-License-Identifier: MIT - -// Large tensor grouped convolution example -// This example demonstrates convolution for large tensors that exceed memory limits. -// It uses automatic tensor splitting when needed to handle large images. -// For regular convolution without tensor splitting, use grouped_convolution_forward.cpp - -#include - -#include -#include -#include -#include -#include - -#include "ck_tile/host.hpp" -#include "grouped_convolution_utils.hpp" -#include "grouped_convolution_forward_large_tensor_invoker.hpp" -#include "run_grouped_convolution_fwd_example.inc" - -template