(manifest, layouts, tile_descriptions, data_type, \ alignment_constraints, complex_transforms)
| 356 | |
| 357 | # |
| 358 | def CreateGemmPlanarComplexOperator(manifest, layouts, tile_descriptions, data_type, \ |
| 359 | alignment_constraints, complex_transforms): |
| 360 | |
| 361 | if complex_transforms is None: |
| 362 | complex_transforms = [(ComplexTransform.none, ComplexTransform.none),] |
| 363 | |
| 364 | element_a, element_b, element_c, element_epilogue = data_type |
| 365 | |
| 366 | gemm_kinds = [GemmKind.PlanarComplex, GemmKind.PlanarComplexArray] |
| 367 | |
| 368 | # by default, only generate the largest tile and largest alignment |
| 369 | if manifest.kernel_filter == '': |
| 370 | tile_descriptions = [tile_descriptions[0],] |
| 371 | alignment_constraints = [alignment_constraints[0],] |
| 372 | |
| 373 | for gemm_kind in gemm_kinds: |
| 374 | for layout in layouts: |
| 375 | for tile_description in tile_descriptions: |
| 376 | for alignment in alignment_constraints: |
| 377 | for complex_transform in complex_transforms: |
| 378 | |
| 379 | alignment_c = min(8, alignment) |
| 380 | |
| 381 | A = TensorDescription(element_a, layout[0], alignment, complex_transform[0]) |
| 382 | B = TensorDescription(element_b, layout[1], alignment, complex_transform[1]) |
| 383 | C = TensorDescription(element_c, layout[2], alignment_c) |
| 384 | |
| 385 | manifest.append(GemmOperation(gemm_kind, \ |
| 386 | tile_description.minimum_compute_capability, \ |
| 387 | tile_description, A, B, C, element_epilogue)) |
| 388 | return |
| 389 | |
| 390 | # |
| 391 | def CreateGemmGroupedOperator(manifest, layouts, tile_descriptions, data_type, \ |
no test coverage detected