| # Copyright 2022 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| import pandas as pd |
| |
| _LEGEND_0 = ">10.0x better" |
| _LEGEND_1 = ">2.0x, <=10.0x better" |
| _LEGEND_2 = ">=1.0x, <=2.0x better" |
| _LEGEND_3 = ">1.0x, <1.15x worse" |
| _LEGEND_4 = ">=1.15x, <2.0x worse" |
| _LEGEND_5 = ">=2.0x, <10.x worse" |
| _LEGEND_6 = ">=10.0x worse" |
| |
| |
| def get_table_css(): |
| styles = [ |
| dict(selector="tr:hover", props=[("background", "#f4f4f4")]), |
| dict(selector="tbody tr", props=[("background-color", "#ffffff")]), |
| dict(selector="tbody td", props=[("border", "1px solid #dddfe1")]), |
| dict(selector="th", |
| props=[("background-color", "#54585d"), ("color", "#ffffff"), |
| ("font-weight", "bold"), ("border", "1px solid #54585d"), |
| ("padding", "10px")]), |
| dict(selector="td", props=[("padding", "10px")]), |
| dict(selector="", |
| props=[("border-collapse", "collapse"), |
| ("font-family", "Tahoma, Geneva, sans-serif")]), |
| dict(selector="caption", |
| props=[("text-align", "center"), ("padding", "10px"), |
| ("font-weight", "bold"), ("font-size", "1.2em"), |
| ("color", "#636363")]), |
| ] |
| return styles |
| |
| |
| def style_legend(v): |
| if _LEGEND_0 in v: |
| props = "background-color: #0277BD;" |
| elif _LEGEND_1 in v: |
| props = "background-color: #2E7D32;" |
| elif _LEGEND_2 in v: |
| props = "background-color: #66BB6A;" |
| elif _LEGEND_3 in v: |
| props = "background-color: #FBC02D;" |
| elif _LEGEND_4 in v: |
| props = "background-color: #E57373;" |
| elif _LEGEND_5 in v: |
| props = "background-color: #C62828;" |
| else: |
| props = "background-color: #880E4F" |
| return props |
| |
| |
| def generate_header_and_legend(version_html): |
| html = "<style type='text/css'>:root { font-family: Tahoma, Geneva, sans-serif; color: #636363; } h3 {text-align: center; }</style>" |
| html = html + version_html |
| |
| legend = pd.DataFrame(columns=[""]) |
| legend.loc[len(legend)] = [_LEGEND_0] |
| legend.loc[len(legend)] = [_LEGEND_1] |
| legend.loc[len(legend)] = [_LEGEND_2] |
| legend.loc[len(legend)] = [_LEGEND_3] |
| legend.loc[len(legend)] = [_LEGEND_4] |
| legend.loc[len(legend)] = [_LEGEND_5] |
| legend.loc[len(legend)] = [_LEGEND_6] |
| |
| styled_legend = legend.style.set_table_styles(get_table_css()) |
| styled_legend.set_caption("Legend") |
| styled_legend = styled_legend.set_properties(**{"color": "#ffffff"}) |
| styled_legend = styled_legend.set_properties(**{"width": "200px"}) |
| styled_legend = styled_legend.applymap(style_legend) |
| styled_legend = styled_legend.hide(axis="index") |
| styled_legend = styled_legend.hide(axis="columns") |
| html = html + styled_legend.to_html() + "<br/>" |
| return html |
| |
| |
| def style_speedup(v): |
| if v > 10.0: |
| props = "background-color: #0277BD;" |
| elif v > 2.0: |
| props = "background-color: #2E7D32;" |
| elif v >= 1.0: |
| props = "background-color: #66BB6A;" |
| else: |
| props = "background-color: #FBC02D;" |
| return props |
| |
| |
| def style_slowdown(v): |
| if v >= 10.0: |
| props = "background-color: #880E4F" |
| elif v >= 2.0: |
| props = "background-color: #C62828;" |
| elif v > 1.15: |
| props = "background-color: #E57373;" |
| else: |
| props = "background-color: #FBC02D;" |
| return props |
| |
| |
| def style_performance(v): |
| if "faster" in v: |
| return style_speedup(float(v.split("x")[0])) |
| else: |
| return style_slowdown(float(v.split("x")[0])) |
| |
| |
| def style_latency(v): |
| if v == "nan": |
| return "color: #636363" |
| if "faster" in v: |
| return style_speedup(float(v.split("x")[0])) |
| else: |
| return style_slowdown(float(v.split("x")[0])) |
| |
| |
| def style_memory(v): |
| if v == "nan": |
| return "color: #636363" |
| if "smaller" in v: |
| return style_speedup(float(v.split("x")[0])) |
| else: |
| return style_slowdown(float(v.split("x")[0])) |
| |
| |
| def format_latency_comparison(iree_latency, baseline_latency): |
| if iree_latency == 0 or baseline_latency == 0: |
| return "nan" |
| |
| speedup = baseline_latency / iree_latency |
| slowdown = iree_latency / baseline_latency |
| faster_label = "{:.2f}x faster" |
| slower_label = "{:.2f}x slower" |
| latency = faster_label.format( |
| speedup) if speedup >= 1.0 else slower_label.format(slowdown) |
| return latency |
| |
| |
| def format_memory_comparison(iree_memory, baseline_memory): |
| if iree_memory == 0 or baseline_memory == 0: |
| return "nan" |
| |
| smaller = baseline_memory / iree_memory |
| larger = iree_memory / baseline_memory |
| smaller_label = "{:.2f}x smaller" |
| larger_label = "{:0.2f}x larger" |
| memory = smaller_label.format( |
| smaller) if smaller >= 1.0 else larger_label.format(larger) |
| return memory |