[NGraph] VisualizeTree denormal visualization (#4411)

* [NGraph] VisualizeTree denormal visualization

* [NGraph] VisualizeTree: constant values fix

* comment fix
This commit is contained in:
Edward Shogulin 2021-03-26 12:17:17 +03:00 committed by GitHub
parent 61102d63cc
commit c367b3f22e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include <cmath>
#include <fstream>
#include "ngraph/env_util.hpp"
@ -248,7 +249,6 @@ void pass::VisualizeTree::add_node_arguments(shared_ptr<Node> node,
{
m_node_modifiers(*arg, attributes);
}
m_ss << " " << clone_name << " -> " << node->get_name();
m_ss << " " << clone_name << "[";
for (auto attr : attributes)
{
@ -256,7 +256,8 @@ void pass::VisualizeTree::add_node_arguments(shared_ptr<Node> node,
}
m_ss << "]\n";
m_ss << label_edge(arg, node, arg_index, jump_distance) << "\n";
m_ss << " " << clone_name << " -> " << node->get_name()
<< label_edge(arg, node, arg_index, jump_distance) << "\n";
fake_node_ctr++;
}
else if (jump_distance > max_jump_distance)
@ -336,18 +337,65 @@ static std::string pretty_partial_shape(const PartialShape& shape)
return ss.str();
}
template <typename T>
static std::string pretty_min_max_denormal_value(const vector<T>& values)
{
std::stringstream ss;
T min_value = values[0];
T max_value = values[0];
size_t denormal_counts = 0ul;
std::stringstream denormal_ss;
for (size_t i = 0; i < values.size(); ++i)
{
const auto& value = values[i];
if (min_value > value)
{
min_value = value;
}
if (max_value < value)
{
max_value = value;
}
const auto abs_value = std::abs(static_cast<double>(value));
if (((abs_value > 0.) && (abs_value < 1.e-32)) || (abs_value > 1.e+32))
{
if (denormal_counts < 3)
{
denormal_ss << (denormal_counts > 0 ? ", " : "") << i << ": " << value;
}
else if (denormal_counts == 3)
{
denormal_ss << "...";
}
denormal_counts++;
}
}
ss << "min: " << min_value << ", max: " << max_value;
if (denormal_counts != 0)
{
ss << ", denormals: " << denormal_counts << " [" << denormal_ss.str() << "]";
}
return ss.str();
}
template <typename T>
static std::string pretty_value(const vector<T>& values, size_t max_elements)
{
std::stringstream ss;
for (size_t i = 0; i < values.size(); ++i)
{
if (i != 0 && i % 8 == 0)
if (i < max_elements)
{
ss << std::endl;
if (i != 0 && i % 8 == 0)
{
ss << std::endl;
}
}
if (i >= max_elements)
else
{
ss << "...";
break;
@ -358,6 +406,14 @@ static std::string pretty_value(const vector<T>& values, size_t max_elements)
ss << ", ";
ss << value;
}
const std::string additional_ss = getenv_bool("NGRAPH_VISUALIZE_TREE_MIN_MAX_DENORMAL")
? pretty_min_max_denormal_value(values)
: "";
if (!additional_ss.empty())
{
ss << std::endl << "(" << additional_ss << ")";
}
return ss.str();
}