cupy.ElementwiseKernel#

class cupy.ElementwiseKernel(in_params, out_params, operation, name='kernel', reduce_dims=True, preamble='', no_return=False, return_tuple=False, **kwargs)[源代码]#

用户定义的逐元素内核。

此类可用于定义具有或不具有广播功能的逐元素内核。

内核在调用 __call__() 方法时编译,每个设备都会缓存该编译结果。编译后的二进制文件也会以哈希文件名缓存到 $HOME/.cupy/kernel_cache/ 目录下。缓存的二进制文件可以被其他进程重用。

参数:
  • in_params (str) – 输入参数列表。

  • out_params (str) – 输出参数列表。

  • operation (str) – 在循环中使用CUDA-C/C++编写的代码体。

  • name (str) – 内核函数的名称。为了性能分析的可读性,应该设置它。

  • reduce_dims (bool) – 如果 False,数组参数的形状将在内核调用中保持不变。默认情况下,形状会减少(即,数组在不复制的情况下被重塑为最小维度)。通过减少索引计算,它可能会使内核更快。

  • options (tuple) – 传递给NVRTC的编译选项。详情请参见 https://docs.nvidia.com/cuda/nvrtc/index.html#group__options

  • preamble (str) – 插入到 cu 文件顶部的 CUDA-C/C++ 代码片段。

  • no_return (bool) – 如果 True,__call__ 返回 None

  • return_tuple (bool) – 如果 True ,__call__ 总是返回数组元组,即使只返回一个值。

  • loop_prep (str) – 在核函数定义的顶部和 for 循环之上插入的 CUDA-C/C++ 代码片段。

  • after_loop (str) – 在核函数定义底部插入的 CUDA-C/C++ 代码片段。

方法

__call__()#

编译并调用逐元素内核。

仅当内核未缓存时,编译才会运行。请注意,具有不同参数数据类型或维度的内核是不兼容的。这意味着单个 ElementwiseKernel 对象可能会编译成多个内核二进制文件。

参数:
  • args – 内核的参数。

  • size (int) – 索引的范围大小。默认情况下,范围大小是根据广播结果自动确定的。仅当所有 ndarrays 都是 raw 且无法自动确定范围大小时,才必须指定此参数。

  • block_size (int) – 每个块的线程数。默认情况下,该值设置为128。

返回:

如果未设置 no_return ,则根据 __init__ 方法的 out_params 参数返回数组。如果设置了 no_return ,则返回 None

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

属性

cached_code#

返回 next(iter(self.cached_codes.values()))

此属性方法是用于调试目的。返回值不保证保持向后兼容性。

cached_codes#

返回一个字典,其中输入类型作为键,代码作为值。

此属性方法是用于调试目的。返回值不保证保持向后兼容性。

in_params#
kwargs#
name#
nargs#
nin#
no_return#
nout#
operation#
out_params#
params#
preamble#
reduce_dims#
return_tuple#