Hi Andreas,
Thanks for the response. Following your steps I was able to get updated repotool. I now
get different error when trying to run examples with CUDA. This is after I tried to run
the advection example, then the burgers example. Both gave same TypeError, burgers gave a
PyCUDA error. The errors are below:
~/HEDGE/src/hedge/examples/burgers$ python burgers.py -f cuda
~/HEDGE/src/hedge/hedge/backends/cuda/__init__.py:327: UserWarning: You can achieve better
performance if you pass an optemplate in the tune_for= kwarg.
warn("You can achieve better performance if you pass an optemplate "
plan gather [########################################] ETA ?
plan diff [########################################] ETA 0.0s
20 elements
plan el_local [########################################] ETA ?
Traceback (most recent call last):
File "burgers.py", line 229, in <module>
main()
File "burgers.py", line 196, in main
for step, t, dt in step_it:
File "/home/ktubbs/HEDGE/src/hedge/hedge/timestep/__init__.py", line 90, in
times_and_steps
logmgr.tick_before()
File "/home/ktubbs/HEDGE/src/pytools/pytools/log.py", line 584, in
tick_before
self._gather_for_descriptor(gd)
File "/home/ktubbs/HEDGE/src/pytools/pytools/log.py", line 555, in
_gather_for_descriptor
q_value = gd.quantity()
File "/home/ktubbs/HEDGE/src/hedge/hedge/log.py", line 131, in __call__
return self.discr.norm(var, self.p)
File "/home/ktubbs/HEDGE/src/hedge/hedge/discretization/__init__.py", line
1168, in norm
return self.integral(numpy.abs(volume_vector) ** p)**(1/p)
File "/home/ktubbs/HEDGE/src/hedge/hedge/discretization/__init__.py", line
1139, in integral
self._mass_integral_projection(), volume_vector)
File "<string>", line 2, in _mass_integral_projection
File "/home/ktubbs/HEDGE/src/pytools/pytools/__init__.py", line 327, in
memoize_method
result = method(instance, *args)
File "/home/ktubbs/HEDGE/src/hedge/hedge/discretization/__init__.py", line
1121, in _mass_integral_projection
return MassOperator().apply(self, self._integral_projection())
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/operators.py", line 67, in
apply
return self.bind(discr)(field)
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/operators.py", line 62, in
apply_op
return with_object_array_or_scalar(lambda f: bound_op(f=f), field)
File "/home/ktubbs/HEDGE/src/pytools/pytools/obj_array.py", line 145, in
with_object_array_or_scalar
return f(field)
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/operators.py", line 62, in
<lambda>
return with_object_array_or_scalar(lambda f: bound_op(f=f), field)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/execute.py", line 684,
in __call__
self.discr.exec_mapper_class(vars, self),
File "/home/ktubbs/HEDGE/src/hedge/hedge/compiler.py", line 489, in execute
return self.execute_dynamic(exec_mapper, pre_assign_check)
File "/home/ktubbs/HEDGE/src/hedge/hedge/compiler.py", line 444, in
execute_dynamic
insn.get_executor_method(exec_mapper)(insn)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/execute.py", line 164,
in exec_vector_expr_assign
for name, expr in zip(insn.names, insn.exprs)], []
File "/home/ktubbs/HEDGE/src/pymbolic/pymbolic/mapper/__init__.py", line 41,
in __call__
return method(expr, *args)
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/mappers/__init__.py", line
210, in map_operator_binding
return getattr(self, expr.op.mapper_method)(expr.op, expr.field, *args, **kwargs)
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/mappers/__init__.py", line
97, in map_ref_mass
return self.map_ref_mass_base(expr, *args, **kwargs)
File "/home/ktubbs/HEDGE/src/hedge/hedge/optemplate/mappers/__init__.py", line
94, in map_ref_mass_base
return self.map_elementwise_linear(expr, *args, **kwargs)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/execute.py", line 300,
in map_elementwise_linear
kernel = self.executor.discr.element_local_kernel()
File "<string>", line 2, in element_local_kernel
File "/home/ktubbs/HEDGE/src/pytools/pytools/__init__.py", line 327, in
memoize_method
result = method(instance, *args)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/__init__.py", line
1450, in element_local_kernel
op_name="el_local")
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/plan.py", line 455, in
make_element_local_plan
log_filename="%s-%d" % (op_name, given.order()))
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/plan.py", line 117, in
optimize_plan
value = target_func(p)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/plan.py", line 449, in
target_func
return plan.make_kernel(discr).benchmark()
File
"/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/el_local_shared_fld.py", line
148, in benchmark
self.get_kernel(with_scaling=True, for_benchmark=True)
TypeError: get_kernel() got an unexpected keyword argument 'with_scaling'
-------------------------------------------------------------------
PyCUDA ERROR: The context stack was not empty upon module cleanup.
-------------------------------------------------------------------
A context was still active when the context stack was being
cleaned up. At this point in our execution, CUDA may already
have been deinitialized, so there is no way we can finish
cleanly. The program will be aborted now.
Use Context.pop() to avoid this problem.
-------------------------------------------------------------------
Aborted
Thanks,
Kevin
________________________________________
From: Andreas Kloeckner [lists(a)informa.tiker.net]
Sent: Friday, August 05, 2011 1:01 AM
To: Tubbs, Kevin; hedge(a)tiker.net
Subject: Re: [Hedge] Running Examples with CUDA
Hi Kevin,
On Thu, 4 Aug 2011 20:06:26 +0000, "Tubbs, Kevin" <KTubbs(a)hpti.com>
wrote:
I've installed hedge with pycuda. I got the
Install OK message after ./repotool start-over. I can run examples on CPU, but when I try
to run on CUDA with "-f cuda". I get the follow error:
/src/hedge/examples/advection$ python advection.py -f cuda
Traceback (most recent call last):
File "advection.py", line 164, in <module>
main()
File "advection.py", line 77, in main
discr = rcon.make_discretization(mesh_data, order=4)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/__init__.py", line 125, in
make_discretization
return self.discr_class(mesh_data, *args, **kwargs)
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/__init__.py", line 144, in
discr_class
from hedge.backends.cuda import Discretization
File "/home/ktubbs/HEDGE/src/hedge/hedge/backends/cuda/__init__.py", line 30,
in <module>
import pycuda.gpuarray as gpuarray
File "/home/ktubbs/HEDGE/src/pycuda/pycuda/gpuarray.py", line 6, in
<module>
from pycuda.compyte.array import (
ImportError: No module named compyte.array
Do a git pull in your repotool directory (to update repotool), then do
'repotool pull
http://git.tiker.net/trees/ .git', then redo the
'start-over'. I just updated repotool to correctly deal with
submodules. Sorry for the trouble, and thanks for the report. Let me
know how it goes.
Andreas