變化#
版本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版#
注解
此版本是當前的開發版本。你可以從中得到它 .
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
首先構建(計算設備)標量(?。┑膶ο髷到M在它決定這可能不是個好主意并最終打電話給 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?。┰谥兴阉鳌癱uda 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
后綴?,F在的同步形式仍然采用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",
}