[Hedge] Examples not working in MPI

Peter17 peter017 at gmail.com
Wed Feb 22 07:53:16 PST 2012


Dear Andreas,

I would like to adapt the Laplacian and Diffusion operators for my own
usage, but I can't make the corresponding examples work in MPI...

For examples heat/heat.py, poisson/poisson.py and
poisson/helmholtz.py, If I replace:
 rcon = guess_run_context()
by
 rcon = guess_run_context(['mpi'])

And run:
mpirun -n 2 python heat.py

Then, I get the following error:

Traceback (most recent call last):
  File "heat.py", line 165, in <module>
    main()
  File "heat.py", line 131, in main
    rhs = op.bind(discr)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/models/diffusion.py",
line 66, in bind
    return BoundDiffusionOperator(self, discr)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/models/diffusion.py",
line 98, in __init__
    self.compiled_op = discr.compile(op)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/mpi/__init__.py",
line 637, in compile
    type_hints=type_hints)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/discretization/__init__.py",
line 1324, in compile
    type_hints)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/__init__.py",
line 335, in __init__
    post_bind_mapper, type_hints)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/__init__.py",
line 404, in compile_optemplate
    return OperatorCompiler(discr)(optemplate, type_hints)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 652, in __call__
    result = IdentityMapper.__call__(self, expr)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in map_sum
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in <genexpr>
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 719, in map_common_subexpression
    expr.child, name_hint=expr.prefix)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/compiler.py",
line 178, in map_operator_binding
    self, expr, name_hint=name_hint)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 746, in map_operator_binding
    self.rec(expr.field))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 194, in map_product
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 194, in <genexpr>
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in map_sum
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in <genexpr>
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/compiler.py",
line 175, in map_operator_binding
    return self.map_planned_flux(expr)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 848, in map_planned_flux
    for f in fb.flux_exprs]
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/compiler.py",
line 170, in internal_map_flux
    return IdentityMapper.map_operator_binding(self, flux_bind)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/optemplate/mappers/__init__.py",
line 163, in map_operator_binding
    self.rec(expr.field, *args, **kwargs))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/optemplate/mappers/__init__.py",
line 172, in map_boundary_pair
    self.rec(expr.bfield, *args, **kwargs),
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 40, in __call__
    return self.map_foreign(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 70, in map_foreign
    return self.map_numpy_array(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 223, in map_numpy_array
    result[i] = self.rec(expr[i])
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 826, in map_flux_exchange
    arg_fields=[self.rec(arg_field) for arg_field in fe.arg_fields],
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 721, in map_common_subexpression
    rec_child = self.rec(expr.child)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in map_sum
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in <genexpr>
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 719, in map_common_subexpression
    expr.child, name_hint=expr.prefix)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/compiler.py",
line 178, in map_operator_binding
    self, expr, name_hint=name_hint)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 746, in map_operator_binding
    self.rec(expr.field))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in map_sum
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 189, in <genexpr>
    self.rec(child, *args) for child in expr.children))
  File "/usr/local/lib/python2.6/dist-packages/pymbolic-2010.1-py2.6.egg/pymbolic/mapper/__init__.py",
line 42, in __call__
    return method(expr, *args)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/backends/jit/compiler.py",
line 175, in map_operator_binding
    return self.map_planned_flux(expr)
  File "/usr/local/lib/python2.6/dist-packages/hedge-0.91-py2.6-linux-x86_64.egg/hedge/compiler.py",
line 861, in map_planned_flux
    raise RuntimeError("flux '%s' not in any flux batch" % expr)
RuntimeError: flux '<Flux((-1)*(Normal(0)*Int[0] +
(-1)*Normal(0)*CSE(0.5*(Int[0] + Ext[0]))))>(u)' not in any flux batch

However, these examples are working very well in CPU and (except
helmholtz.py) single GPU...

Other examples such as advection/advection.py and wave/wave.py are
working well in CPU and MPI...

Can you please have a look at them?

Thanks a lot in advance

Best regards

--
Peter Potrowl



More information about the Hedge mailing list