// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "CustomMatchers.hpp" #include "ExpressionMatchers.hpp" #include "TestContext.hpp" #include "TestKernels.hpp" #include "common/Utilities.hpp" namespace ConnectWorkgroupsTest { TEST_CASE("ConnectWorkgroups", "[kernel-graph]") { using namespace rocRoller::Expression; using namespace rocRoller::KernelGraph; using namespace rocRoller::KernelGraph::CoordinateGraph; using namespace rocRoller::KernelGraph::ConnectWorkgroupsDetail; using GD = rocRoller::Graph::Direction; KernelGraph graph0; int vX = 5, vY = 7; auto tileNumAD = graph0.coordinates.addElement(MacroTileNumber(0, literal(vX), nullptr)); auto tileNumBD = graph0.coordinates.addElement(MacroTileNumber(1, literal(vY), nullptr)); auto middleLinear = graph0.coordinates.addElement(Linear()); graph0.coordinates.addElement(Flatten(), {tileNumAD, tileNumBD}, {middleLinear}); auto tileNumAU = graph0.coordinates.addElement(MacroTileNumber(0, literal(vX), nullptr)); auto tileNumBU = graph0.coordinates.addElement(MacroTileNumber(1, literal(vY), nullptr)); graph0.coordinates.addElement(Tile(), {middleLinear}, {tileNumAU, tileNumBU}); /* coordinate graph is: * * MacroTileNumber(0, size=vX) MacroTileNumber(1, size=vY) * \ / * ------------- Flatten ------------ * | * Linear * | * --------------- Tile ------------- * / \ * MacroTileNumber(0, size=vX) MacroTileNumber(1, size=vY) * */ auto graph = graph0; auto remapping = connectWorkgroups(graph); for(uint wg = 0; wg < vX; ++wg) { auto exprs = graph.coordinates.forward( {literal(wg)}, {remapping[{0, GD::Downstream}]}, {tileNumAD}); auto tileNumA = getUnsignedInt(evaluate(exprs[0])); auto expectedA = wg; CHECK(tileNumA == expectedA); } for(uint wg = 0; wg < vY; ++wg) { auto exprs = graph.coordinates.forward( {literal(wg)}, {remapping[{1, GD::Downstream}]}, {tileNumBD}); auto tileNumB = getUnsignedInt(evaluate(exprs[0])); auto expectedB = wg; CHECK(tileNumB == expectedB); } } }