Partial specialization for complex*complex+complex => complex using real-valued TensorOps.
|
using | Shape = Shape_ |
| Shape of warp-level matrix operation (concept: GemmShape) More...
|
|
using | ElementA = complex< RealElementA > |
| Data type of multiplicand A. More...
|
|
using | LayoutA = LayoutA_ |
| Layout of multiplicand A. More...
|
|
using | ElementB = complex< RealElementB > |
| Data type of multiplicand B. More...
|
|
using | LayoutB = LayoutB_ |
| Layout of multiplicand B. More...
|
|
using | ElementC = complex< RealElementC > |
| Data type of accumulator matrix C. More...
|
|
using | LayoutC = LayoutC_ |
| Layout of accumulator matrix C. More...
|
|
using | Policy = Policy_ |
| Shape of the warp in units of thread (concept: MmaLanePolicySimt) More...
|
|
using | OperatorClass = arch::OpClassTensorOp |
| Indicates class of matrix operator. More...
|
|
using | IteratorA = MmaTensorOpMultiplicandTileIterator< MatrixShape< Shape::kM, Shape::kK >, Operand::kA, ElementA, LayoutA, MatrixShape< Policy::Operator::Shape::kM, Policy::Operator::Shape::kK >, Policy::OpDelta::kRow, 32, 1 > |
| Iterates over the A operand in memory. More...
|
|
using | FragmentA = typename IteratorA::Fragment |
| Storage for A tile. More...
|
|
using | IteratorB = MmaTensorOpMultiplicandTileIterator< MatrixShape< Shape::kK, Shape::kN >, Operand::kB, ElementB, LayoutB, MatrixShape< Policy::Operator::Shape::kK, Policy::Operator::Shape::kN >, Policy::OpDelta::kColumn, 32, 1 > |
| Iterates over the B operand in memory. More...
|
|
using | FragmentB = typename IteratorB::Fragment |
| Storage for B tile. More...
|
|
using | MmaIterations = MatrixShape< Shape::kM/Policy::Operator::Shape::kM, Shape::kN/Policy::Operator::Shape::kN > |
| Number of mma operations performed. More...
|
|
using | IteratorC = MmaTensorOpAccumulatorTileIterator< MatrixShape< Shape::kM, Shape::kN >, ElementC, LayoutC, typename Policy::Operator::Shape, typename Policy::OpDelta > |
| Iterates over the C operand in memory. More...
|
|
using | FragmentC = typename IteratorC::Fragment |
|
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::ElementA = complex<RealElementA> |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::ElementB = complex<RealElementB> |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::ElementC = complex<RealElementC> |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::FragmentA = typename IteratorA::Fragment |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::FragmentB = typename IteratorB::Fragment |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::FragmentC = typename IteratorC::Fragment |
Storage for C tile, the accumulator. Note, regardless of multiplicand type, this storage arrangement is to be considered 'planar complex' in the sense that all real-valued parts are stored consecutively followed by all imaginary parts. This matches the structure of Tensor Cores which are always real-valued matrix multiplies.
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::LayoutA = LayoutA_ |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::LayoutB = LayoutB_ |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::LayoutC = LayoutC_ |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::MmaIterations = MatrixShape< Shape::kM / Policy::Operator::Shape::kM, Shape::kN / Policy::Operator::Shape::kN > |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::OperatorClass = arch::OpClassTensorOp |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::Policy = Policy_ |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
using cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::Shape = Shape_ |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
CUTLASS_DEVICE cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::MmaComplexTensorOp |
( |
| ) |
|
|
inline |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
CUTLASS_DEVICE void cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::operator() |
( |
FragmentC & |
D, |
|
|
FragmentA const & |
A, |
|
|
FragmentB const & |
B, |
|
|
FragmentC const & |
C |
|
) |
| const |
|
inline |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
int const cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::kThreadCount = 32 |
|
static |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
ComplexTransform const cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::kTransformA = TransformA |
|
static |
template<typename Shape_ , typename RealElementA , typename LayoutA_ , typename RealElementB , typename LayoutB_ , typename RealElementC , typename LayoutC_ , typename Policy_ , ComplexTransform TransformA, ComplexTransform TransformB, typename Enable >
ComplexTransform const cutlass::gemm::warp::MmaComplexTensorOp< Shape_, complex< RealElementA >, LayoutA_, complex< RealElementB >, LayoutB_, complex< RealElementC >, LayoutC_, Policy_, TransformA, TransformB, Enable >::kTransformB = TransformB |
|
static |