loopy
loopy copied to clipboard
Unable to map ``"bool", "complex128"`` for ``CudaTarget``
Here's the MWE
import loopy as lp
import numpy as np
knl = lp.make_kernel(
domains = "{ [_0]: 0<=_0<10 }",
instructions = "out[_0] = 2*a[_0]",
kernel_data = [lp.GlobalArg("out", shape=lp.auto, dtype="bool"),
lp.GlobalArg("a", shape=lp.auto, dtype="bool")],
target=lp.CudaTarget(),
lang_version=(2018, 2))
#knl = lp.make_kernel(
# domains = "{ [_0]: 0<=_0<10 }",
# instructions = "out[_0] = 2*a[_0]",
# kernel_data = [lp.GlobalArg("out", shape=lp.auto, dtype="complex128"),
# lp.GlobalArg("a", shape=lp.auto, dtype="complex128")],
# target=lp.CudaTarget(),
# lang_version=(2018, 2))
print(knl)
lp.generate_code_v2(knl).device_code()
Generated kernel
---------------------------------------------------------------------------
KERNEL: loopy_kernel
---------------------------------------------------------------------------
ARGUMENTS:
out: type: np:dtype('bool'), shape: (10), dim_tags: (N0:stride:1) out aspace: global
a: type: np:dtype('bool'), shape: (10), dim_tags: (N0:stride:1) in aspace: global
---------------------------------------------------------------------------
DOMAINS:
{ [_0] : 0 <= _0 <= 9 }
---------------------------------------------------------------------------
INAME TAGS:
_0: None
---------------------------------------------------------------------------
INSTRUCTIONS:
for _0
out[_0] = 2*a[_0] {id=insn}
end _0
---------------------------------------------------------------------------
Here's the trace
Traceback (most recent call last):
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/compyte/dtypes.py", line 104, in dtype_to_ctype
return self.dtype_to_name[dtype]
KeyError: dtype('bool')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/mitak2/cudagraph_pytato/loopy_bool.py", line 11, in <module>
knl_string = lp.generate_code_v2(knl).device_code()
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/__init__.py", line 625, in generate_code_v2
cgr = generate_code_for_a_single_kernel(program[func_id],
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/__init__.py", line 413, in generate_code_for_a_single_kernel
codegen_result = generate_host_or_device_program(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/result.py", line 319, in generate_host_or_device_program
codegen_result = build_loop_nest(codegen_state, schedule_index)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/control.py", line 197, in build_loop_nest
inner = generate_code_for_sched_index(codegen_state, schedule_index)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/control.py", line 53, in generate_code_for_sched_index
codegen_result = generate_host_or_device_program(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/codegen/result.py", line 332, in generate_host_or_device_program
fdecl_ast = ast_builder.get_function_declaration(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/cuda.py", line 321, in get_function_declaration
fdecl = super().get_function_declaration(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/__init__.py", line 872, in get_function_declaration
[self.arg_to_cgen_declarator(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/__init__.py", line 872, in <listcomp>
[self.arg_to_cgen_declarator(
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/__init__.py", line 1086, in arg_to_cgen_declarator
return self.get_array_arg_declarator(var_descr, is_written)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/cuda.py", line 438, in get_array_arg_declarator
self.get_array_base_declarator(arg), arg.address_space))
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/cuda.py", line 431, in get_array_base_declarator
return POD(self, dtype, ary.name)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/__init__.py", line 274, in __init__
self.ctype = ast_builder.target.dtype_to_typename(dtype)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/__init__.py", line 459, in dtype_to_typename
return self.get_dtype_registry().dtype_to_ctype(dtype)
File "/home/mitak2/env/lib/python3.10/site-packages/loopy/target/c/compyte/dtypes.py", line 106, in dtype_to_ctype
raise ValueError("unable to map dtype '%s'" % dtype)
ValueError: unable to map dtype 'bool'
- CudaTarget does not register boolean dtype (that's an issue, I'll push a fix for that.)
-
complex
arithmetic isn't supported in plain CUDA target. They are supported in the upcomingPyCudaTarget
being discussed at: https://gitlab.tiker.net/inducer/loopy/-/merge_requests/432. That should have complex arithmetic support out of the box.