Skip to content
Snippets Groups Projects
fusion-study.py 37.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • Matt Wala's avatar
    Matt Wala committed
                ic, t_start, dt, t_end, return_profile_data=True):
            pass
    
    
        result["nonfused_bytes_read"] = profile_data["bytes_read"]
        result["nonfused_bytes_written"] = profile_data["bytes_written"]
        result["nonfused_bytes_total"] = \
                result["nonfused_bytes_read"] \
                + result["nonfused_bytes_written"]
    
        result["nonfused_bytes_read_by_scalar_assignments"] = \
                profile_data["bytes_read_by_scalar_assignments"]
        result["nonfused_bytes_written_by_scalar_assignments"] = \
                profile_data["bytes_written_by_scalar_assignments"]
        result["nonfused_bytes_total_by_scalar_assignments"] = \
                result["nonfused_bytes_read_by_scalar_assignments"] \
                + result["nonfused_bytes_written_by_scalar_assignments"]
    
    Matt Wala's avatar
    Matt Wala committed
    
    
    Matt Wala's avatar
    Matt Wala committed
        for (_, _, profile_data) in fused_stepper.run(
                ic, t_start, dt, t_end, return_profile_data=True):
            pass
    
    
        result["fused_bytes_read"] = profile_data["bytes_read"]
        result["fused_bytes_written"] = profile_data["bytes_written"]
        result["fused_bytes_total"] = \
                result["fused_bytes_read"] \
                + result["fused_bytes_written"]
    
        result["fused_bytes_read_by_scalar_assignments"] = \
                profile_data["bytes_read_by_scalar_assignments"]
        result["fused_bytes_written_by_scalar_assignments"] = \
                profile_data["bytes_written_by_scalar_assignments"]
        result["fused_bytes_total_by_scalar_assignments"] = \
                result["fused_bytes_read_by_scalar_assignments"] \
                + result["fused_bytes_written_by_scalar_assignments"]
    
        return result
    
    
    def scalar_assignment_percent_of_total_mem_ops_table():
        cl_ctx = cl.create_some_context()
        queue = cl.CommandQueue(cl_ctx)
    
        result2d = mem_ops_results(queue, 2)
        result3d = mem_ops_results(queue, 3)
    
    
        if PRINT_RESULTS_TO_STDOUT:
    
    Matt Wala's avatar
    Matt Wala committed
            print("==== Scalar Assigment % of Total Mem Ops ====")
    
            outf = sys.stdout
        else:
            out_path = "scalar-assignments-mem-op-percentage.tex"
            outf = open(out_path, "w")
    
    Matt Wala's avatar
    Matt Wala committed
    
        print(
    
            latex_table(
                "lr",
                ("Operator",
                 r"\parbox{1in}{\centering \% Memory Ops. Due to Scalar Assignments}"),
                (
                    ("2D: Baseline",
                     "%.1f" % (
                            100 * result2d["nonfused_bytes_total_by_scalar_assignments"]
                            / result2d["nonfused_bytes_total"])),
                    ("2D: Inlined",
                     "%.1f" % (
                            100 * result2d["fused_bytes_total_by_scalar_assignments"]
                            / result2d["fused_bytes_total"])),
                    ("3D: Baseline",
                     "%.1f" % (
                            100 * result3d["nonfused_bytes_total_by_scalar_assignments"]
                            / result3d["nonfused_bytes_total"])),
                    ("3D: Inlined",
                      "%.1f" % (
                            100 * result3d["fused_bytes_total_by_scalar_assignments"]
                            / result3d["fused_bytes_total"])),
                )),
            file=outf)
    
    
    def scalar_assignment_effect_of_fusion_mem_ops_table():
        cl_ctx = cl.create_some_context()
        queue = cl.CommandQueue(cl_ctx)
    
        result2d = mem_ops_results(queue, 2)
        result3d = mem_ops_results(queue, 3)
    
    
        if PRINT_RESULTS_TO_STDOUT:
    
    Matt Wala's avatar
    Matt Wala committed
            print("==== Scalar Assigment Inlining Impact ====")
    
            outf = sys.stdout
        else:
            out_path = "scalar-assignments-mem-op-percentage.tex"
            outf = open(out_path, "w")
    
    Matt Wala's avatar
    Matt Wala committed
        print(
    
            latex_table(
                "lrrrr",
                ("Operator",
                 r"Bytes Read",
                 r"Bytes Written",
                 r"Total",
                 r"\% of Baseline"),
                (
                    ("2D: Baseline",
                     r"\num{%d}" % (
                         result2d["nonfused_bytes_read_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result2d["nonfused_bytes_written_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result2d["nonfused_bytes_total_by_scalar_assignments"]),
                     "100"),
                    ("2D: Inlined",
                     r"\num{%d}" % (
                         result2d["fused_bytes_read_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result2d["fused_bytes_written_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result2d["fused_bytes_total_by_scalar_assignments"]),
                     r"%.1f" % (
                         100 * result2d["fused_bytes_total_by_scalar_assignments"]
                         / result2d["nonfused_bytes_total_by_scalar_assignments"])),
                    ("3D: Baseline",
                     r"\num{%d}" % (
                         result3d["nonfused_bytes_read_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result3d["nonfused_bytes_written_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result3d["nonfused_bytes_total_by_scalar_assignments"]),
                     "100"),
                    ("3D: Inlined",
                     r"\num{%d}" % (
                         result3d["fused_bytes_read_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result3d["fused_bytes_written_by_scalar_assignments"]),
                     r"\num{%d}" % (
                         result3d["fused_bytes_total_by_scalar_assignments"]),
                     r"%.1f" % (
                         100 * result3d["fused_bytes_total_by_scalar_assignments"]
                         / result3d["nonfused_bytes_total_by_scalar_assignments"])),
                )),
            file=outf)
    
    
    def main():
        if 1:
            # Run tests.
            from py.test import main
            result = main([__file__])
            assert result == 0
    
        # Run examples.
    
        problem_stats()
    
    Matt Wala's avatar
    Matt Wala committed
        statement_counts_table()
    
        scalar_assignment_percent_of_total_mem_ops_table()
        scalar_assignment_effect_of_fusion_mem_ops_table()
    
    
    
    if __name__ == "__main__":
        main()