安裝?
從Conda Forge安裝?
到目前為止,安裝PyOpenCL最簡單的方法是使用 Conda Forge . Conda Forge是一個社區維護的軟件包存儲庫 Conda 包管理器。
在Linux或OS X上,以下指令集應該可以工作:
安裝的版本 miniforge 或 miniconda 適合你的系統。您可以在您的用戶帳戶中安裝這些軟件,而不需要root/管理員權限。
請注意,如果您的系統上已經安裝了Continuum Anaconda,您可以直接使用它并執行以下操作 not 需要安裝微型 Python 。
source /WHERE/YOU/INSTALLED/MINICONDA/bin/activate root
conda config --add channels conda-forge
conda install pyopencl
Windows的類似步驟也應該起作用。
請注意,如果沒有提供通過OpenCL訪問硬件的OpenCL設備驅動程序(所謂的“ICD”,用于“可安裝的客戶端驅動程序”),PyOpenCL就沒有樂趣(即無法運行代碼)。如果你收到這樣的錯誤信息 pyopencl.cffi_cl.LogicError: clGetPlatformIDs failed: <unknown error -1001>
,這意味著您沒有安裝OpenCL驅動程序。
注意,驅動程序(icd)是PyOpenCL的獨立軟件。它們可能由您的硬件供應商提供(例如Nvidia或AMD GPU)。如果您有這樣的硬件,請參閱下面的說明,了解如何使用Conda Forge的PyOpenCL使這些硬件工作。
需要注意的是OpenCL并不局限于gpu。事實上,使用OpenCL進行計算不需要特殊的硬件——您現有的CPU就足夠了。在Linux或macOS上,鍵入:
conda install pocl
安裝基于CPU的OpenCL驅動程序。在Windows上,您可以安裝 CPU OpenCL driver from Intel . 在macOS上,pocl可以提供比內置在操作系統中的OpenCL驅動程序顯著的健壯性(有時還有性能)改進。
在Linux和macOS上,可以使用Oclgrind檢測內存訪問錯誤。
conda install oclgrind
在Linux Intel Broadwell或具有Intel圖形卡的較新處理器上,可以使用NEO。
conda install intel-compute-runtime
在Linux Intel Sandybridge或更新的帶有Intel圖形卡的處理器上,可以使用Beignet。
conda install beignet
現在可以運行基于PyOpenCL的代碼了,比如 code examples .
使用供應商提供的OpenCL驅動程序(主要在Linux上)?
上面的說明幫助您獲得一個基本的OpenCL環境,該環境將獨立于您是否有專用硬件(如gpu或fpga)可用。如果你 do 有這樣的硬件,請繼續閱讀如何使其工作。
在Linux上,PyOpenCL通過查找擴展名為 .icd
在目錄中。從Conda安裝的PyOpenCL將在 /WHERE/YOU/INSTALLED/MINICONDA/etc/OpenCL/vendors
. 它們只是簡單的文本文件,包含提供OpenCL驅動程序的共享庫的文件名或完全限定路徑名。
注解
如果您在 Conda environment (例如,如果命令行提示符上的環境指示器顯示除 (root)
),則可能需要使用如下路徑:
/WHERE/YOU/INSTALLED/MINICONDA/envs/ENVIRONMENTNAME/etc/OpenCL/vendors
請注意,您應該替換 ENVIRONMENTNAME
使用命令行提示符上括號之間顯示的環境名稱。此路徑(對于當前活動的conda環境)可以從環境變量中獲得 CONDA_PREFIX
,即
$CONDA_PREFIX/etc/OpenCL/vendors
(一旦激活Conda環境)。
在Linux上,如果您安裝了其他OpenCL驅動程序(例如GPU),那么這些驅動程序將在 /etc/OpenCL/vendors
. 您可以使用以下命令使它們與Conda Forge中的PyOpenCL一起工作:
conda install ocl-icd-system
將確保這些系統范圍的ICD在您的conda環境中也可見。另一種方法是,可以手動從 /etc/OpenCL/vendors
進入,例如。, $CONDA_PREFIX/etc/OpenCL/vendors
.
如果您想了解更多信息,請參閱 ocl-icd 及其文件。Ocl icd是PyOpenCL在Linux上從Conda Forge安裝時使用的“icd加載程序”。它表示后面的代碼 libOpenCL.so
.
在macOS上,用于Conda Forge的PyOpenCL的打包依賴于 Khronos ICD Loader ,并且它的打包使得內置到操作系統中的OpenCL驅動程序除了手動安裝的其他icd之外,還可以自動使用。
使用Linux控制盤從PyPI安裝?
PyOpenCL在PyPI中分配manylinux1輪。這些輪子與基于GLIBC>=2.5的發行版兼容。
在Linux上,鍵入
pip install pyopencl
wheels附帶了OCL-ICD,并配置為使用任何支持ICD接口的OpenCL實現 /etc/OpenCL/vendors
您還可以使用作為二進制輪子提供的pip安裝以下基于CPU的OpenCL實現。請注意,必須使用pyopencl的輪子來安裝pyopencl,以便識別這些輪子。
要用pocl安裝pyopencl,一種基于CPU的實現方法,
pip install pyopencl[pocl]
要用oclgrind安裝pyopencl,OpenCL調試器需要,
pip install pyopencl[oclgrind]
注解
避免將Conda Forge和PyPI安裝的部件混合。例如,從pip安裝PyOpenCL,然后從Conda Forge安裝OCL-ICD,可以重定向ICD加載程序,從而取消對系統范圍ICD的訪問。
從源安裝?
有關如何安裝PyOpenCL的信息 從源頭 在 PyOpenCL Wiki ,但除非您有非常特殊的需求或希望自己修改PyOpenCL,否則這應該不是必需的。
提示?
IPython集成?
PyOpenCL附帶IPython集成,它允許您將PyOpenCL內核無縫集成到IPython筆記本中。只需使用以下命令加載PyOpenCL IPython擴展:
%load_ext pyopencl.ipython_ext
然后使用 %%cl_kernel
“細胞魔法”命令??吹搅藛?this notebook (與PyOpenCL一起提供)進行演示。
您可以通過使用 -o
單元格第一行上的標志(位于 %%cl_kernel
指令)。例如: %%cl_kernel -o "-cl-fast-relaxed-math" '.
還有線條魔術: cl_load_edit_kernel
將文件加載到下一個單元格(添加 cl_kernel
到第一行)和 cl_kernel_from_file
它將編譯一個文件的內核(就好像你將文件的內容復制并粘貼到一個帶有 cl_kernel
). 這兩種魔法都有選擇 -f
指定文件和 -o
用于生成選項。
2014.1 新版功能.
指南?
API穩定性?
我認為PyOpenCL的API是“穩定的”。但這并不意味著它不能改變。但如果這樣做了,您的代碼通常會繼續運行。不過,它可能會開始對您需要更改的內容發出警告,以保持與未來版本的兼容性。
如發布名稱中的第一個數字所示,棄用警告將持續一整年。(“2014.1”中的“2014”),即2014.n中不推薦使用的函數通常將在2015.n(或更高版本)中刪除。此外,穩定性承諾適用于作為已發布版本一部分的任何代碼。它不適用于API的未記錄位,也不適用于從git下載的未發布代碼。
與OpenCL的C綁定的關系?
在將OpenCL的C接口綁定到Python時,我們嘗試遵循以下準則:
移除 cl_ , CL_ 和 cl 數據類型、宏和函數名的前綴。
跟隨 PEP 8 ,即
使函數名小寫。
如果數據類型或函數名由多個單詞組成,請用下劃線分隔這些單詞。
get_info 函數變成屬性。
對象創建盡可能由構造函數完成。(即盡量減少使用“工廠功能”)
如果一個操作涉及兩個或多個“復雜”對象(例如,一個內核排隊涉及一個內核和一個隊列),請拒絕猜測哪一個應該得到該操作的方法的誘惑。相反,只需將該命令保留為函數即可。
與其他OpenCL軟件的互操作性?
幾乎所有的東西 pyopencl
支持以下接口(此處顯示為 pyopencl.MemoryObject
,從中 pyopencl.Buffer
和 pyopencl.Image
繼承):
這允許將指向OpenCL對象的C級指針檢索為Python整數,然后可以將其傳遞給接口公開OpenCL對象的其他C庫。它還允許將從其他軟件獲得的C級OpenCL對象轉換為相應的 pyopencl
物體。
2013.2 新版功能.
用戶可見的更改?
版本2020.3?
注解
此版本目前正在開發中。你可以從PyOpenCL的 git repository
版本2020.2?
刪除python2支持。
添加
allow_empty_ndrange
內核排隊。錯誤修復。
版本2018.2?
使用pybind11。
許多錯誤修復。
支持掃描內核中帶有偏移量的數組。
版本2018.1?
介紹 eliminate_empty_output_lists 的參數
pyopencl.algorithm.ListOfListsBuilder
.許多錯誤修復。
2017.2版?
許多錯誤修復。
2017.1版?
2016.2版?
反對RANLUXCL。它將在PyOpenCL的2018.x系列中刪除。
介紹隨機數生成器??吹搅藛?
pyopencl.clrandom
更多信息。增加支持 范圍 和 片 kwargs和數據縮減
pyopencl.reduction.ReductionKernel
.添加對SPIR-V的支持(參見
pyopencl.Program
)增加支持 共享虛擬內存(SVM) .
pyopencl.MemoryMap
可用作上下文管理器。
2016.1版?
這個
from_int_ptr
方法現在需要 保持 更方便所有權管理的參數。內核構建選項(如果作為列表傳遞)現在被正確引用。(這可能會破壞兼容性。)
許多錯誤修復。(GL interop、Windows、事件回調等)
版本2015.2.4?
使用mingwpy和vs2015修復Windows上的構建。
版本2015.2.3?
再修復一個ubuntu14.x版本問題。
版本2015.2.2?
修復與第1.1條的兼容性
修復與Ubuntu 14.x的兼容性。
各種錯誤修復
版本2015.2.1?
修正全局內核啟動參數
2015.2版?
[[INCOMPATIBLE]] 將PyOpenCL的復數從
float2
和double2
要自定義的OpenCL矢量類型struct
. 這是改變了,因為它很容易引入錯誤的地方復雜*復雜
真實+復雜
look 就像他們做了正確的事,卻默默地做了錯誤的事。
基于CFFI重寫包裝層
Pypy兼容性
通過Python啟動程序代碼生成更快的內核調用
POCL兼容性
2015.1版?
支持新型緩沖協議
大量修復
版本2013.2?
支持 大步 在
pyopencl.enqueue_map_buffer()
和pyopencl.enqueue_map_image()
.pyopencl.ImageFormat
使之具有可比性和可散列性。pyopencl.reduction
支持切片(由Alex Nitz提供)錯誤修復
2013.1版?
大大改善 前綴和(“掃描”) .
添加
pyopencl.tools.match_dtype_to_c_struct()
,以便更好地集成CL和numpy
類型系統。更多/改進貝塞爾函數??吹搅藛?the source .
添加
PYOPENCL_NO_CACHE
幫助調試的環境變量。(例如AMD的CPU實現,參見 their programming guide )已棄用
pyopencl.tools.register_dtype()
贊成pyopencl.tools.get_or_register_dtype()
.打掃房間
pyopencl.array.Array
構造函數接口。貶低
pyopencl.array.DefaultAllocator
.貶低
pyopencl.tools.CLAllocator
介紹
pyopencl.tools.DeferredAllocator
,pyopencl.tools.ImmediateAllocator
.允許數組的開頭與數組的開頭不一致
pyopencl.array.Array.data
pyopencl.Buffer
. 見pyopencl.array.Array.base_data
和pyopencl.array.Array.offset
. 請注意,并非PyOpenCL中的所有函數都支持這樣的數組。這些都會失敗pyopencl.array.ArrayHasOffsetError
.添加
pyopencl.array.Array.__getitem__()
和pyopencl.array.Array.__setitem__()
,支持一般切片。它是 可能的 使用此功能創建非連續數組。大多數操作(elementwise等)都不能在這樣的數組上工作。
還要注意,在切片數組上從原始數組的開頭開始的某些操作(特別是縮減和掃描)現在將失敗。這將在將來的版本中修復。
pyopencl.CommandQueue
可以用作上下文管理器(在with
聲明)
注解
增加 pyopencl.array.Array.__getitem__()
由于 numpy bug 3375 . 例如,這個表達式:
numpy.float32(5) * some_pyopencl_array
可能需要很長時間才能執行。這是因為 numpy
首先構建(計算設備)標量(?。┑膶ο髷到M在它決定這可能不是個好主意并最終打電話給 pyopencl.array.Array.__rmul__
.
注意,只剩下 pyopencl.array.Array
通過 numpy
鱗片受到影響。python的數字類型 (float
不受影響,正確的乘法也不受影響。
如果一個曾經運行得很快的程序突然運行得非常慢,很可能是這個錯誤造成的。
這就是你能做的:
2012.1版?
支持復數。
支持貝塞爾函數。(實驗性)
大量修復。
版本2011.2?
重要的錯誤修復:所有2011.1.x版本的內核緩存都被破壞,嚴重影響了
pyopencl.array.Array
操作。亨里克·安德烈森 PyOpenCL workshop at DTU 第一次注意到奇怪的時間安排。所有可比較的PyOpenCL對象現在也是可哈希的。
添加
pyopencl.tools.context_dependent_memoize
文檔化的功能。基地
pyopencl.clrandom
在 RANLUXCL ,添加功能。添加
pyopencl.NannyEvent
物體。確保與OS X Lion兼容。
添加
pyopencl.tools.register_dtype()
對結構類型啟用掃描/縮減。:func:
pyopencl.enqueue_migrate_mem_objects` `已重命名 ``pyopencl.enqueue_migrate_mem_objects_ext
.pyopencl.enqueue_migrate_mem_objects()
現在引用這個名稱的opencl1.2函數(如果可用)。pyopencl.Device.create_sub_devices()
已重命名pyopencl.Device.create_sub_devices_ext
.pyopencl.Device.create_sub_devices()
現在引用這個名稱的opencl1.2函數(如果可用)。對opencl1.2的Alpha支持。
版本2011.1.2?
更多錯誤修復。
版本2011.1.1?
修復了python3兼容性。(作者:克里斯托夫·高爾克)
版本2011.1?
所有 is_blocking 參數現在默認為 True 以避免默認的行為。(Jan Meinke建議)特別是,這一變化影響到
pyopencl.enqueue_read_buffer
,pyopencl.enqueue_write_buffer
,pyopencl.enqueue_read_buffer_rect
,pyopencl.enqueue_write_buffer_rect
,pyopencl.enqueue_read_image
,pyopencl.enqueue_write_image
,pyopencl.enqueue_map_buffer
,pyopencl.enqueue_map_image
.添加
pyopencl.reduction
.添加 約簡 .
添加
pyopencl.scan
.否決的上下文參數
pyopencl.array.to_device()
,pyopencl.array.zeros()
,pyopencl.array.arange()
.建造
pyopencl.array.Array
更靈活( cqa 參數。)添加 內存池 .
添加矢量類型,請參見
pyopencl.array.vec
.添加
pyopencl.array.Array.strides
,pyopencl.array.Array.flags
. 允許按C和Fortran順序創建數組。添加
pyopencl.enqueue_copy()
. 棄用所有其他傳遞函數。添加對許多擴展的支持,其中包括設備裂變。
添加編譯器緩存。
將“gu timesu l”關鍵字arg添加到內核執行中。
版本0.92?
添加對opencl1.1的支持。
為添加支持 cl_khr_gl_sharing 擴展,導致工作GL互操作性。
的呼叫簽名
pyopencl.Kernel.__call__()
改為強調 local_size .為添加支持 cl_nv_device_attribute_query 延伸。
添加
pyopencl.array.Array()
以及相關功能。使構建不依賴于Boost C++。
版本0.91.5?
添加
pyopencl.ImageFormat.channel_count
,pyopencl.ImageFormat.dtype_size
,pyopencl.ImageFormat.itemsize
.添加缺失
pyopencl.enqueue_copy_buffer
.添加
pyopencl.enqueue_barrier()
,之前不見了。
版本0.91.4?
一個錯誤修復版本。沒有用戶可見的更改。
版本0.91.3?
所有參數都命名為 host_buffer 已重命名 霍斯特布夫 為了與
pyopencl.Buffer
0.91中引入的構造函數。兼容性代碼已就位。這個
pyopencl.Image
構造函數不需要 形狀 參數,如果給定 霍斯特布夫 有 hostbuf.shape .這個
pyopencl.Context
構造函數現在可以在沒有參數的情況下調用。
版本0.91.2?
pyopencl.Program.build()
現在捕獲構建日志并將它們添加到異常文本中。貶低
pyopencl.create_context_from_type
支持第二種形式的pyopencl.Context
構造函數介紹
pyopencl.LocalMemory
.記錄內核調用和
pyopencl.Kernel.set_arg()
.
版本0.91.1?
修復了一些bug,特別是涉及
pyopencl.Sampler
.pyopencl.Device
,pyopencl.Platform
,pyopencl.Context
現在有更好的字符串表示。添加
pyopencl.Image.shape
. (大衛·加西亞建議)
版本0.91?
添加 OpenCL運行時:OpenGL互操作性 .
添加測試套件。
修復大量 get_info 漏洞。(大衛加西亞和測試套件報道)
添加
pyopencl.addressing_mode.to_string()
和同事們。這個 pitch 論據
pyopencl.create_image_2d
,pyopencl.create_image_3d
,pyopencl.enqueue_read_image
和pyopencl.enqueue_write_image
現在默認為零。論元序 enqueue_{{read,write}}_image 因此發生了變化。貶低
pyopencl.create_image_2d
,pyopencl.create_image_3d
贊成pyopencl.Image
建造師。貶低
pyopencl.create_program_with_source
,pyopencl.create_program_with_binary
贊成pyopencl.Program
建造師。貶低
pyopencl.create_buffer
,pyopencl.create_host_buffer
贊成pyopencl.Buffer
建造師。pyopencl.Image.get_image_info()
現在真的存在了。添加
pyopencl.Image.info
.修復API跟蹤。
將構造函數參數添加到
pyopencl.ImageFormat
. (大衛·加西亞建議)
版本0.90.4?
為Windows和OS X添加生成修復程序。
版本0.90.3?
將GNU ISM固定在包裝器的C++代碼中。
版本0.90.2?
修復將屬性傳遞到
pyopencl.CommandQueue
. 同時修復相關文檔。
版本0.90.1?
在Mac上修復建筑。
版本0.90?
首次發布。
許可?
PyOpenCL根據MIT/X聯盟許可證授權給您:
版權所有(c)2009-13 Andreas Kl?ckner和貢獻者。
特此免費授予任何獲得本軟件及其相關文檔文件(以下簡稱“本軟件”)副本的人,允許其在不受限制的情況下處理本軟件,包括但不限于使用、復制、修改、合并、發布、分發、再許可和/或出售本軟件副本的權利,并允許他人向其提供軟件的國家或地區,但須符合以下條件:
上述版權聲明和本許可聲明應包含在軟件的所有副本或實質部分中。
本軟件按“原樣”提供,不作任何明示或暗示的保證,包括但不限于對適銷性、特定用途適用性和非侵權性的保證。在任何情況下,無論是在合同訴訟、侵權訴訟或其他訴訟中,作者或版權持有人均不承擔因本軟件或本軟件的使用或其他交易而產生、引起或與之相關的任何索賠、損害或其他責任。
PyOpenCL包括 Thrust 計算包(特別是掃描實現)。這些零件的許可證如下:
版權所有2008-2011英偉達公司
根據Apache許可證2.0版(“許可證”)獲得許可;除非符合許可證,否則不得使用此文件。您可以在以下網址獲得許可證副本:
除非適用法律要求或書面同意,否則根據許可證分發的軟件按“原樣”分發,不提供任何形式的明示或暗示保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。
注解
如果您使用apache許可的部件,請注意這些部件可能與gpl2下獨家許可的軟件不兼容。(大多數軟件被授權為GPL2或更高版本,在這種情況下這不是問題。)
PyOpenCL包括Random123隨機數生成器套件的一部分:
版權所有2010-2012,D.E.Shaw Research。版權所有。
只要滿足以下條件,允許以源形式和二進制形式重新分配和使用,不論是否修改:
重新分發源代碼必須保留上述版權聲明、此條件列表和以下免責聲明。
以二進制形式重新分發時,必須在分發時提供的文檔和/或其他材料中復制上述版權聲明、此條件列表以及以下免責聲明。
未經事先書面許可,不得使用D.E.Shaw Research的名稱或其貢獻者的姓名來認可或推廣從本軟件衍生的產品。
本軟件由版權所有人和貢獻者“按原樣”提供,任何明示或暗示的保證,包括但不限于對適銷性和特定用途適用性的暗示保證,均不予承認。在任何情況下,版權所有人或貢獻者均不對任何直接、間接、偶然、特殊、懲戒性或后果性損害(包括但不限于采購替代貨物或服務;使用、數據或利潤損失;或業務中斷)負責,無論該損害是由何種原因引起的,還是根據任何責任理論,無論是在合同中,因使用本軟件而產生的嚴格責任或侵權(包括疏忽或其他),即使已告知可能造成此類損害。
PyOpenCL包括RANLUXCL隨機數生成器:
版權所有(c)2011 Ivar Ursin Nikolaisen
特此免費授予任何獲得本軟件及其相關文檔文件(以下簡稱“本軟件”)副本的人,允許其在不受限制的情況下處理本軟件,包括但不限于使用、復制、修改、合并、發布、分發、再許可和/或出售本軟件副本的權利,并允許他人向其提供軟件的國家或地區,但須符合以下條件:
上述版權聲明和本許可聲明應包含在軟件的所有副本或實質部分中。
本軟件按“原樣”提供,不作任何明示或暗示的保證,包括但不限于對適銷性、特定用途適用性和非侵權性的保證。在任何情況下,無論是在合同訴訟、侵權訴訟或其他訴訟中,作者或版權持有人均不承擔因本軟件或本軟件的使用或其他交易而產生、引起或與之相關的任何索賠、損害或其他責任。
常見問題?
FAQ以協作方式維護在 Wiki FAQ page .
引用PyOpenCL?
我們并不是要你在與軟件無關的工作中無緣無故地引用PyOpenCL。也就是說,如果您確實討論了代碼的一些開發方面,并且希望強調PyOpenCL背后的一些想法,請隨意引用 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",
}
致謝?
貢獻者?
太多,無法列出。請看照片 commit log 詳細的致謝。
文件交叉引用?
Numpy?
-
class
numpy.
int8
? 見
numpy.generic
.
-
class
numpy.
int32
? 見
numpy.generic
.
-
class
numpy.
float64
? 見
numpy.generic
.
OpenCL規范?
-
type
cl_platform_id
? 見 CL specification .
-
type
cl_device_id
? 見 CL specification .
-
type
cl_context
? 見 CL specification .
-
type
cl_command_queue
? 見 CL specification .
-
type
cl_mem
? 見 CL specification .
-
type
cl_program
? 見 CL specification .
-
type
cl_kernel
? 見 CL specification .
-
type
cl_sampler
? 見 CL specification .
-
type
cl_event
? 見 CL specification .
-
void
clCreateCommandQueueWithProperties
()? 見 CL specification .
-
void
clCreateSamplerWithProperties
()? 見 CL specification .
-
void
clCreatePipe
()? 見 CL specification .
內部類型?
-
class
pyopencl._cl.
Platform
?
-
class
pyopencl._cl.
Device
? 見
pyopencl.Device
.
-
class
pyopencl._cl.
CommandQueue
?
-
class
pyopencl._cl.
Context
? 見
pyopencl.Context
.
-
class
pyopencl._cl.
Event
? 見
pyopencl.Event
.
-
class
pyopencl._cl.
SVMAllocation
?
-
class
pyopencl._cl.
MemoryMap
?
-
class
pyopencl._cl.
Sampler
? 見
pyopencl.Sampler
.
-
class
pyopencl._cl.
Program
? 見
pyopencl.Program
.
-
class
pyopencl._cl.
_Program
? 見
pyopencl.Program
.
-
class
pyopencl._cl.
Kernel
? 見
pyopencl.Kernel
.