38 template <
typename InputIterator,
typename Fragment>
40 typename InputIterator::FragmentIterator frag_iterator(fragment);
41 for (
int d = 0; d < InputIterator::Iterations::kD; ++d) {
42 for (
int h = 0; h < InputIterator::Iterations::kH; ++h) {
43 for (
int w = 0; w < InputIterator::Iterations::kW; ++w) {
44 for (
int c = 0; c < InputIterator::Iterations::kC; ++c) {
45 if (iterator.valid(d, h, w, c)) {
46 iterator.load_element(reinterpret_cast<typename InputIterator::AccessType &>(
47 frag_iterator.at(d, h, w, c)),
54 if (w < InputIterator::Iterations::kW - 1) {
58 if (h < InputIterator::Iterations::kH - 1) {
62 if (d < InputIterator::Iterations::kD - 1) {
66 iterator.inc_advance();
69 template <
typename OutputIterator,
typename Fragment>
71 typename OutputIterator::FragmentIterator frag_iterator(fragment);
72 for (
int d = 0; d < OutputIterator::Iterations::kD; ++d) {
73 for (
int h = 0; h < OutputIterator::Iterations::kH; ++h) {
74 for (
int w = 0; w < OutputIterator::Iterations::kW; ++w) {
75 for (
int c = 0; c < OutputIterator::Iterations::kC; ++c) {
76 if (iterator.valid(d, h, w, c)) {
77 iterator.store_element(reinterpret_cast<typename OutputIterator::AccessType &>(
78 frag_iterator.at(d, h, w, c)),
85 if (w < OutputIterator::Iterations::kW - 1) {
89 if (h < OutputIterator::Iterations::kH - 1) {
93 if (d < OutputIterator::Iterations::kD - 1) {
97 iterator.inc_advance();
A template defining Fragment Concept.
Definition: fragment.h:99
Defines container classes and iterators for managing a statically sized vector of boolean predicates...
Defines abstractions for efficiently loading and storing vectors to memory.
#define CUTLASS_HOST_DEVICE
Definition: cutlass.h:46
CUTLASS_HOST_DEVICE void iterator_store(OutputIterator &iterator, Fragment &fragment)
Definition: iterator_access.h:70
CUTLASS_HOST_DEVICE void iterator_load(InputIterator &iterator, Fragment &fragment)
Definition: iterator_access.h:39
Defines Shape implementing the Layout concept for representing a 4D hypercube of objects.