#include <poplar/Graph.hpp>
#include <poplar/Target.hpp>
#include <poplin/MatMul.hpp>
#include <iostream>

int main(int argc, char **argv) {
  if (argc != 7) return 2;
  const auto g = std::stoul(argv[1]), m = std::stoul(argv[2]);
  const auto k = std::stoul(argv[3]), n = std::stoul(argv[4]);
  poplar::Graph graph(poplar::Target::createIPUTarget(1, 1472, "C600"));
  poplar::OptionFlags options{{"partialsType", "half"},
                             {"availableMemoryProportion", argv[6]}};
  auto type = std::string(argv[5]) == "fp8" ? poplar::QUARTER : poplar::HALF;
  poplin::matMulGroupedReportPlan(std::cout, graph, type, poplar::HALF,
                                {g, m, k}, {g, k, n}, options);
}
