python - CuPy - 多个函数会导致多个内核吗?
问题描述
我最近制作了我的代码的一个CuPy
版本,numpy
我只得到了 x5-x15 的改进因子。当我检查我的 GPU 使用率时,它似乎很低(<1%)。我想优化我的代码运行方式以获得更快的结果。
通常,我想CuPy
对cupy. ndarray
. 例如,生成一个随机向量:
def randomUniformUnitary(N):
theta = cp.random.rand(N) * 2 * cp.pi
phi = cp.random.rand(N) * cp.pi
x = cp.sin(phi) * cp.cos(theta)
y = cp.sin(phi) * cp.sin(theta)
z = cp.cos(phi)
output = cp.stack((x, y, z), axis=-1)
return output
我有多个文档似乎没有回答的问题。(他们确实说即时内核创建,但没有解释)
- 内核合并?
CuPy 是否创建一个内核,rand()
然后发送回数据并创建一个内核用于乘法2
,然后......或者所有这些计算是否会组合成一个更快的内核?
- 内核组合标准?
如果是这样,导致这种行为的标准是什么?一线运营?一样的array
操作?函数操作?在性能方面是否可以仅对数组进行def
一次操作来分离函数,还是在某些地方双重编写代码并将所有 Cupy 函数放入一个 Python 函数中更好?cupy
- 自己的内核?
如果每个计算都是单独进行的,并且没有“内核合并”,那么我觉得我可能应该制作自己的内核来优化?它是实现GPU优化的唯一方法吗?
解决方案
推荐阅读
- php - 仅清除 Woocommerce 中的某些结帐字段值
- sql - 使用插入值作为触发器
- python - 反编译 Python 3.6 exe 文件
- c# - C# 中的 ShouldSerialize[PropertyName] 有替代方案吗?
- json - Ansible Query 如何在 JSON 输出中查询
- spring-boot - BCryptPasswordEncoder Spring Security - 是否可以在应用程序属性中设置日志轮数(强度)?
- swift - 如何在 rxSwift 4.0 中使用 UITextField.delegate textFieldDidEndEditing
- azure - 处于暂停状态且 Web 角色已停止的 Azure 云服务是否会产生费用?
- gruntjs - 我坚持配置 Gruntfile.js 将多个 JS 文件转换为一个
- r - ggsurvplot:从函数调用时无法使用 survfit