CUTLASS 2.6.1 - functional and performance enhancements to strided DGRAD, fixes, and tuning
* cutlass 2.6 update * remove debug prints * cutlass 2.6.1 (minor update) * Updated CHANGELOG. * Minor edit to readme to indicate patch version. * Minor edit to readme. Co-authored-by: Haicheng Wu <haichengw@nvidia.com>, Andrew Kerr <akerr@nvidia.com>
This commit is contained in:
co-authored by
Haicheng Wu <haichengw@nvidia.com>, Andrew Kerr <akerr@nvidia.com>
parent
a01feb93d9
commit
6c2f8f2fb8
@@ -1312,6 +1312,7 @@ def GenerateSM80_TensorOp_16816(manifest, args):
|
||||
TileDescription([256, 64, 32], 4, [4, 1, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 256, 32], 4, [1, 4, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 32], 3, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 32], 4, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 32], 5, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 64, 32], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 128, 32], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
@@ -1392,7 +1393,7 @@ def GenerateSM80_SparseTensorOp_16832(manifest, args):
|
||||
max_cc = 1024
|
||||
max_cc_smem_limited = 80
|
||||
|
||||
alignment_constraints = [8, 4, 2]
|
||||
alignment_constraints = [8]
|
||||
|
||||
for math_inst in math_instructions:
|
||||
tile_descriptions = [
|
||||
@@ -1967,6 +1968,8 @@ def GenerateSM80_TensorOp_1688(manifest, args):
|
||||
TileDescription([256, 64, 16], 4, [4, 1, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 256, 16], 4, [1, 4, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 5, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 4, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 3, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 64, 16], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 128, 16], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 64, 16], 10, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
@@ -2051,6 +2054,8 @@ def GenerateSM80_TensorOp_1688_fast_math(manifest, args):
|
||||
TileDescription([256, 64, 16], 4, [4, 1, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 256, 16], 4, [1, 4, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 5, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 4, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 128, 16], 3, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([128, 64, 16], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 128, 16], 6, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
TileDescription([ 64, 64, 16], 10, [2, 2, 1], math_inst, min_cc, max_cc),
|
||||
@@ -2100,7 +2105,7 @@ def GenerateSM80_SparseTensorOp_16816_fast_math(manifest, args):
|
||||
max_cc = 1024
|
||||
max_cc_smem_limited = 80
|
||||
|
||||
alignment_constraints = [4, 2, 1]
|
||||
alignment_constraints = [4]
|
||||
|
||||
for math_inst in math_instructions:
|
||||
tile_descriptions = [
|
||||
|
||||
@@ -20,7 +20,6 @@ class EmitOperationKindLibrary:
|
||||
self.generated_path = generated_path
|
||||
self.kind = kind
|
||||
self.args = args
|
||||
|
||||
self.emitters = {
|
||||
OperationKind.Gemm: EmitGemmConfigurationLibrary
|
||||
, OperationKind.Conv2d: EmitConv2dConfigurationLibrary
|
||||
@@ -347,7 +346,7 @@ class Manifest:
|
||||
|
||||
with interface_emitters[target](generated_path, self.operation_count, self.args) as iface_emitter:
|
||||
for operation_kind, configurations in self.operations.items():
|
||||
iface_emitter.emit(OperationKindNames[operation_kind])
|
||||
iface_emitter.emit(OperationKindNames[operation_kind])
|
||||
|
||||
source_files += iface_emitter.source_files
|
||||
|
||||
|
||||
@@ -186,12 +186,6 @@ public:
|
||||
GemmUniversalConfiguration const &config = *static_cast<GemmUniversalConfiguration const *>(host_workspace);
|
||||
GemmUniversalArguments const &args = *static_cast<GemmUniversalArguments const *>(arguments);
|
||||
|
||||
ElementCompute alpha;
|
||||
ElementCompute beta;
|
||||
|
||||
alpha = *static_cast<ElementCompute const *>(args.alpha);
|
||||
beta = *static_cast<ElementCompute const *>(args.beta);
|
||||
|
||||
TensorRefA ref_A{static_cast<ElementA *>(const_cast<void *>(args.A)), LayoutA(int(config.lda))};
|
||||
TensorRefB ref_B{static_cast<ElementB *>(const_cast<void *>(args.B)), LayoutB(int(config.ldb))};
|
||||
TensorRefC ref_C{static_cast<ElementC *>(const_cast<void *>(args.C)), LayoutC(int(config.ldc))};
|
||||
@@ -212,16 +206,16 @@ public:
|
||||
InnerProductOp
|
||||
>(
|
||||
config.problem_size,
|
||||
alpha,
|
||||
*static_cast<ElementCompute const *>(args.alpha),
|
||||
ref_A,
|
||||
kTransformA,
|
||||
ref_B,
|
||||
kTransformB,
|
||||
beta,
|
||||
*static_cast<ElementCompute const *>(args.beta),
|
||||
ref_C,
|
||||
ref_D,
|
||||
ElementAccumulator(),
|
||||
config.batch_count,
|
||||
((config.mode == library::GemmUniversalMode::kBatched) ? config.batch_count : 1),
|
||||
args.batch_stride_A,
|
||||
args.batch_stride_B,
|
||||
args.batch_stride_C,
|
||||
@@ -245,16 +239,16 @@ public:
|
||||
InnerProductOp
|
||||
>(
|
||||
config.problem_size,
|
||||
alpha,
|
||||
*static_cast<ElementCompute const *>(args.alpha),
|
||||
ref_A,
|
||||
kTransformA,
|
||||
ref_B,
|
||||
kTransformB,
|
||||
beta,
|
||||
*static_cast<ElementCompute const *>(args.beta),
|
||||
ref_C,
|
||||
ref_D,
|
||||
ElementAccumulator(),
|
||||
config.batch_count,
|
||||
((config.mode == library::GemmUniversalMode::kBatched) ? config.batch_count : 1),
|
||||
args.batch_stride_A,
|
||||
args.batch_stride_B,
|
||||
args.batch_stride_C,
|
||||
@@ -263,7 +257,7 @@ public:
|
||||
|
||||
return Status::kSuccess;
|
||||
}
|
||||
|
||||
|
||||
return Status::kErrorNotSupported;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -791,7 +791,7 @@ bool GemmOperationProfiler::verify_with_reference_(
|
||||
handle.set_provider(provider);
|
||||
|
||||
Status status = handle.gemm_universal(
|
||||
library::GemmUniversalMode::kGemm,
|
||||
problem_.mode,
|
||||
gemm_workspace_.configuration.problem_size.m(),
|
||||
gemm_workspace_.configuration.problem_size.n(),
|
||||
gemm_workspace_.configuration.problem_size.k(),
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <cuda_runtime.h>
|
||||
#include "cutlass/cutlass.h"
|
||||
|
||||
namespace cutlass {
|
||||
namespace profiler {
|
||||
|
||||
@@ -425,7 +425,9 @@ void Options::Profiling::print_usage(std::ostream &out) const {
|
||||
<< " Number of ms to sleep between profiling periods (ms).\n\n"
|
||||
|
||||
<< " --profiling-enabled=<bool> "
|
||||
<< " If true, profiling is actually conducted.\n\n";
|
||||
<< " If true, profiling is actually conducted.\n\n"
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
void Options::Profiling::print_options(std::ostream &out, int indent) const {
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
#include <cuda_runtime.h>
|
||||
|
||||
#include "cutlass/cutlass.h"
|
||||
|
||||
namespace cutlass {
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user