Updates for CUTLASS 3.5.0 (#1468)

This commit is contained in:
Vijay Thakkar
2024-04-11 21:33:40 -04:00
committed by GitHub
parent a40e08e9d5
commit 7d49e6c7e2
171 changed files with 7526 additions and 1888 deletions
@@ -51,6 +51,8 @@
#include "cutlass/arch/arch.h"
#include "cutlass/arch/memory.h"
#include "cutlass/epilogue/threadblock/predicated_tile_iterator_params.h"
#include "cutlass/conv/conv2d_problem_size.h"
#include "cutlass/conv/conv3d_problem_size.h"
////////////////////////////////////////////////////////////////////////////////
@@ -102,10 +104,10 @@ public:
/// Fragment object
using Fragment = Array<
Element,
ThreadMap::Iterations::kColumn *
ThreadMap::Iterations::kRow *
ThreadMap::Iterations::kGroup *
Element,
ThreadMap::Iterations::kColumn *
ThreadMap::Iterations::kRow *
ThreadMap::Iterations::kGroup *
ThreadMap::Iterations::kCluster * ThreadMap::kElementsPerAccess>;
/// Memory access size
@@ -123,13 +125,27 @@ public:
Params() { }
CUTLASS_HOST_DEVICE
Params(Layout const &layout):
Params(Layout const &layout):
PredicatedTileIteratorParams(
layout.stride(0) * int(sizeof(AccessType)) / kElementsPerAccess,
make_OutputTileThreadMapDesc<ThreadMap>()
)
{ }
CUTLASS_HOST_DEVICE
Params(Layout const &layout,
// Not needed. Added to be compatible with strided conv epilogue.
conv::Conv2dProblemSize const &problem_size):
Params(layout)
{ }
CUTLASS_HOST_DEVICE
Params(Layout const &layout,
// Not needed. Added to be compatible with strided conv epilogue.
conv::Conv3dProblemSize const &problem_size):
Params(layout)
{ }
CUTLASS_HOST_DEVICE
Params(Base const &base) :
Base(base) { }
@@ -202,7 +218,7 @@ private:
int state_[3];
/// Scatter indices
int const *indices_;
int const *indices_;
/// PermuteDLayout
PermuteDLayout permute_layout_;
@@ -253,7 +269,7 @@ public:
CUTLASS_PRAGMA_UNROLL
for (int c = 0; c < ThreadMap::Iterations::kColumn; ++c) {
mask_.predicates[c] = ((thread_offset.column()
mask_.predicates[c] = ((thread_offset.column()
+ ThreadMap::Delta::kColumn * c) < extent.column());
}
@@ -267,8 +283,8 @@ public:
}
// Initialize byte_pointer_
byte_pointer_ = reinterpret_cast<uint8_t *>(pointer) +
LongIndex(thread_offset.row()) * LongIndex(params_.stride) +
byte_pointer_ = reinterpret_cast<uint8_t *>(pointer) +
LongIndex(thread_offset.row()) * LongIndex(params_.stride) +
LongIndex(thread_offset.column()) * sizeof(AccessType) / kElementsPerAccess;
if (ScatterD) {
@@ -306,7 +322,7 @@ public:
CUTLASS_PRAGMA_UNROLL
for (int row = 0; row < ThreadMap::Iterations::kRow; ++row) {
int frag_row_idx =
int frag_row_idx =
(row + ThreadMap::Iterations::kRow * (group + ThreadMap::Iterations::kGroup * cluster));
int row_offset = row * ThreadMap::Delta::kRow
@@ -330,7 +346,7 @@ public:
bool guard = row_guard && mask_.predicates[column];
cutlass::arch::global_load<
AccessType,
AccessType,
sizeof(AccessType)
>(
frag_ptr[frag_row_idx * ThreadMap::Iterations::kColumn +
@@ -380,11 +396,11 @@ public:
CUTLASS_PRAGMA_UNROLL
for (int row = 0; row < ThreadMap::Iterations::kRow; ++row) {
int frag_row_idx =
int frag_row_idx =
(row + ThreadMap::Iterations::kRow * (group + ThreadMap::Iterations::kGroup * cluster));
int row_offset = row * ThreadMap::Delta::kRow
+ group * ThreadMap::Delta::kGroup
int row_offset = row * ThreadMap::Delta::kRow
+ group * ThreadMap::Delta::kGroup
+ cluster * ThreadMap::Delta::kCluster;
bool row_guard = ((row_offset + thread_start_row_) < extent_row_);
@@ -426,7 +442,7 @@ public:
(void *)&memory_pointer[0],
guard);
}
if (!PermuteD) {
memory_pointer += (ThreadMap::Delta::kColumn / kElementsPerAccess);
}
@@ -649,7 +665,7 @@ public:
}
thread_start_row_ += ThreadMap::Shape::kRow;
if (state_[0] == ThreadMap::Count::kRow) {
state_[0] = 0;
@@ -663,7 +679,7 @@ public:
store_byte_pointer_ += params_.advance_group;
}
thread_start_row_ += (ThreadMap::Shape::kGroup - 1) *
thread_start_row_ += (ThreadMap::Shape::kGroup - 1) *
ThreadMap::Shape::kRow * ThreadMap::Count::kRow;
if (state_[1] == ThreadMap::Count::kGroup) {
@@ -679,7 +695,7 @@ public:
store_byte_pointer_ += params_.advance_cluster;
}
thread_start_row_ += ThreadMap::Count::kGroup *
thread_start_row_ += ThreadMap::Count::kGroup *
ThreadMap::Shape::kGroup * ThreadMap::Count::kRow * ThreadMap::Shape::kRow;
if (state_[2] == ThreadMap::Count::kCluster) {
@@ -1121,6 +1137,14 @@ public:
initialize(layout.stride());
}
CUTLASS_HOST_DEVICE
Params(Layout const &layout,
// Not needed. Added to be compatible with strided conv epilogue.
conv::Conv2dProblemSize const &problem_size):
Params(layout)
{ }
};
/// Mask object