【问题标题】:Where is @cupy.fuse cupy python decorator documented?@cupy.fuse cupy python 装饰器记录在哪里?
【发布时间】:2019-05-07 11:03:15
【问题描述】:

我看过一些 @cupy.fuse 的演示,这对于使用 Numpy 语法的 GPU 编程来说简直就是一个奇迹。 Cupy 的主要问题是像添加这样的每个操作都是一个完整的内核启动,然后是内核释放。所以一系列的加法和乘法,例如,付出了很多内核的痛苦。 ( 这就是为什么使用 numba @jit 可能会更好)

@cupy.fuse() 似乎通过将函数内的所有操作合并到单个内核来解决此问题,从而显着降低启动和免费成本。

但是除了cupy.fusion 类的演示和源代码之外,我找不到任何文档。

我的问题包括:

  1. cupy.fuse 是否会积极内联在应用了装饰器的函数内部调用的任何 python 函数,从而将它们滚动到同一个内核中?

这个增强日志暗示了这一点,但没有说明组合函数是否在同一个内核中,或者只是在调用函数也被修饰时才允许。 https://github.com/cupy/cupy/pull/1350

  1. 如果是这样,我需要用@fuse 来装饰这些函数吗?我认为这可能会损害内联而不是帮助它,因为它可能会将这些函数呈现为不可融合(可能是非 python)的形式。

  2. 如果没有,我是否可以通过首先使用 @numba.jit 装饰函数然后使用 @fuse 装饰来实现自动内联。或者@jit 会再次以不可融合的形式呈现生成的 python 吗?

  3. 是什么破坏了@fuse?有哪些陷阱? @fuse 是实验性的,不太可能被维护?

参考:

https://gist.github.com/unnonouno/877f314870d1e3a2f3f45d84de78d56c

https://www.slideshare.net/pfi/automatically-fusing-functions-on-cupy

https://github.com/cupy/cupy/blob/master/cupy/core/fusion.py

https://docs-cupy.chainer.org/en/stable/overview.html

https://github.com/cupy/cupy/blob/master/cupy/manipulation/tiling.py

【问题讨论】:

标签: python numpy fuse cupy


【解决方案1】:

一些)答案:我已经找到了我在这里提出的一些问题的答案

questions:

1.  fusing kernels is such a huge advance I don't understand when I would ever not want to use @fuse.  isn't it always better? When is it a bad idea?

Answer: Fuse 还不支持很多有用的操作。例如, z = cupy.empy_like(x) 不起作用,也不能引用全局变量。因此它根本不能普遍适用。

I'm wondering about it's composability

1. will @fuse inline the functions it finds within the decorated function?

Answer: 查看时序和 nvvm 标记,它看起来确实会拉入子例程并将它们融合到内核中。因此,将事物划分为子例程而不是单片代码将适用于 fuse。

2.  I see that a bug fix in the release notes says that it can now handle calling other functions decorated with @fuse.  But this does not say if their kernels are fused or remain separate.

回答:查看 NVVM 输出,它们似乎已连接。很难说是否存在一些剩余开销,但时间并没有显示出显着的开销,表明两个单独的内核。关键是它现在有效。从 cupy 4.1 开始,您不能从融合函数调用融合函数,因为返回类型错误。但是从 5.1 开始你可以。但是,您不需要装饰这些功能。无论您是否这样做,它都有效。

4. Why isn't it documented?

ANSWWR:它似乎有一些错误和一些不完整的功能。该代码还建议 API 可能会发生变化。

但是,当它可以使用时,这基本上是一个奇迹功能,可以轻松地将中小型阵列的速度提高一个数量级。所以,如果这个 alpha 版本被记录在案,那就太好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2021-04-11
    • 2018-10-17
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多