Skip to content
Snippets Groups Projects
Commit e8fd8409 authored by Rafael Ravedutti Lucio Machado's avatar Rafael Ravedutti Lucio Machado
Browse files

Fix bug with analysis and transformations in modular version

parent b9d88132
No related branches found
No related tags found
No related merge requests found
...@@ -48,6 +48,7 @@ set(RUNTIME_COMMON_FILES ...@@ -48,6 +48,7 @@ set(RUNTIME_COMMON_FILES
runtime/stats.cpp runtime/stats.cpp
runtime/thermo.cpp runtime/thermo.cpp
runtime/timing.cpp runtime/timing.cpp
runtime/vtk.cpp
runtime/domain/block_forest.cpp runtime/domain/block_forest.cpp
runtime/domain/regular_6d_stencil.cpp) runtime/domain/regular_6d_stencil.cpp)
......
...@@ -36,6 +36,7 @@ rho = 0.8442 ...@@ -36,6 +36,7 @@ rho = 0.8442
temp = 1.44 temp = 1.44
psim = pairs.simulation("md", [pairs.point_mass()], timesteps=200, double_prec=True, debug=True) psim = pairs.simulation("md", [pairs.point_mass()], timesteps=200, double_prec=True, debug=True)
#psim = pairs.simulation("md", [pairs.point_mass()], timesteps=200, double_prec=True, debug=True, generate_whole_program=True)
if target == 'gpu': if target == 'gpu':
psim.target(pairs.target_gpu()) psim.target(pairs.target_gpu())
...@@ -51,14 +52,14 @@ psim.add_feature_property('type', 'epsilon', pairs.real(), [sigma for i in range ...@@ -51,14 +52,14 @@ psim.add_feature_property('type', 'epsilon', pairs.real(), [sigma for i in range
psim.add_feature_property('type', 'sigma6', pairs.real(), [epsilon for i in range(ntypes * ntypes)]) psim.add_feature_property('type', 'sigma6', pairs.real(), [epsilon for i in range(ntypes * ntypes)])
psim.copper_fcc_lattice(nx, ny, nz, rho, temp, ntypes) psim.copper_fcc_lattice(nx, ny, nz, rho, temp, ntypes)
psim.set_domain_partitioner(pairs.block_forest()) #psim.set_domain_partitioner(pairs.block_forest())
#psim.set_domain_partitioner(pairs.regular_domain_partitioner()) psim.set_domain_partitioner(pairs.regular_domain_partitioner())
psim.compute_thermo(100) psim.compute_thermo(100)
psim.reneighbor_every(20) psim.reneighbor_every(20)
#psim.compute_half() #psim.compute_half()
psim.build_neighbor_lists(cutoff_radius + skin) psim.build_neighbor_lists(cutoff_radius + skin)
#psim.vtk_output(f"output/md_{target}") psim.vtk_output(f"output/md_{target}")
psim.compute(initial_integrate, symbols={'dt': dt}, pre_step=True, skip_first=True) psim.compute(initial_integrate, symbols={'dt': dt}, pre_step=True, skip_first=True)
psim.compute(lennard_jones, cutoff_radius) psim.compute(lennard_jones, cutoff_radius)
......
...@@ -9,13 +9,16 @@ class Analysis: ...@@ -9,13 +9,16 @@ class Analysis:
"""Compiler analysis performed on P4IRS""" """Compiler analysis performed on P4IRS"""
def __init__(self, ast): def __init__(self, ast):
self._ast = ast self._ast_list = ast if isinstance(ast, list) else [ast]
def apply(self, analysis): def apply(self, analysis):
print(f"Performing analysis: {type(analysis).__name__}... ", end="") print(f"Performing analysis: {type(analysis).__name__}... ", end="")
start = time.time() start = time.time()
analysis.set_ast(self._ast)
analysis.visit() for ast in self._ast_list:
analysis.set_ast(ast)
analysis.visit()
elapsed = time.time() - start elapsed = time.time() - start
print(f"{elapsed:.2f}s elapsed.") print(f"{elapsed:.2f}s elapsed.")
......
...@@ -4,7 +4,7 @@ from pairs.ir.branches import Filter ...@@ -4,7 +4,7 @@ from pairs.ir.branches import Filter
from pairs.ir.features import Features, FeatureProperties from pairs.ir.features import Features, FeatureProperties
from pairs.ir.kernel import Kernel from pairs.ir.kernel import Kernel
from pairs.ir.layouts import Layouts from pairs.ir.layouts import Layouts
from pairs.ir.module import Module from pairs.ir.module import Module, ModuleCall
from pairs.ir.properties import Properties, ContactProperties from pairs.ir.properties import Properties, ContactProperties
from pairs.ir.symbols import Symbol from pairs.ir.symbols import Symbol
from pairs.ir.types import Types from pairs.ir.types import Types
...@@ -164,7 +164,7 @@ class Simulation: ...@@ -164,7 +164,7 @@ class Simulation:
self.module_list.append(module) self.module_list.append(module)
def modules(self): def modules(self):
"""List simulation modudles, with main always in the last position""" """List simulation modules, with main always in the last position"""
sorted_mods = [] sorted_mods = []
main_mod = None main_mod = None
...@@ -536,12 +536,10 @@ class Simulation: ...@@ -536,12 +536,10 @@ class Simulation:
])) ]))
initialize_module = Module(self, name='initialize', block=all_setups) initialize_module = Module(self, name='initialize', block=all_setups)
initialize_transformations = Transformations(initialize_module, self._target)
initialize_transformations.apply_all()
do_timestep_module = Module(self, name='do_timestep', block=timestep.as_block()) do_timestep_module = Module(self, name='do_timestep', block=timestep.as_block())
do_timestep_transformations = Transformations(do_timestep_module, self._target)
do_timestep_transformations.apply_all() transformations = Transformations([initialize_module, do_timestep_module], self._target)
transformations.apply_all()
# Generate library # Generate library
self.code_gen.generate_library(initialize_module, do_timestep_module) self.code_gen.generate_library(initialize_module, do_timestep_module)
......
...@@ -10,24 +10,29 @@ from pairs.transformations.modules import DereferenceWriteVariables, AddResizeLo ...@@ -10,24 +10,29 @@ from pairs.transformations.modules import DereferenceWriteVariables, AddResizeLo
class Transformations: class Transformations:
def __init__(self, ast, target): def __init__(self, ast_list, target):
self._ast = ast self._ast_list = ast_list if isinstance(ast_list, list) else [ast_list]
self._target = target self._target = target
self._module_resizes = None self._module_resizes = None
def apply(self, transformation, data=None): def apply(self, transformation, data=None):
print(f"Applying transformation: {type(transformation).__name__}... ", end="") print(f"Applying transformation: {type(transformation).__name__}... ", end="")
start = time.time() start = time.time()
transformation.set_ast(self._ast)
if data is not None:
transformation.set_data(data)
self._ast = transformation.mutate() new_ast_list = []
for ast in self._ast_list:
transformation.set_ast(ast)
if data is not None:
transformation.set_data(data)
new_ast_list.append(transformation.mutate())
self._ast_list = new_ast_list
elapsed = time.time() - start elapsed = time.time() - start
print(f"{elapsed:.2f}s elapsed.") print(f"{elapsed:.2f}s elapsed.")
def analysis(self): def analysis(self):
return Analysis(self._ast) return Analysis(self._ast_list)
def lower(self, lower_finals=False): def lower(self, lower_finals=False):
nlowered = 1 nlowered = 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment