cupy.ElementwiseKernel#
- class cupy.ElementwiseKernel(in_params, out_params, operation, name='kernel', reduce_dims=True, preamble='', no_return=False, return_tuple=False, **kwargs)[source]#
用户定义逐元素核函数。
此类可用于定义支持或不支持广播的逐元素核函数。
核函数在调用
__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.nvda.net.cn/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#