变化

版本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.imagGPUArray.realGPUArray.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 不受影响,正确的乘法也不受影响。

如果一个曾经运行得很快的程序突然运行得非常慢,很可能是这个错误造成的。

这就是你能做的:

  • 使用python标量而不是 numpy 标量。

  • 如果可能的话,切换到右边的乘法。

  • 使用补丁 numpy . 请参阅上面链接的bug报告,以获取带有修复的pull请求。

  • 切换到的固定版本 numpy 何时可用。

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开始,默认情况下禁用不推荐警告。)

版本0.94.2

  • 修正讨厌的费米还原错误。(多亏了托马斯·里巴克)

版本0.94.1

  • 支持CUDA调试。(见 FAQ 详情。

版本0.94

版本0.93

警告

版本0.93对pycuda编程接口进行了一些更改。在所有已记录的功能发生更改的情况下,旧的用法将继续工作,但会导致警告。建议您更新代码以删除警告。

版本0.92

注解

如果要从以前的版本升级,可以删除目录 $HOME/.pycuda-compiler-cache 以恢复现在未使用的磁盘空间。

注解

在这段时间里,我有幸就Pycuda做了一次演讲 class Nicolas Pinto周围的一群人在麻省理工学院教书。如果你感兴趣,幻灯片是 available .

版本0.91

致谢

  • 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",
}