CUTLASS 3.6.0 (#1850)
* v3.6 * update changelog * update readme * fix typo * fixing typos * hopper gemm with weight prefetch --------- Co-authored-by: yuzhai <yuzhai@nvidia.com> Co-authored-by: Haicheng Wu <haichengw@nvidia.com>
This commit is contained in:
co-authored by
yuzhai
Haicheng Wu
parent
0837a2a00a
commit
cc3c29a81a
@@ -93,12 +93,24 @@ class NamedBarrier {
|
||||
NamedBarrier::arrive_and_wait_internal(num_threads_, id_);
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
void arrive_and_wait_unaligned() const {
|
||||
// Note: The value of id_ is already the final barrier id (set correctly in the constructor).
|
||||
NamedBarrier::arrive_and_wait_internal_unaligned(num_threads_, id_);
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
void arrive() const {
|
||||
// Note: The value of id_ is already the final barrier id (set correctly in the constructor).
|
||||
NamedBarrier::arrive_internal(num_threads_, id_);
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
void arrive_unaligned() const {
|
||||
// Note: The value of id_ is already the final barrier id (set correctly in the constructor).
|
||||
NamedBarrier::arrive_internal_unaligned(num_threads_, id_);
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
void sync() const {
|
||||
NamedBarrier::arrive_and_wait();
|
||||
@@ -148,11 +160,23 @@ class NamedBarrier {
|
||||
sync_internal(num_threads, static_cast<int>(reserved_named_barriers));
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
CUTLASS_DEVICE
|
||||
static void arrive_and_wait_internal(uint32_t num_threads, uint32_t barrier_id) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
asm volatile("bar.sync %0, %1;" : : "r"(barrier_id), "r"(num_threads));
|
||||
cutlass::arch::synclog_emit_named_barrier_arrive_and_wait(__LINE__, num_threads, barrier_id);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
static void arrive_and_wait_internal_unaligned(uint32_t num_threads, uint32_t barrier_id) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
asm volatile("barrier.sync %0, %1;" : : "r"(barrier_id), "r"(num_threads));
|
||||
cutlass::arch::synclog_emit_named_barrier_arrive_and_wait(__LINE__, num_threads, barrier_id);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -161,12 +185,23 @@ class NamedBarrier {
|
||||
CUTLASS_DEVICE
|
||||
static void arrive_internal(uint32_t num_threads, uint32_t barrier_id) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
cutlass::arch::synclog_emit_named_barrier_arrive(__LINE__, num_threads, barrier_id);
|
||||
asm volatile("bar.arrive %0, %1;" : : "r"(barrier_id), "r"(num_threads));
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
static void arrive_internal_unaligned(uint32_t num_threads, uint32_t barrier_id) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
cutlass::arch::synclog_emit_named_barrier_arrive(__LINE__, num_threads, barrier_id);
|
||||
asm volatile("barrier.arrive %0, %1;" : : "r"(barrier_id), "r"(num_threads));
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
}
|
||||
|
||||
CUTLASS_DEVICE
|
||||
static void sync_internal(uint32_t num_threads, uint32_t barrier_id) {
|
||||
NamedBarrier::arrive_and_wait_internal(num_threads, barrier_id);
|
||||
@@ -243,6 +278,7 @@ public:
|
||||
"}"
|
||||
:
|
||||
: "r"(arrive_count), "r"(smem_addr));
|
||||
cutlass::arch::synclog_emit_cluster_barrier_init(__LINE__, smem_addr, arrive_count);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -253,6 +289,7 @@ public:
|
||||
static void wait(ValueType const* smem_ptr, uint32_t phase) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
uint32_t smem_addr = cute::cast_smem_ptr_to_uint(smem_ptr);
|
||||
cutlass::arch::synclog_emit_cluster_barrier_wait(__LINE__, smem_addr, phase);
|
||||
// Arbitrarily large timer value after which try-wait expires and re-tries.
|
||||
uint32_t ticks = 0x989680;
|
||||
asm volatile(
|
||||
@@ -276,6 +313,7 @@ public:
|
||||
static bool test_wait(ValueType const* smem_ptr, uint32_t phase, uint32_t pred) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
uint32_t smem_addr = cute::cast_smem_ptr_to_uint(smem_ptr);
|
||||
cutlass::arch::synclog_emit_cluster_barrier_test_wait(__LINE__, smem_addr, phase, pred);
|
||||
uint32_t waitComplete;
|
||||
|
||||
asm volatile(
|
||||
@@ -300,6 +338,7 @@ public:
|
||||
static bool try_wait(ValueType const* smem_ptr, uint32_t phase) {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
uint32_t smem_addr = cute::cast_smem_ptr_to_uint(smem_ptr);
|
||||
cutlass::arch::synclog_emit_cluster_barrier_try_wait(__LINE__, smem_addr, phase);
|
||||
uint32_t waitComplete;
|
||||
|
||||
asm volatile(
|
||||
@@ -334,6 +373,7 @@ public:
|
||||
: "r"(smem_addr), "r"(cta_id));
|
||||
}
|
||||
|
||||
cutlass::arch::synclog_emit_cluster_barrier_arrive_cluster(__LINE__, smem_addr, cta_id, pred);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -350,6 +390,7 @@ public:
|
||||
"}"
|
||||
:
|
||||
: "r"(smem_addr));
|
||||
cutlass::arch::synclog_emit_cluster_barrier_arrive(__LINE__, smem_addr);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -426,6 +467,7 @@ struct ClusterTransactionBarrier : public ClusterBarrier {
|
||||
"}"
|
||||
:
|
||||
: "r"(transaction_bytes), "r"(smem_addr));
|
||||
cutlass::arch::synclog_emit_cluster_transaction_barrier_arrive_and_expect_tx(__LINE__, smem_addr, transaction_bytes);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -463,6 +505,7 @@ struct ClusterTransactionBarrier : public ClusterBarrier {
|
||||
"}"
|
||||
:
|
||||
: "r"(transaction_bytes), "r"(smem_addr));
|
||||
cutlass::arch::synclog_emit_cluster_transaction_barrier_expect_transaction(__LINE__, smem_addr, transaction_bytes);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -483,6 +526,7 @@ struct ClusterTransactionBarrier : public ClusterBarrier {
|
||||
"}"
|
||||
:
|
||||
: "r"(transaction_bytes), "r"(smem_addr), "r"(pred));
|
||||
cutlass::arch::synclog_emit_cluster_transaction_barrier_complete_transaction(__LINE__, smem_addr, dst_cta_id, transaction_bytes, pred);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
@@ -536,6 +580,7 @@ struct ClusterTransactionBarrier : public ClusterBarrier {
|
||||
CUTLASS_DEVICE
|
||||
void fence_barrier_init() {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
cutlass::arch::synclog_emit_fence_barrier_init(__LINE__);
|
||||
asm volatile(
|
||||
"{\n\t"
|
||||
"fence.mbarrier_init.release.cluster; \n"
|
||||
@@ -550,6 +595,7 @@ void fence_barrier_init() {
|
||||
CUTLASS_DEVICE
|
||||
void fence_view_async_shared() {
|
||||
#if CUDA_BARRIER_ENABLED
|
||||
cutlass::arch::synclog_emit_fence_view_async_shared(__LINE__);
|
||||
asm volatile (
|
||||
"{\n\t"
|
||||
"fence.proxy.async.shared::cta; \n"
|
||||
@@ -571,6 +617,7 @@ void cpasync_barrier_arrive(uint64_t const* smem_ptr) {
|
||||
"}"
|
||||
:
|
||||
: "r"(smem_addr));
|
||||
cutlass::arch::synclog_emit_cpasync_barrier_arrive(__LINE__, smem_addr);
|
||||
#elif defined(__CUDA_ARCH__)
|
||||
asm volatile ("brkpt;\n" ::);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2024 - 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
**************************************************************************************************/
|
||||
|
||||
/*! \file
|
||||
\brief Definitions for architecture macros
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SM90
|
||||
#if (__CUDACC_VER_MAJOR__ > 12 || (__CUDACC_VER_MAJOR__ == 12 && __CUDACC_VER_MINOR__ >= 0))
|
||||
#define CUTLASS_ARCH_MMA_SM90_SUPPORTED 1
|
||||
#if (!defined(CUTLASS_ARCH_MMA_SM90_ENABLED) && defined(__CUDA_ARCH__) && __CUDA_ARCH__ == 900)
|
||||
#define CUTLASS_ARCH_MMA_SM90_ENABLED 1
|
||||
|
||||
#if (!defined(CUTLASS_ARCH_MMA_SM90A_ENABLED) && defined(__CUDA_ARCH_FEAT_SM90_ALL))
|
||||
#define CUTLASS_ARCH_MMA_SM90A_ENABLED 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (__CUDACC_VER_MAJOR__ >= 12 && __CUDACC_VER_MINOR__ >= 2)
|
||||
#define CUTLASS_ARCH_MMA_SPARSE_SM90_SUPPORTED
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SM90 Modifiable
|
||||
#if (__CUDACC_VER_MAJOR__ > 12 || (__CUDACC_VER_MAJOR__ == 12 && __CUDACC_VER_MINOR__ >= 3))
|
||||
#define CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90_SUPPORTED 1
|
||||
#if (!defined(CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90_ENABLED) && defined(__CUDA_ARCH__) && __CUDA_ARCH__ == 900)
|
||||
#define CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90_ENABLED 1
|
||||
|
||||
#if (!defined(CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90A_ENABLED) && defined(__CUDA_ARCH_FEAT_SM90_ALL))
|
||||
#define CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90A_ENABLED 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SM90 F64
|
||||
#if (__CUDACC_VER_MAJOR__ > 11 || (__CUDACC_VER_MAJOR__ == 11 && __CUDACC_VER_MINOR__ >= 8))
|
||||
#define CUTLASS_ARCH_MMA_SM90_F64_MMA_SUPPORTED 1
|
||||
#if (!defined(CUTLASS_ARCH_MMA_SM90_F64_MMA_ENABLED) && defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 900)
|
||||
#define CUTLASS_ARCH_MMA_SM90_F64_MMA_ENABLED 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
**************************************************************************************************/
|
||||
|
||||
/*! \file
|
||||
\brief Grid dependent control (GDC) helpers for programmatic dependent launches (PDL).
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cute/arch/cluster_sm90.hpp"
|
||||
#include "cutlass/arch/barrier.h"
|
||||
#include "cutlass/conv/dispatch_policy.hpp"
|
||||
#include "cutlass/gemm/dispatch_policy.hpp"
|
||||
|
||||
#ifndef CUTLASS_GDC_ENABLED
|
||||
#if (defined(CUTLASS_ENABLE_GDC_FOR_SM90) && \
|
||||
__CUDACC_VER_MAJOR__ >= 12 && \
|
||||
defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 900 && defined(__CUDA_ARCH_FEAT_SM90_ALL))
|
||||
#define CUTLASS_GDC_ENABLED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace cutlass {
|
||||
namespace arch {
|
||||
|
||||
// Issuing the launch_dependents instruction hints a dependent kernel to launch earlier
|
||||
// launch_dependents doesn't impact the functionality but the performance:
|
||||
// Launching a dependent kernel too early can compete with current kernels,
|
||||
// while launching too late can lead to a long latency.
|
||||
CUTLASS_DEVICE
|
||||
void launch_dependent_grids() {
|
||||
#if (defined(CUTLASS_GDC_ENABLED))
|
||||
asm volatile("griddepcontrol.launch_dependents;");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Issuing the griddepcontrol.wait instruction enforces no global memory access
|
||||
// prior to this istruction. This ensures the correctness of global memory access
|
||||
// when launching a dependent kernel earlier.
|
||||
CUTLASS_DEVICE
|
||||
void wait_on_dependent_grids() {
|
||||
#if (defined(CUTLASS_GDC_ENABLED))
|
||||
asm volatile("griddepcontrol.wait;");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Enable kernel-level query regarding whether the GDC feature is turned on
|
||||
#if (defined(CUTLASS_GDC_ENABLED))
|
||||
static constexpr bool IsGdcGloballyEnabled = true;
|
||||
#else
|
||||
static constexpr bool IsGdcGloballyEnabled = false;
|
||||
#endif
|
||||
|
||||
|
||||
} // namespace arch
|
||||
} // namespace cutlass
|
||||
@@ -326,6 +326,8 @@ struct cp_async<SizeInBytes, CacheOperation::Global> {
|
||||
"cp.async only supports CacheOperation::Global when access size is 16B.");
|
||||
|
||||
unsigned smem_int_ptr = cutlass_get_smem_pointer(smem_ptr);
|
||||
cutlass::arch::synclog_emit_cp_async(__LINE__, smem_int_ptr, global_ptr, pred_guard, SizeInBytes);
|
||||
|
||||
asm volatile(
|
||||
"{\n"
|
||||
" .reg .pred p;\n"
|
||||
@@ -364,6 +366,8 @@ struct cp_async_zfill<SizeInBytes, CacheOperation::Global> {
|
||||
|
||||
unsigned smem_int_ptr = cutlass_get_smem_pointer(smem_ptr);
|
||||
int src_in_bytes = (pred_guard ? SizeInBytes : 0);
|
||||
cutlass::arch::synclog_emit_cp_async_zfill(__LINE__, smem_int_ptr, global_ptr, pred_guard, SizeInBytes);
|
||||
|
||||
asm volatile(
|
||||
#if CUTLASS_ENABLE_L2_PREFETCH
|
||||
"cp.async.cg.shared.global.L2::128B [%0], [%1], %2, %3;\n" ::"r"(smem_int_ptr),
|
||||
@@ -401,6 +405,8 @@ struct cp_async_nan<16, CacheOperation::Global> {
|
||||
OOB_NAN_F16x2, OOB_NAN_F16x2};
|
||||
|
||||
unsigned smem_int_ptr = cutlass_get_smem_pointer(smem_ptr);
|
||||
cutlass::arch::synclog_emit_cp_async_nan(__LINE__, smem_int_ptr, global_ptr, pred_guard);
|
||||
|
||||
asm volatile(
|
||||
"{\n"
|
||||
" .reg .pred p;\n"
|
||||
@@ -434,6 +440,7 @@ CUTLASS_DEVICE
|
||||
void cp_async_fence() {
|
||||
#if CUDA_CP_ASYNC_ACTIVATED
|
||||
asm volatile("cp.async.commit_group;\n" ::);
|
||||
cutlass::arch::synclog_emit_cp_async_fence(__LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -444,6 +451,7 @@ template <int N>
|
||||
CUTLASS_DEVICE void cp_async_wait() {
|
||||
#if CUDA_CP_ASYNC_ACTIVATED
|
||||
asm volatile("cp.async.wait_group %0;\n" ::"n"(N));
|
||||
cutlass::arch::synclog_emit_cp_async_wait(__LINE__, N);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -452,6 +460,7 @@ template <>
|
||||
CUTLASS_DEVICE void cp_async_wait<0>() {
|
||||
#if CUDA_CP_ASYNC_ACTIVATED
|
||||
asm volatile("cp.async.wait_all;\n" ::);
|
||||
cutlass::arch::synclog_emit_cp_async_wait_all(__LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -43,30 +43,7 @@
|
||||
#include "mma.h"
|
||||
#include "cutlass/layout/matrix.h"
|
||||
#include "cutlass/numeric_types.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if ((__CUDACC_VER_MAJOR__ > 11) || (__CUDACC_VER_MAJOR__ == 11 && __CUDACC_VER_MINOR__ >= 8))
|
||||
#define CUTLASS_ARCH_MMA_SM90_F64_MMA_SUPPORTED
|
||||
#if (!defined(CUTLASS_ARCH_MMA_SM90_F64_MMA_ENABLED))
|
||||
#if (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900))
|
||||
#define CUTLASS_ARCH_MMA_SM90_F64_MMA_ENABLED
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (__CUDACC_VER_MAJOR__ >= 12)
|
||||
#define CUTLASS_ARCH_MMA_SM90_SUPPORTED
|
||||
#if (!defined(CUTLASS_ARCH_MMA_SM90_ENABLED))
|
||||
#if (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900))
|
||||
#define CUTLASS_ARCH_MMA_SM90_ENABLED
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ((__CUDACC_VER_MAJOR__ > 12) || ((__CUDACC_VER_MAJOR__ == 12) && (__CUDACC_VER_MINOR__ >= 3)))
|
||||
#define CUTLASS_ARCH_MMA_MODIFIABLE_TMA_SM90_SUPPORTED
|
||||
#endif
|
||||
#include "cutlass/arch/config.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -37,9 +37,11 @@
|
||||
|
||||
#include "cutlass/cutlass.h"
|
||||
|
||||
#if (defined(__CUDA_ARCH__) &&\
|
||||
(__CUDA_ARCH__ >= 900) && (__CUDACC_VER_MAJOR__ >= 12) && defined(__CUDA_ARCH_FEAT_SM90_ALL))
|
||||
#ifndef CUDA_CTA_RECONFIG_ACTIVATED
|
||||
#if (__CUDACC_VER_MAJOR__ >= 12 && \
|
||||
defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 900 && defined(__CUDA_ARCH_FEAT_SM90_ALL))
|
||||
#define CUDA_CTA_RECONFIG_ACTIVATED 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace cutlass {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user