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 对象可能会编译成多个内核二进制文件。
- __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#