首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里记录了@cupy.fuse cupy python装饰器?

在哪里记录了@cupy.fuse cupy python装饰器?
EN

Stack Overflow用户
提问于 2018-12-05 19:49:38
回答 1查看 645关注 0票数 3

我看到了一些@cupy.fuse演示,这对于使用Numpy语法的GPU编程来说是一个奇迹。cupy的主要问题是,像a这样的每个操作都是一个完整的内核启动,然后是免费内核。因此,一系列的加和乘,例如,付出了大量的内核痛苦。(这就是为什么人们最好使用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是实验性的,不太可能被维护?

参考资料:

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-06 18:54:02

答案:我在这里找到了一些问题的答案

问题:

  1. 融合内核是一个巨大的进步,我不知道什么时候我会不想使用@fuse。不是一直都好吗?什么时候是个坏主意?

答: Fuse还不支持许多有用的操作。例如,z = cupy.empty_like(x)不工作,也不引用全局。因此,它根本不能普遍适用。

我想知道它的镇定性

  1. @fuse将内联它在修饰函数中找到的函数吗?

回答:看看时间,以及nvvm标记,看起来它确实会拉进子程序,并将它们融合到内核中。因此,将事物划分为子例程而不是单块代码将与fuse一起工作。

  1. 我看到发布说明中的bug修复说,它现在可以处理使用@fuse修饰的其他函数。但这并不说明它们的内核是否融合或保持独立。

答:从NVVM的输出来看,他们似乎已经加入了。很难说是否有一些剩余的开销,但时间没有显示出大量的间接费用,这意味着两个独立的内核。关键是它现在起作用了。从cupy 4.1开始,您无法从融合函数调用融合函数,因为返回类型是错误的。但从5.1开始你可以。但是,您不需要装饰这些功能。不管你做还是不做都行。

  1. 为什么没有记录下来?

答:它似乎有一些缺陷和一些不完整的功能。代码还会通知API,因为它可能会更改。

然而,这基本上是一个奇迹的功能,当它可以使用,容易提高一个数量级的小到中型阵列的速度。所以,如果这个alpha版本都有文档记录,那就太好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53639723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档