CUTLASS 3.5.1 (#1623)

* CUTLASS 3.5.1

* updates, optimizations, fixes
This commit is contained in:
Vijay Thakkar
2024-07-29 08:46:24 -04:00
committed by GitHub
parent 56b46e2d13
commit be60a0b272
312 changed files with 19793 additions and 6775 deletions
@@ -84,6 +84,8 @@ public:
int batch_count{1};
cutlass::library::RasterOrder raster_order{cutlass::library::RasterOrder::kHeuristic};
int swizzle_size{1};
// gemm with parallel interleaved reduction
// gemm epilogue (alpha, beta) = (1.0, 0.0)
// reduction epilogue (alpha, beta) = (GemmProblem::alpha, GemmProblem::beta)
@@ -72,7 +72,7 @@ public:
// Methods
//
Library(CommandLine const &cmdline);
explicit Library(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -94,7 +94,7 @@ public:
// Methods
//
Device(CommandLine const &cmdline);
explicit Device(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -128,7 +128,7 @@ public:
// Methods
//
Initialization(CommandLine const &cmdline);
explicit Initialization(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -170,7 +170,7 @@ public:
// Methods
//
Verification(CommandLine const &cmdline);
explicit Verification(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -186,22 +186,26 @@ public:
struct Profiling {
/// Number of workspaces to rotate through to avoid cache-resident working sets
int workspace_count;
int workspace_count{0};
/// Number of iterations to warmup each kernel prior to profiling
int warmup_iterations;
int warmup_iterations{10};
/// Number of iterations to profile each kernel - if 0, kernels are launched up to the profiling duration
int iterations;
int iterations{100};
/// Number of ms to sleep between profiling periods (ms)
int sleep_duration;
int sleep_duration{50};
/// If true, profiling is actually conducted.
bool enabled;
bool enabled{true};
/// If true, profiling returns an error code if no kernels are found to match the filters.
bool error_on_no_match = false;
bool error_on_no_match{false};
/// If true, profiling returns an error code if no kernel are profiled
// Sometimes the kernel matches but failed to profile (e.g. can_implement() error)
bool error_if_nothing_is_profiled{false};
/// List of providers of each functionality to be profiled
ProviderVector providers;
@@ -210,7 +214,7 @@ public:
// Methods
//
Profiling(CommandLine const &cmdline);
explicit Profiling(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -255,7 +259,7 @@ public:
// Methods
//
Report(CommandLine const &cmdline);
explicit Report(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -277,7 +281,7 @@ public:
// Methods
//
About(CommandLine const &cmdline);
explicit About(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out, int indent = 0) const;
@@ -320,7 +324,7 @@ public:
public:
Options(CommandLine const &cmdline);
explicit Options(CommandLine const &cmdline);
void print_usage(std::ostream &out) const;
void print_options(std::ostream &out) const;
@@ -256,7 +256,7 @@ struct ScalarArgument : public KernelArgument {
virtual std::ostream &print(std::ostream &out) const;
};
using ValueCollection = std::vector<std::string>;
using ValueCollection = std::vector<decltype(ScalarValue::value)>;
/// Abstract base class to iterate over values within arguments
struct ScalarValueIterator : public KernelArgument::ValueIterator {
@@ -271,7 +271,7 @@ struct ScalarArgument : public KernelArgument {
// Methods
//
ScalarValueIterator(ScalarArgument const *argument = nullptr);
explicit ScalarValueIterator(ScalarArgument const *argument = nullptr);
virtual void operator++();
virtual bool operator==(ValueIterator const &it) const;
@@ -292,7 +292,7 @@ struct ScalarArgument : public KernelArgument {
//
/// Default ctor
ScalarArgument(
explicit ScalarArgument(
ArgumentDescription const *description
):
KernelArgument(description) { }
@@ -632,7 +632,7 @@ struct TensorArgument : public KernelArgument {
// Methods
//
TensorValueIterator(TensorArgument const *argument_);
explicit TensorValueIterator(TensorArgument const *argument_);
virtual void operator++();
virtual bool operator==(ValueIterator const &it) const;
@@ -649,7 +649,7 @@ struct TensorArgument : public KernelArgument {
//
/// Default ctor
TensorArgument(
explicit TensorArgument(
ArgumentDescription const *description
):
KernelArgument(description) { }
@@ -690,7 +690,7 @@ struct EnumeratedTypeArgument : public KernelArgument {
virtual std::ostream &print(std::ostream &out) const;
};
using ValueCollection = std::vector<std::string>;
using ValueCollection = std::vector<decltype(EnumeratedTypeValue::element)>;
/// Abstract base class to iterate over values within arguments
struct EnumeratedTypeValueIterator : public KernelArgument::ValueIterator {
@@ -705,7 +705,7 @@ struct EnumeratedTypeArgument : public KernelArgument {
// Methods
//
EnumeratedTypeValueIterator(EnumeratedTypeArgument const *argument_ = nullptr);
explicit EnumeratedTypeValueIterator(EnumeratedTypeArgument const *argument_ = nullptr);
virtual void operator++();
virtual bool operator==(ValueIterator const &it) const;
@@ -725,7 +725,7 @@ struct EnumeratedTypeArgument : public KernelArgument {
//
/// Default ctor
EnumeratedTypeArgument(ArgumentDescription const *description):
explicit EnumeratedTypeArgument(ArgumentDescription const *description):
KernelArgument(description) {}
virtual bool not_null() const {
@@ -819,7 +819,7 @@ public:
//
/// Default ctor
ProblemSpace() {}
ProblemSpace() = default;
/// Constructs a problem space from a vector of arguments. This vector must outlive
/// the ProblemSpace object, which stores pointers to objects within the