loopy icon indicating copy to clipboard operation
loopy copied to clipboard

Unable to map ``"bool", "complex128"`` for ``CudaTarget``

Open mitkotak opened this issue 2 years ago • 1 comments

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'

mitkotak avatar Aug 06 '22 14:08 mitkotak

  1. CudaTarget does not register boolean dtype (that's an issue, I'll push a fix for that.)
  2. complex arithmetic isn't supported in plain CUDA target. They are supported in the upcoming PyCudaTarget being discussed at: https://gitlab.tiker.net/inducer/loopy/-/merge_requests/432. That should have complex arithmetic support out of the box.

kaushikcfd avatar Aug 07 '22 03:08 kaushikcfd