Skip to content

Commit

Permalink
Make DeserializeIIR a boolean (#920)
Browse files Browse the repository at this point in the history
## Technical Description

Make the deserialize_iir option a boolean.
  • Loading branch information
Stagno authored Apr 14, 2020
1 parent 63ffc2e commit f14647d
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 62 deletions.
2 changes: 1 addition & 1 deletion dawn/src/dawn/Compiler/DawnCompiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ DawnCompiler::optimize(const std::map<std::string, std::shared_ptr<iir::StencilI
}

IIRSerializer::Format serializationKind = IIRSerializer::Format::Json;
if(options_.SerializeIIR || (options_.DeserializeIIR != "")) {
if(options_.SerializeIIR || options_.DeserializeIIR) {
if(options_.IIRFormat == "json") {
serializationKind = IIRSerializer::Format::Json;
} else if(options_.IIRFormat == "byte") {
Expand Down
4 changes: 2 additions & 2 deletions dawn/src/dawn/Compiler/Options.inc
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ OPT(std::string, Backend, "gridtools", "backend", "",
OPT(std::string, OutputFile, "", "output", "o", "Write output to <file>", "<file>", true, false)
OPT(bool, SerializeIIR, false, "write-iir", "",
"Serialize the low level intermediate representation after Optimization", "", false, false)
OPT(std::string, DeserializeIIR, "", "read-iir", "",
"Deserialize the low level intermediate representation from file", "", true, false)
OPT(bool, DeserializeIIR, false, "read-iir", "",
"Deserialize the low level intermediate representation from file", "", false, false)
OPT(std::string, IIRFormat, "json", "iir-format", "", "format of the output IIR", "", true, false)

// clang-format on
116 changes: 58 additions & 58 deletions dawn/src/dawn4py/_dawn4py.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,15 @@ PYBIND11_MODULE(_dawn4py, m) {
.def(py::init([](int MaxHaloSize, bool UseParallelEP, int MaxBlocksPerSM, int nsms,
int DomainSizeI, int DomainSizeJ, int DomainSizeK,
const std::string& Backend, const std::string& OutputFile, bool SerializeIIR,
const std::string& DeserializeIIR, const std::string& IIRFormat,
int MaxHaloPoints, const std::string& ReorderStrategy,
int MaxFieldsPerStencil, bool MaxCutMSS, int BlockSizeI, int BlockSizeJ,
int BlockSizeK, bool SplitStencils, bool MergeDoMethods, bool DisableKCaches,
bool UseNonTempCaches, bool KeepVarnames, bool PassVerbose,
bool ReportAccesses, bool DumpSplitGraphs, bool DumpStageGraph,
bool DumpTemporaryGraphs, bool DumpRaceConditionGraph,
bool DumpStencilInstantiation, bool DumpStencilGraph, bool SSA,
bool PrintStencilGraph, bool SetStageName, bool StageReordering,
bool StageMerger, bool TemporaryMerger, bool Inlining,
bool DeserializeIIR, const std::string& IIRFormat, int MaxHaloPoints,
const std::string& ReorderStrategy, int MaxFieldsPerStencil, bool MaxCutMSS,
int BlockSizeI, int BlockSizeJ, int BlockSizeK, bool SplitStencils,
bool MergeDoMethods, bool DisableKCaches, bool UseNonTempCaches,
bool KeepVarnames, bool PassVerbose, bool ReportAccesses,
bool DumpSplitGraphs, bool DumpStageGraph, bool DumpTemporaryGraphs,
bool DumpRaceConditionGraph, bool DumpStencilInstantiation,
bool DumpStencilGraph, bool SSA, bool PrintStencilGraph, bool SetStageName,
bool StageReordering, bool StageMerger, bool TemporaryMerger, bool Inlining,
bool IntervalPartitioning, bool TmpToStencilFunction, bool SetNonTempCaches,
bool SetCaches, bool SetBlockSize, bool DataLocalityMetric,
bool ReportBoundaryConditions, bool ReportDataLocalityMetric,
Expand Down Expand Up @@ -103,7 +102,7 @@ PYBIND11_MODULE(_dawn4py, m) {
py::arg("max_blocks_per_sm") = 0, py::arg("nsms") = 0, py::arg("domain_size_i") = 0,
py::arg("domain_size_j") = 0, py::arg("domain_size_k") = 0,
py::arg("backend") = "gridtools", py::arg("output_file") = "",
py::arg("serialize_iir") = false, py::arg("deserialize_iir") = "",
py::arg("serialize_iir") = false, py::arg("deserialize_iir") = false,
py::arg("iir_format") = "json", py::arg("max_halo_points") = 3,
py::arg("reorder_strategy") = "greedy", py::arg("max_fields_per_stencil") = 40,
py::arg("max_cut_mss") = false, py::arg("block_size_i") = 0, py::arg("block_size_j") = 0,
Expand Down Expand Up @@ -272,55 +271,56 @@ PYBIND11_MODULE(_dawn4py, m) {
}))
.def_property_readonly("options", (dawn::Options & (dawn::DawnCompiler::*)()) &
dawn::DawnCompiler::getOptions)
.def("compile",
[](dawn::DawnCompiler& self, const std::string& sir, dawn::SIRSerializer::Format format,
py::object unit_info_obj) {
auto inMemorySIR = dawn::SIRSerializer::deserializeFromString(sir, format);
auto translationUnit = self.compile(inMemorySIR);
.def(
"compile",
[](dawn::DawnCompiler& self, const std::string& sir, dawn::SIRSerializer::Format format,
py::object unit_info_obj) {
auto inMemorySIR = dawn::SIRSerializer::deserializeFromString(sir, format);
auto translationUnit = self.compile(inMemorySIR);

auto result = py::none();
auto export_info = false;
auto pp_defines_list = py::list();
auto stencils_dict = py::dict();
auto result = py::none();
auto export_info = false;
auto pp_defines_list = py::list();
auto stencils_dict = py::dict();

if(translationUnit) {
export_info = true;
if(!unit_info_obj.is_none()) {
auto unit_info_dict = unit_info_obj.cast<py::dict>();
export_info = true;
unit_info_dict["filename"] = py::str(translationUnit->getFilename());
unit_info_dict["pp_defines"] = pp_defines_list;
unit_info_dict["stencils"] = stencils_dict;
unit_info_dict["globals"] = py::str(translationUnit->getGlobals());
}
if(translationUnit) {
export_info = true;
if(!unit_info_obj.is_none()) {
auto unit_info_dict = unit_info_obj.cast<py::dict>();
export_info = true;
unit_info_dict["filename"] = py::str(translationUnit->getFilename());
unit_info_dict["pp_defines"] = pp_defines_list;
unit_info_dict["stencils"] = stencils_dict;
unit_info_dict["globals"] = py::str(translationUnit->getGlobals());
}

std::ostringstream ss;
ss << "//---- Preprocessor defines ----\n";
for(const auto& macroDefine : translationUnit->getPPDefines()) {
ss << macroDefine << "\n";
if(export_info)
pp_defines_list.append(py::str(macroDefine));
}
ss << "\n//---- Includes ----\n"
<< "#include \"driver-includes/gridtools_includes.hpp\"\n"
<< "using namespace gridtools::dawn;\n";
ss << "\n//---- Globals ----\n";
ss << translationUnit->getGlobals();
ss << "\n//---- Stencils ----\n";
for(const auto& sItem : translationUnit->getStencils()) {
ss << sItem.second;
if(export_info)
stencils_dict[py::str(sItem.first)] = py::str(sItem.second);
}
result = py::str(ss.str());
}
std::ostringstream ss;
ss << "//---- Preprocessor defines ----\n";
for(const auto& macroDefine : translationUnit->getPPDefines()) {
ss << macroDefine << "\n";
if(export_info)
pp_defines_list.append(py::str(macroDefine));
}
ss << "\n//---- Includes ----\n"
<< "#include \"driver-includes/gridtools_includes.hpp\"\n"
<< "using namespace gridtools::dawn;\n";
ss << "\n//---- Globals ----\n";
ss << translationUnit->getGlobals();
ss << "\n//---- Stencils ----\n";
for(const auto& sItem : translationUnit->getStencils()) {
ss << sItem.second;
if(export_info)
stencils_dict[py::str(sItem.first)] = py::str(sItem.second);
}
result = py::str(ss.str());
}

return result;
},
"Compile the provided SIR object.\n\n"
"Returns a `str` with the compiled source code` on success or `None` otherwise.",
"If a unit_info `dict` is provided, it will store the separated `TranslationUnit` "
"members on it.",
py::arg("sir"), py::arg("format") = dawn::SIRSerializer::Format::Byte,
py::arg("unit_info") = nullptr);
return result;
},
"Compile the provided SIR object.\n\n"
"Returns a `str` with the compiled source code` on success or `None` otherwise.",
"If a unit_info `dict` is provided, it will store the separated `TranslationUnit` "
"members on it.",
py::arg("sir"), py::arg("format") = dawn::SIRSerializer::Format::Byte,
py::arg("unit_info") = nullptr);
};
2 changes: 1 addition & 1 deletion gtclang/src/gtclang/Frontend/GTClangASTConsumer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ void GTClangASTConsumer::HandleTranslationUnit(clang::ASTContext& ASTContext) {
} else {
num_stencils_generated++;
}
if(context_->getOptions().DeserializeIIR != "" && num_stencils_generated > 1) {
if(context_->getOptions().DeserializeIIR && num_stencils_generated > 1) {
DAWN_LOG(ERROR)
<< "more than one stencil present in DSL but only one stencil deserialized from IIR";
return;
Expand Down

0 comments on commit f14647d

Please sign in to comment.