mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2025-12-15 16:40:05 +01:00
Graphing.
This commit is contained in:
@@ -59,6 +59,18 @@ class KernelDG(nx.DiGraph):
|
|||||||
# offset is irrelevant, but it must be a machine number to avoid silly rounding issues.
|
# offset is irrelevant, but it must be a machine number to avoid silly rounding issues.
|
||||||
return line_number - 0.125
|
return line_number - 0.125
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_load_line_number(line_number):
|
||||||
|
return line_number != int(line_number)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_real_line_number(line_number):
|
||||||
|
return (
|
||||||
|
int(line_number + 0.125)
|
||||||
|
if KernelDG.is_load_line_number(line_number)
|
||||||
|
else line_number
|
||||||
|
)
|
||||||
|
|
||||||
def create_DG(self, kernel, flag_dependencies=False):
|
def create_DG(self, kernel, flag_dependencies=False):
|
||||||
"""
|
"""
|
||||||
Create directed graph from given kernel
|
Create directed graph from given kernel
|
||||||
@@ -88,6 +100,7 @@ class KernelDG(nx.DiGraph):
|
|||||||
loads[instruction_form.line_number] = load_line_number
|
loads[instruction_form.line_number] = load_line_number
|
||||||
dg.add_node(load_line_number)
|
dg.add_node(load_line_number)
|
||||||
dg.nodes[load_line_number]["instruction_form"] = InstructionForm(
|
dg.nodes[load_line_number]["instruction_form"] = InstructionForm(
|
||||||
|
mnemonic="_LOAD_",
|
||||||
line=instruction_form.line,
|
line=instruction_form.line,
|
||||||
line_number=load_line_number
|
line_number=load_line_number
|
||||||
)
|
)
|
||||||
@@ -643,21 +656,17 @@ class KernelDG(nx.DiGraph):
|
|||||||
# rename node from [idx] to [idx mnemonic] and add shape
|
# rename node from [idx] to [idx mnemonic] and add shape
|
||||||
mapping = {}
|
mapping = {}
|
||||||
for n in graph.nodes:
|
for n in graph.nodes:
|
||||||
if int(n) != n:
|
node = graph.nodes[n]["instruction_form"]
|
||||||
mapping[n] = "{}: LOAD".format(int(n))
|
if node.mnemonic is not None:
|
||||||
|
mapping[n] = "{}: {}".format(KernelDG.get_real_line_number(n), node.mnemonic)
|
||||||
|
else:
|
||||||
|
label = "label" if node.label is not None else None
|
||||||
|
label = "directive" if node.directive is not None else label
|
||||||
|
label = "comment" if node.comment is not None and label is None else label
|
||||||
|
mapping[n] = "{}: {}".format(n, label)
|
||||||
graph.nodes[n]["fontname"] = "italic"
|
graph.nodes[n]["fontname"] = "italic"
|
||||||
graph.nodes[n]["fontsize"] = 11.0
|
graph.nodes[n]["fontsize"] = 11.0
|
||||||
else:
|
if not KernelDG.is_load_line_number(n):
|
||||||
node = graph.nodes[n]["instruction_form"]
|
|
||||||
if node.mnemonic is not None:
|
|
||||||
mapping[n] = "{}: {}".format(n, node.mnemonic)
|
|
||||||
else:
|
|
||||||
label = "label" if node.label is not None else None
|
|
||||||
label = "directive" if node.directive is not None else label
|
|
||||||
label = "comment" if node.comment is not None and label is None else label
|
|
||||||
mapping[n] = "{}: {}".format(n, label)
|
|
||||||
graph.nodes[n]["fontname"] = "italic"
|
|
||||||
graph.nodes[n]["fontsize"] = 11.0
|
|
||||||
graph.nodes[n]["shape"] = "rectangle"
|
graph.nodes[n]["shape"] = "rectangle"
|
||||||
|
|
||||||
nx.relabel.relabel_nodes(graph, mapping, copy=False)
|
nx.relabel.relabel_nodes(graph, mapping, copy=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user