变化#
版本2020.1#
删除对Python2.7的支持。
2019.1版#
建立改进。
错误修复。
版本2018.1#
更新boost.python以获得更好的pypy支持
添加
pycuda.elementwise.ElementwiseKernel.get_texref()
.错误修复。
2017.2版#
zeros_like()
和empty_like()
现在有 D型 和 秩序 像纽比那样的参数。以前这些例程总是返回一个c顺序数组。新的默认行为遵循numpy默认,即尽可能地匹配输入的顺序和步幅。A
ones_like()
添加了GPUARD函数。方法
GPUArray.imag
,GPUArray.real
,GPUArray.conj()
当GPUArray
是fortran命令的。
2016.2版#
备注
此版本是当前的开发版本。你可以从中得到它 PyCUDA's version control repository .
2016.1版#
错误修复。
缓存的全局控制。
矩阵/阵列互操作。
2014.1版#
添加
PointerHolderBase.as_buffer()
和DeviceAllocation.as_buffer()
.支持
device_attribute
在CUDA 5.0、5.5和6.0中添加的值。支持 托管内存 . (斯坦·塞伯特供稿)
2013.1.1版#
python 3上pycuda的windows修补程序(谢谢,christoph gohlke)
2013.1版#
python 3支持(tomasz rybak提供的大部分)
添加
pycuda.gpuarray.GPUArray.__getitem__()
,支持一般切片。它是 可能的 使用此功能创建非连续数组。大多数操作(elementwise等)都不能在这样的数组上工作。
更多的发电机
pycuda.curandom
. (托马兹·里巴克供稿)许多错误修复
备注
增加 pyopencl.array.Array.__getitem__()
由于 numpy bug 3375 . 例如,这个表达式:
numpy.float32(5) * some_gpu_array
可能需要很长时间才能执行。这是因为 numpy
首先构建(计算设备)标量(!)的对象数组在它决定这可能不是个好主意并最终打电话给 pycuda.gpuarray.GPUArray.__rmul__()
.
注意,只剩下 pycuda.gpuarray.GPUArray
通过 numpy
鳞片受到影响。python的数字类型 (float
不受影响,正确的乘法也不受影响。
如果一个曾经运行得很快的程序突然运行得非常慢,很可能是这个错误造成的。
这就是你能做的:
2012.1版#
无数的错误修复。(包括GCC4.7上的boost编译)
版本2011.2#
修复使用页锁定内存时的内存泄漏。(保罗·卡泽奥报道)
修复复杂的标量参数传递。
固定
pycuda.gpuarray.zeros()
用于复杂数组时。添加
pycuda.tools.register_dtype()
对结构类型启用扫描/缩减。对库兰的更多改进。
添加对CUDA 4.1的支持。
版本2011.1.2#
各种修复。
版本2011.1.1#
各种修复。
版本2011.1#
当您更新要在此版本的pycuda上运行的代码时,请确保启用了不推荐警告,以便您知道何时需要更新代码。(见 the Python docs . 警告:从Python2.7开始,默认情况下禁用不推荐警告。)
添加对cuda 3.0风格opengl互操作的支持。(多亏了托马斯·里巴克)
添加 范围 和 片 关键字参数
pycuda.elementwise.ElementwiseKernel.__call__()
.文件 序言 构造函数关键字参数
pycuda.elementwise.ElementwiseKernel
.添加矢量类型,请参见
pycuda.gpuarray.vec
.添加
pycuda.scan
.添加对CUDA4.0中新功能的支持。
添加
pycuda.gpuarray.GPUArray.strides
,pycuda.gpuarray.GPUArray.flags
. 允许以c和fortran顺序创建arry。采用CUDA的无状态启动接口,不支持旧接口。
添加curand包装。(托马兹·里巴克的作品)
版本0.94.2#
修正讨厌的费米还原错误。(多亏了托马斯·里巴克)
版本0.94.1#
支持CUDA调试。(见 FAQ 详情。
版本0.94#
支持CUDA 3.0。(但不是cuda 3.0beta!)在中搜索“cuda 3.0” 设备接口 看看有什么新的。
支持CUDA 3.1测试版。在中搜索“cuda 3.1” 设备接口 看看有什么新的。
支持CUDA 3.2 RC。在中搜索“cuda 3.2” 设备接口 看看有什么新的。
在中添加稀疏矩阵向量乘法和线性系统求解代码
pycuda.sparse
.添加
pycuda.gpuarray.if_positive()
,pycuda.gpuarray.maximum()
,pycuda.gpuarray.minimum()
.使用
pycuda.tools.make_default_context()
在里面pycuda.autoinit
,这会改变它的行为。删除以前不推荐的功能:
pycuda.driver.Function.registers
,pycuda.driver.Function.lmem
,以及pycuda.driver.Function.smem
已被弃用,转而支持上述机制。看见pycuda.driver.Function.num_regs
想要更多。三种论证形式(即有流)
pycuda.driver.memcpy_dtoh()
和pycuda.driver.memcpy_htod()
. 使用pycuda.driver.memcpy_dtoh_async()
和pycuda.driver.memcpy_htod_async()
相反。pycuda.driver.SourceModule
.
添加
pycuda.tools.context_dependent_memoize()
,用于pycuda罐装内核的上下文相关缓存。添加的属性
pycuda.driver.CompileError
. (丹·莱佩奇要求)添加对复数的初步支持。(与Daniel Fan初步讨论)
添加
pycuda.gpuarray.GPUArray.real
,pycuda.gpuarray.GPUArray.imag
,pycuda.gpuarray.GPUArray.conj()
.
版本0.93#
警告
版本0.93对pycuda编程接口进行了一些更改。在所有已记录的功能发生更改的情况下,旧的用法将继续工作,但会导致警告。建议您更新代码以删除警告。
OpenGL互操作性
pycuda.gl
.文件
pycuda.gpuarray.GPUArray.__len__()
. 更改其定义以匹配numpy
.让
pycuda.gpuarray.GPUArray
运算符处理泛型数据类型,包括类型提升。通过使内部上下文堆栈线程成为本地线程修复线程处理。
添加
pycuda.gpuarray.sum()
,pycuda.gpuarray.dot()
,pycuda.gpuarray.subset_dot()
.同步和异步内存传输现在彼此分离,后者具有
_async
后缀。现在的同步形式仍然采用pycuda.driver.Stream
参数,但此实践已被弃用并打印警告。pycuda.gpuarray.GPUArray
不再有关联的pycuda.driver.Stream
. 异步gpuarray传输现在与同步gpuarray传输分离,并具有_async
后缀。支持CUDA 2.2中添加的功能。
pycuda.driver.SourceModule
已移至pycuda.compiler.SourceModule
. 它仍然可以使用旧名称,但将打印一个有关即将遭到抨击的警告。pycuda.driver.Device.get_attribute()
with apycuda.driver.device_attribute
attr can now be spelled dev.attr, with no further namespace detours. (Suggested by Ian Cullinan) Likewise forpycuda.driver.Function.get_attribute()
pycuda.driver.Function.registers
,pycuda.driver.Function.lmem
,以及pycuda.driver.Function.smem
已被弃用,转而支持上述机制。看见pycuda.driver.Function.num_regs
想要更多。添加pycuda版本查询机制,请参见
pycuda.VERSION
.
版本0.92#
备注
如果要从以前的版本升级,可以删除目录 $HOME/.pycuda-compiler-cache
以恢复现在未使用的磁盘空间。
制作
pycuda.tools.DeviceMemoryPool
官方功能,经过多次改进。添加pycuda.tools.PageLockedMemoryPool
对于页面锁定的内存也是如此。正确处理面对多个上下文的自动清理。
修复Python2.4上的编译。
修复三维阵列。(尼古拉斯·平托)
在以下情况下改进错误消息 nvcc 找不到。
在抛出内存错误之前自动运行python gc。
允许使用显式释放内存
pycuda.driver.DeviceAllocation.free()
,pycuda.driver.HostAllocation.free()
,pycuda.driver.Array.free()
,pycuda.tools.PooledDeviceAllocation.free()
,pycuda.tools.PooledHostAllocation.free()
.使配置开关
./configure.py --cuda-trace
以启用API跟踪。添加文档章节和示例 元程序设计 .
添加
pycuda.gpuarray.empty_like()
和pycuda.gpuarray.zeros_like()
.添加和文档
pycuda.gpuarray.GPUArray.mem_size
期望在pycuda.gpuarray.GPUArray
.合并Jozef Vesely基于MD5的RNG。
文件
pycuda.driver.from_device()
和pycuda.driver.from_device_like()
.各种文档改进。(其中不少来自董建华)
将pycuda的编译器缓存移到系统临时目录,而不是用户主目录。
版本0.91#
添加对CUDA 1.1上编译的支持。已添加版本查询
pycuda.driver.get_version()
. 更新了文档以显示2.0版的功能。除Linux外,还支持Windows和MacOS X。(格特·沃格茅斯、科斯敏·斯特耶兰、在英伟迪亚论坛上的兹纳和大卫·加德林)
支持更多算术运算符
pycuda.gpuarray.GPUArray
. (格特·沃格默斯)添加
pycuda.gpuarray.arange()
. (格特·沃格默斯)添加
pycuda.curandom
. (格特·沃格默斯)添加
pycuda.cumath
. (格特·沃格默斯)添加
pycuda.autoinit
.添加
pycuda.tools
.pycuda.gpuarray.GPUArray
在GTX200生成设备上正确并行。制作
pycuda.driver.Function
程序可用的资源使用情况。(见,例如pycuda.driver.Function.registers
)缓存内核编译者
pycuda.compiler.SourceModule
. (Tom Annau)允许更快的、准备好的内核调用。见
pycuda.driver.Function.prepare()
.添加了内存池,位于
pycuda.tools.DeviceMemoryPool
作为实验性的、未记录的功能。对于一些工作负荷,这可以治愈缓慢。pycuda.driver.mem_alloc()
.修复 memset 功能系列。
改进 错误报告 .
添加 order 参数到
pycuda.driver.matrix_to_array()
和pycuda.driver.make_multichannel_2d_array()
.
致谢#
Gert Wohlgemuth将Pycuda移植到MacOS X并贡献了
pycuda.gpuarray.GPUArray
.alexander mordvintsev为windows xp提供了补丁。
Cosmin Stejerean为Pycuda的构建系统提供了多个补丁。
Tom Annau提供了另一个Sourcemodule编译器缓存和Windows Build Insight。
董建华改进了毕古达的文件。
jozef vesely贡献了一个从rsa data security,inc.md5消息摘要算法中获得的大量改进的随机数生成器。
chris heuser为多线程pycuda提供了一个测试用例。
还原模板基于nvidia的mark harris的代码。
AndrewWagner提供了一个测试用例,并提供了卷积示例的端口。原始卷积码基于nvidia提供的一个例子。
Hendrik Riedmann提供了矩阵转置和列表选择示例。
peter berrington为cuda-opengl互操作性提供了一个工作示例。
马尔滕啤酒提供了一个补丁'扁蛋'支持。
尼古拉斯·平托重构
pycuda.autoinit
用于自动查找设备。伊恩·奥兹瓦尔德和法布里齐奥·米洛提供了补丁。
Min Ragan Kelley解决了Pycuda为什么不能在OS X上运行64位CUDA的长期难题(并提供了一个补丁)。
tomasz-rybak解决了另一个长期困扰人们的难题:为什么reduction不能在一些费米芯片上工作。此外,他还提供了更新pycuda的 OpenGL 去cuda 3.0州。
飞利浦研究公司的martin bergtholdt提供了一个补丁,使得pycuda可以在64位windows 7上工作。
许可#
PYCUDA是根据MIT/X联合体许可证授予您的:
版权所有(c)2009,10 Andreas Klóckner和撰稿人。
特此免费授予任何获得本软件及其相关文档文件(以下简称“本软件”)副本的人,允许其在不受限制的情况下处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许他人向其提供软件的国家或地区,但须符合以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。
本软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,无论是在合同诉讼、侵权诉讼或其他诉讼中,作者或版权持有人均不承担因本软件或本软件的使用或其他交易而产生、引起或与之相关的任何索赔、损害或其他责任。
pycuda包括 Thrust 计算包(特别是扫描实现)。这些零件的许可证如下:
版权所有2008-2011英伟达公司
根据Apache许可证2.0版(“许可证”)获得许可;除非符合许可证,否则不得使用此文件。您可以在以下网址获得许可证副本:
除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不提供任何形式的明示或暗示保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。
备注
如果您使用apache许可的部件,请注意这些部件可能与gpl2下独家许可的软件不兼容。(大多数软件被授权为GPL2或更高版本,在这种情况下这不是问题。)
常见问题#
FAQ现在在 PyCUDA Wiki .
引用皮库达#
我们并不是要求你在工作中无端引用pycuda,否则与软件无关。也就是说,如果您确实讨论了代码的一些开发方面,并且想强调pycuda背后的一些想法,请随意引用 this article :
Andreas Klóckner、Nicolas Pinto、Yunsup Lee、Bryan Catanzaro、Paul Ivanov、Ahmed Fasih、Pycuda和PyOpenCl:基于脚本的GPU运行时代码生成方法,并行计算,第38卷,第3期,2012年3月,第157-174页。
为了您的方便,这里有一个bibtex条目:
@article{kloeckner_pycuda_2012,
author = {{Kl{\"o}ckner}, Andreas
and {Pinto}, Nicolas
and {Lee}, Yunsup
and {Catanzaro}, B.
and {Ivanov}, Paul
and {Fasih}, Ahmed },
title = "{PyCUDA and PyOpenCL: A Scripting-Based Approach to GPU Run-Time Code Generation}",
journal = "Parallel Computing",
volume = "38",
number = "3",
pages = "157--174",
year = "2012",
issn = "0167-8191",
doi = "10.1016/j.parco.2011.09.001",
}