Commit ffbb5ba4 authored by Shucai Xiao's avatar Shucai Xiao
Browse files

Merge branch 'improve_print_ins' of...

Merge branch 'improve_print_ins' of github.com:ROCmSoftwarePlatform/AMDMIGraphX into parse_dynamic_shape
parents 0bd4e8bb 16017e65
...@@ -36,7 +36,7 @@ find_package(nlohmann_json 3.8.0 REQUIRED) ...@@ -36,7 +36,7 @@ find_package(nlohmann_json 3.8.0 REQUIRED)
include(ROCMSetupVersion) include(ROCMSetupVersion)
rocm_setup_version(VERSION 2.0) rocm_setup_version(VERSION 2.1)
set(MIGRAPHX_SO_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) set(MIGRAPHX_SO_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
option( BUILD_SHARED_LIBS "Build as a shared library" ON ) option( BUILD_SHARED_LIBS "Build as a shared library" ON )
......
...@@ -76,7 +76,8 @@ struct program ...@@ -76,7 +76,8 @@ struct program
void from_value(const value& v); void from_value(const value& v);
void debug_print() const; void debug_print() const;
void debug_print(instruction_ref ins) const; void debug_print(instruction_ref ins,
const std::unordered_map<instruction_ref, std::string>& ins_names) const;
void print(std::unordered_map<instruction_ref, std::string>& names, void print(std::unordered_map<instruction_ref, std::string>& names,
const std::function<void(instruction_ref, const std::function<void(instruction_ref,
std::unordered_map<instruction_ref, std::string>)>& std::unordered_map<instruction_ref, std::string>)>&
......
...@@ -627,8 +627,9 @@ std::unordered_map<instruction_ref, std::string> module::print( ...@@ -627,8 +627,9 @@ std::unordered_map<instruction_ref, std::string> module::print(
var_name = this->name(); var_name = this->name();
var_name.append((this->name().empty() ? "@" : ":@")); var_name.append((this->name().empty() ? "@" : ":@"));
var_name.append(std::to_string(count)); var_name.append(std::to_string(count));
count++;
} }
// count every instruction so index matches loc in the printout program
count++;
names.emplace(ins, var_name); names.emplace(ins, var_name);
print_func(ins, names); print_func(ins, names);
......
...@@ -353,13 +353,17 @@ std::vector<argument> program::eval(parameter_map params) const ...@@ -353,13 +353,17 @@ std::vector<argument> program::eval(parameter_map params) const
if(trace_level > 0) if(trace_level > 0)
{ {
std::unordered_map<instruction_ref, std::string> ins_names;
// get instruction names
this->print(ins_names, [](auto, auto) {});
return generic_eval(*this, return generic_eval(*this,
ctx, ctx,
std::move(params), std::move(params),
with_check_context([&](auto& ins, auto f, auto&& check_context) { with_check_context([&](auto& ins, auto f, auto&& check_context) {
ctx.finish(); ctx.finish();
std::cout << "Run instruction: "; std::cout << "Run instruction: ";
this->debug_print(ins); this->debug_print(ins, ins_names);
std::cout << std::endl;
timer t{}; timer t{};
auto result = check_context(f); auto result = check_context(f);
double t1 = t.record<milliseconds>(); double t1 = t.record<milliseconds>();
...@@ -703,9 +707,9 @@ void program::perf_report(std::ostream& os, ...@@ -703,9 +707,9 @@ void program::perf_report(std::ostream& os,
} }
void program::debug_print() const { std::cout << *this << std::endl; } void program::debug_print() const { std::cout << *this << std::endl; }
void program::debug_print(instruction_ref ins) const void program::debug_print(instruction_ref ins,
const std::unordered_map<instruction_ref, std::string>& ins_names) const
{ {
std::unordered_map<instruction_ref, std::string> names;
if(std::any_of(this->impl->modules.begin(), this->impl->modules.end(), [&](const auto& pp) { if(std::any_of(this->impl->modules.begin(), this->impl->modules.end(), [&](const auto& pp) {
return is_end(pp.second.end(), ins); return is_end(pp.second.end(), ins);
})) }))
...@@ -721,14 +725,10 @@ void program::debug_print(instruction_ref ins) const ...@@ -721,14 +725,10 @@ void program::debug_print(instruction_ref ins) const
return; return;
} }
std::stringstream ss; if(contains(ins_names, ins))
this->print(names, [&](auto x, auto ins_names) { {
if(x == ins) instruction::print(std::cout, ins, ins_names);
{ }
instruction::print(std::cout, x, ins_names);
std::cout << std::endl;
}
});
} }
void program::print( void program::print(
......
...@@ -34,12 +34,12 @@ TEST_CASE(basic_graph_test) ...@@ -34,12 +34,12 @@ TEST_CASE(basic_graph_test)
EXPECT(migraphx::contains(test, "\"main:@0\"[label=\"@literal\"]")); EXPECT(migraphx::contains(test, "\"main:@0\"[label=\"@literal\"]"));
EXPECT(migraphx::contains(test, "\"y\"[label=\"@param:y\"]")); EXPECT(migraphx::contains(test, "\"y\"[label=\"@param:y\"]"));
EXPECT(migraphx::contains(test, "\"x\"[label=\"@param:x\"]")); EXPECT(migraphx::contains(test, "\"x\"[label=\"@param:x\"]"));
EXPECT(migraphx::contains(test, "\"main:@1\"[label=\"sum\"]")); EXPECT(migraphx::contains(test, "\"main:@3\"[label=\"sum\"]"));
EXPECT(migraphx::contains(test, "\"main:@2\"[label=\"sum\"]")); EXPECT(migraphx::contains(test, "\"main:@4\"[label=\"sum\"]"));
EXPECT(migraphx::contains(test, "\"x\" -> \"main:@1\"")); EXPECT(migraphx::contains(test, "\"x\" -> \"main:@3\""));
EXPECT(migraphx::contains(test, "\"y\" -> \"main:@1\"")); EXPECT(migraphx::contains(test, "\"y\" -> \"main:@3\""));
EXPECT(migraphx::contains(test, "\"main:@1\" -> \"main:@2\"")); EXPECT(migraphx::contains(test, "\"main:@3\" -> \"main:@4\""));
EXPECT(migraphx::contains(test, "\"main:@0\" -> \"main:@2\"")); EXPECT(migraphx::contains(test, "\"main:@0\" -> \"main:@4\""));
EXPECT(migraphx::contains(test, "[label=\"int64_type, {1}, {0}\"]")); EXPECT(migraphx::contains(test, "[label=\"int64_type, {1}, {0}\"]"));
} }
......
...@@ -66,17 +66,17 @@ TEST_CASE(program_print) ...@@ -66,17 +66,17 @@ TEST_CASE(program_print)
auto in1 = mm->end(); auto in1 = mm->end();
// print end instruction // print end instruction
p.debug_print(in1); p.debug_print(in1, {});
// print instruction not in the program // print instruction not in the program
auto p2 = p; auto p2 = p;
auto* mm2 = p2.get_main_module(); auto* mm2 = p2.get_main_module();
auto in2 = mm2->begin(); auto in2 = mm2->begin();
p.debug_print(in2); p.debug_print(in2, {});
// print last instruction // print last instruction
auto in3 = std::prev(in1); auto in3 = std::prev(in1);
p.debug_print(in3); p.debug_print(in3, {});
} }
TEST_CASE(program_annotate) TEST_CASE(program_annotate)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment