OpenCL運行時:內存?

class pyopencl.MemoryObject?
info?

的小寫版本 mem_info 常量可以用作此類實例上的屬性,以直接查詢信息屬性。

hostbuf?
get_info(param)?

mem_info 對于價值 param .

release()?
get_host_array(shape, dtype, order='C')?

將內存對象的關聯主機內存區域作為 numpy.ndarray 給定的 形狀 , D型秩序 .

static from_int_ptr(int_ptr_value: int, retain: bool = True)object?

(靜態方法)返回一個引用C級的新Python對象 cl_mem 對象指向的位置 int_ptr_value . 相關的 clRetain* 函數將被調用,如果 保持 是是的,如果對象的前所有者將 not 釋放引用, 保持 應設置為 ,有效地將所有權轉移給 pyopencl .

2013.2 新版功能.

在 2016.1 版更改: 保持 補充。

int_ptr?

返回與基礎 cl_mem . 使用 from_int_ptr() 返回到Python對象。

2013.2 新版功能.

Instances of this class are hashable, and two instances of this class may be compared using "==" and "!=". (Hashability was added in version 2011.2.) Two objects are considered the same if the underlying OpenCL object is the same, as established by C pointer equality.

內存遷移?

pyopencl.enqueue_migrate_mem_objects(queue, mem_objects, flags=0, wait_for=None)?
參數

flags -- 從 mem_migration_flags

2011.2 新版功能.

僅適用于CL 1.2。

緩沖區?

class pyopencl.Buffer(context, flags, size=0, hostbuf=None)?

創建一個 Buffer . 見 mem_flags 對于價值 旗幟 .如果 霍斯特布夫 已指定, size 如果指定的緩沖區作為零傳遞,則默認為該緩沖區的大小。

Buffer 繼承自 MemoryObject .

注解

Python還定義了一種 buffer object ,而PyOpenCL也與之交互,作為的主機端目標 enqueue_copy() . 確保始終清楚 Buffer 或者需要Python緩沖區對象。

請注意,OpenCL中的實際內存分配可能會延遲。緩沖器連接到 Context 只有在設備上使用了緩沖區后,才會將和移動到該設備。這也是發生內存不足錯誤的時間點。如果您想確保有足夠的內存用于分配,可以使用 enqueue_migrate_mem_objects() (如果可用)或只是執行一個小的傳輸到緩沖區。另請參見 pyopencl.tools.ImmediateAllocator .

get_sub_region(origin, size, flags=0)?

僅在OpenCL1.1及更新版本中可用。

__getitem__(slc)?

slc 是一個 slice 對象,指示要從哪個字節索引范圍創建子緩沖區。這個 旗幟 的參數 get_sub_region() 設置為與 self 創建。

pyopencl.enqueue_fill_buffer(queue, mem, pattern, offset, size, wait_for=None)?
參數
  • mem -- 在設備上 Buffer

  • pattern -- 緩沖對象(可能是 numpy.ndarray 例如。 np.uint32(0) )與…有關的記憶 模式 函數完成后可以重用或釋放。

  • size -- 要填充的區域的大?。ㄗ止潱?。必須是圖案大小的倍數。

  • offset -- 正在填充的區域的位置(以字節為單位) mem . 必須是圖案大小的倍數。

用提供的模式填充緩沖區

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

僅適用于CL 1.2。

2011.2 新版功能.

共享虛擬內存(SVM)?

共享虛擬內存允許主機和計算設備共享地址空間,因此主機和設備上的指針可能具有相同的含義。此外,它允許主機和設備訪問相同的內存。 Coarse-grain SVM要求在主機上訪問緩沖區之前映射緩沖區, fine-grain SVM取消了這個要求。

SVM需要OpenCL2.0。

class pyopencl.SVM(mem)?

標記顯示Python緩沖區接口的對象(例如 numpy.ndarray )指的是共享虛擬內存。

根據OpenCL實現的特性,可以將以下類型的對象傳遞給該類型或包裝為該類型:

  • 由(例如)返回的粗粒度共享內存 csvm_empty() 對于OpenCL2.0的任何實現。

    這就是如何從主機和設備使用粗粒度支持向量機:

    svm_ary = cl.SVM(
        cl.csvm_empty(ctx, 1000, np.float32, alignment=64))
    assert isinstance(svm_ary.mem, np.ndarray)
    
    with svm_ary.map_rw(queue) as ary:
        ary.fill(17)  # use from host
    
    prg.twice(queue, svm_ary.mem.shape, None, svm_ary)
    
  • 返回的細粒度共享內存(例如) fsvm_empty() ,如果實現支持細粒度共享虛擬內存。此內存可以直接傳遞給內核:

    ary = cl.fsvm_empty(ctx, 1000, np.float32)
    assert isinstance(ary, np.ndarray)
    
    prg.twice(queue, ary.shape, None, cl.SVM(ary))
    queue.finish() # synchronize
    print(ary) # access from host
    

    觀察如何映射(如粗粒度支持向量機所需)不再是必需的。

  • 任何 numpy.ndarray (或其他帶有緩沖區接口的Python對象)如果實現支持細粒度 系統 共享虛擬內存。

    這是多么簡單 numpy 數組可以直接傳遞給內核:

    ary = np.zeros(1000, np.float32)
    prg.twice(queue, ary.shape, None, cl.SVM(ary))
    queue.finish() # synchronize
    print(ary) # access from host
    

這種類型的對象可以傳遞給內核調用和 enqueue_copy() . 粗粒度共享內存 must 映射到主機地址空間 map() 在通過 numpy 接口。

注解

這個對象只是作為一個“標記”來改變它所傳遞到的函數的行為。它與它標記的內存沒有特殊的管理關系。例如,可以抓取 numpy.ndarray 由于 SVM.mem 一個的 SVM 實例并使用數組構造另一個。兩個標簽都不需要保存。

2016.2 新版功能.

mem?

包裹的對象。

__init__(mem)?

初始化自身。請參閱幫助(鍵入(self))以獲得準確的簽名。

map(queue, flags, is_blocking=True, wait_for=None)?
參數
  • is_blocking -- 如果 ,后續代碼必須等待 SVMMap.event 在訪問映射內存之前返回對象。

  • flags -- 組合 pyopencl.map_flags ,默認為讀寫。

返回

一個 SVMMap 實例

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

map_ro(queue, is_blocking=True, wait_for=None)?

喜歡 map() 但是 旗幟 設置為只讀映射。

map_rw(queue, is_blocking=True, wait_for=None)?

喜歡 map() 但是 旗幟 設置為只讀映射。

as_buffer(ctx, flags=None)?
參數
返回

Buffer 對應于 self .

在返回之前,不能釋放此對象引用的內存 Buffer 被釋放。

class pyopencl.SVMMap(svm, queue, event)?
event?

2016.2 新版功能.

release(queue=None, wait_for=None)?
參數

queue -- 一 pyopencl.CommandQueue . 默認為創建映射時使用的映射(如果未指定)。

返回

pyopencl.Event

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

該類也可以用作 with 語句。 release() 將在退出 with 地區。返回給 as 上下文管理器的一部分是映射的Python對象(例如 numpy 陣列)。

分配支持向量機?

pyopencl.svm_empty(ctx, flags, shape, dtype, order='C', alignment=None)?

分配一個空的 numpy.ndarray 給定的 形狀 , D型秩序 . (見 numpy.empty() 數組將被分配到屬于的共享虛擬內存中 ctx .

參數
返回

numpy.ndarray 誰的 numpy.ndarray.base 屬性是 SVMAllocation .

將結果數組傳遞給OpenCL內核或 enqueue_copy() ,您可能希望將返回的數組包裝在 SVM 標簽。

2016.2 新版功能.

pyopencl.svm_empty_like(ctx, flags, ary, alignment=None)?

Allocate an empty numpy.ndarray like the existing numpy.ndarray ary. The array will be allocated in shared virtual memory belonging to ctx.

參數
返回

numpy.ndarray 誰的 numpy.ndarray.base 屬性是 SVMAllocation .

將結果數組傳遞給OpenCL內核或 enqueue_copy() ,您可能希望將返回的數組包裝在 SVM 標簽。

2016.2 新版功能.

pyopencl.csvm_empty(ctx, shape, dtype, order='C', alignment=None)?

喜歡 svm_empty() 但是 旗幟 為粗粒度讀寫緩沖區設置。

2016.2 新版功能.

pyopencl.csvm_empty_like(ctx, ary, alignment=None)?

喜歡 svm_empty_like() 但是 旗幟 為粗粒度讀寫緩沖區設置。

2016.2 新版功能.

pyopencl.fsvm_empty(ctx, shape, dtype, order='C', alignment=None)?

喜歡 svm_empty() 但是 旗幟 設置為細粒度讀寫緩沖區。

2016.2 新版功能.

pyopencl.fsvm_empty_like(ctx, ary, alignment=None)?

喜歡 svm_empty_like() 但是 旗幟 設置為細粒度讀寫緩沖區。

2016.2 新版功能.

支持向量機的運算?

(也見) 轉移

pyopencl.enqueue_svm_memfill(queue, dest, pattern, byte_count=None, wait_for=None)?

用模式填充共享虛擬內存。

參數
  • dest -- Python緩沖區對象,可選地包裝在 SVM 對象

  • pattern -- Python緩沖區對象(例如 numpy.ndarray 使用填充圖案。

  • byte_count -- 要填充的內存大小。默認為 dest .

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

2016.2 新版功能.

pyopencl.enqueue_svm_migratemem(queue, svms, flags, wait_for=None)?
參數
  • svms -- Python緩沖區對象的集合(例如。 numpy arrrays),可選擇包裹在 SVM 物體。

  • flags -- 組合 mem_migration_flags

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

2016.2 新版功能.

此函數需要opencl2.1。

支持向量機分配持有者?

class pyopencl.SVMAllocation(ctx, size, alignment, flags, _interface=None)?

一種對象,其生存期與共享虛擬內存的分配有關。

注解

很可能,您不想直接使用它,而是 svm_empty() 以及相關函數,這些函數允許使用更友好、更Pythonic的界面訪問此功能。

2016.2 新版功能.

__init__(self, ctx, size, alignment, flags=None)?
參數
release(self: pyopencl._cl.SVMAllocation)None?
enqueue_release(self: pyopencl._cl.SVMAllocation, arg0: pyopencl._cl.CommandQueue, arg1: object)None?
返回

pyopencl.Event

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

圖像?

class pyopencl.ImageFormat([channel_order, channel_type])?
channel_order?

channel_order 對于可能的值。

channel_data_type?

channel_type 對于可能的值。

channel_count?

0.91.5 新版功能.

dtype_size?

0.91.5 新版功能.

itemsize?

0.91.5 新版功能.

__repr__()?

返回A str 圖像格式的表示。

0.91 新版功能.

Instances of this class are hashable, and two instances of this class may be compared using "==" and "!=". (Hashability was added in version 2011.2.) Two objects are considered the same if the underlying OpenCL object is the same, as established by C pointer equality.

在 0.91 版更改: 已添加構造函數參數。

在 2013.2 版更改: ImageFormat 使之具有可比性和可散列性

pyopencl.get_supported_image_formats(context, flags, image_type)?

mem_flags 對于可能的值 旗幟mem_object_type 對于可能的值 image_type .

class pyopencl.Image(context, flags, format, shape=None, pitches=None, hostbuf=None, is_array=False, buffer=None)?

mem_flags 對于價值 旗幟 . 形狀 是2元組或3元組。 格式 是的實例 ImageFormat . 投球 是用于2D圖像的1元組和用于3D圖像的2元組,以字節表示從一個掃描線到下一個掃描線以及從一個2D圖像切片到下一個掃描線的距離。

如果 霍斯特布夫 被給予和 形狀None 然后 hostbuf.shape 用作 形狀 參數。

Image 繼承自 MemoryObject .

注解

如果要從加載圖像 numpy.ndarray 實例或將圖像讀回實例中,請注意OpenCL圖像期望 x 尺寸變化最快,而在默認(C)順序 numpy 數組中,最后一個索引變化最快。如果數組在內存中的排列順序錯誤,則有兩種可能的解決方法:

  • 使用將數組轉換為Fortran(列主)順序 numpy.asarray() .

  • 通過 副本() 圖像創建功能。

0.91 新版功能.

在 2011.2 版更改: 補充 is_array緩沖區 ,僅在CL 1.2及更新版本上可用。

info?

的小寫版本 mem_infoimage_info 常量可以用作此類實例上的屬性,以直接查詢信息屬性。

shape?

返回的值 形狀 構造函數參數作為 tuple .

get_image_info(param)?

image_info 對于價值 param .

release()?

Instances of this class are hashable, and two instances of this class may be compared using "==" and "!=". (Hashability was added in version 2011.2.) Two objects are considered the same if the underlying OpenCL object is the same, as established by C pointer equality.

pyopencl.image_from_array(ctx, ary, num_channels=None, mode='r', norm_int=False)?

Build a 2D or 3D Image from the numpy.ndarray ary. If num_channels is greater than one, the last dimension of ary must be identical to num_channels. ary must be in C order. If num_channels is not given, it defaults to 1 for scalar types and the number of entries for 向量類型.

這個 ImageFormat 被選為第一個 num_channels “RGBA”的組成部分。

參數

mode -- “r”或“w”表示讀/寫

注解

從圖像對象讀取時,索引傳遞給 read_imagef 與訪問時的順序相反 ary 從 Python 。

如果 norm_intTrue ,則在讀取時,整數值被標準化為0..1的浮點刻度。

2011.2 新版功能.

pyopencl.enqueue_fill_image(queue, mem, color, origin, region, wait_for=None)?
參數

color -- 緩沖對象(可能是 numpy.ndarray

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

僅適用于CL 1.2。

2011.2 新版功能.

轉移?

pyopencl.enqueue_copy(queue, dest, src, **kwargs)?

復制自 Image , Buffer 或是主人 Image , Buffer 或者是主人。(注意:不支持主機到主機的副本。)

以下關鍵字參數可用:

參數
  • wait_for -- (可選,默認為空)

  • is_blocking -- 等待完成。默認為 True . (可在任何涉及主機內存的副本上使用)

返回

A NannyEvent 如果傳輸涉及主機端緩沖區,則 Event .

注解

請注意,刪除 NannyEvent 如果傳輸涉及主機端緩沖區,則函數將返回該值,直到傳輸完成為止,因此請確保保留對此的引用 Event 直到轉移完成。

注解

此函數的參數中有兩種類型的“buffer”, Buffer 和“主機側緩沖區”。后者由Python定義,通常稱為 buffer objects . numpy 數組是一個非常常見的例子。確保始終清楚 Buffer 或者需要Python緩沖區對象。

換乘 Buffer ? 主辦

參數

device_offset -- 偏移量(字節)(可選)

注解

傳輸的大小由主機端緩沖區的大小控制。如果主機端緩沖區是 numpy.ndarray ,您可以通過傳輸到目標數組的較小“視圖”來控制傳輸大小,如下所示:

cl.enqueue_copy(queue, large_dest_numpy_array[:15], src_buffer)

換乘 Buffer ? Buffer

參數
  • byte_count -- (可選)如果未指定,則默認為版本2012.x及更早版本中源的大小,以及2013.1以后源和目標的最小大小。

  • src_offset -- (可選)

  • dest_offset -- (可選)

矩形 Buffer ? 主機傳輸(CL 1.1及更新版本)

參數
  • buffer_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • host_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • region -- tuple 屬于 int 長度三或更短的。(強制性)

  • buffer_pitches -- tuple 屬于 int 長度為2或更短的。(可選,如果未指定,則“緊密包裝”)

  • host_pitches -- tuple 屬于 int 長度為2或更短的。(可選,如果未指定,則“緊密包裝”)

矩形 Buffer ? Buffer 轉讓(CL 1.1及更新版本)

參數
  • src_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • dst_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • region -- tuple 屬于 int 長度三或更短的。(強制性)

  • src_pitches -- tuple 屬于 int 長度為2或更短的。(可選,如果未指定,則“緊密包裝”)

  • dst_pitches -- tuple 屬于 int 長度為2或更短的。(可選,如果未指定,則“緊密包裝”)

換乘 Image ? 主辦

參數
  • origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • region -- tuple 屬于 int 長度三或更短的。(強制性)

  • pitches -- tuple 屬于 int 長度為2或更短的。(可選)

換乘 Buffer ? Image

參數
  • offset -- 緩沖區中的偏移量(強制)

  • origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • region -- tuple 屬于 int 長度三或更短的。(強制性)

換乘 Image ? Image

參數
  • src_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • dest_origin -- tuple 屬于 int 長度三或更短的。(強制性)

  • region -- tuple 屬于 int 長度三或更短的。(強制性)

換乘 SVM /主持人? SVM /主持人

參數

byte_count -- (可選)如果未指定,則默認為版本2012.x及更早版本中源的大小,以及2013.1以后源和目標的最小大小。

Returns a new pyopencl.Event. wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction.

2011.1 新版功能.

將內存映射到主機地址空間?

class pyopencl.MemoryMap?

該類也可以用作 with 聲明。刪除或刪除此對象時,將取消映射與此對象對應的內存 release() 被稱為。

release(self: pyopencl._cl.MemoryMap, queue: pyopencl._cl.CommandQueue = None, wait_for: object = None)pyopencl._cl.Event?
pyopencl.enqueue_map_buffer(queue, buf, flags, offset, shape, dtype, order='C', strides=None, wait_for=None, is_blocking=True)?

wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction. 形狀 , D型秩序 與中的含義相同 numpy.empty() . 見 map_flags 對于可能的值 旗幟 . 大步 ,如果給定,則重寫 秩序 .

返回

元組 (數組,事件) . 數組 是一個 numpy.ndarray 表示地圖的主機端。它 .底座 成員包含 MemoryMap .

在 2011.1 版更改: is_blocking 現在默認為True。

在 2013.1 版更改: 秩序 現在默認為“C”。

在 2013.2 版更改: 補充 大步 爭論。

樣品使用情況:

mapped_buf = cl.enqueue_map_buffer(queue, buf, ...)
with mapped_buf.base:
    # work with mapped_buf
    ...

# memory will be unmapped here
pyopencl.enqueue_map_image(queue, buf, flags, origin, region, shape, dtype, order='C', strides=None, wait_for=None, is_blocking=True)?

wait_for may either be None or a list of pyopencl.Event instances for whose completion this command waits before starting exeuction. 形狀 , D型秩序 與中的含義相同 numpy.empty() . 見 map_flags 對于可能的值 旗幟 . 大步 ,如果給定,則重寫 秩序 .

返回

元組 (數組,事件) . 數組 是一個 numpy.ndarray 表示地圖的主機端。它 .底座 成員包含 MemoryMap .

在 2011.1 版更改: is_blocking 現在默認為True。

在 2013.1 版更改: 秩序 現在默認為“C”。

在 2013.2 版更改: 補充 大步 爭論。

采樣器?

class pyopencl.Sampler?
__init__(context, normalized_coords, addressing_mode, filter_mode)?

normalized_coords 是一個 bool 指示是否使用0和1之間的坐標( True )或者紋理的自然像素大小( )見 addressing_modefilter_mode 可能的參數值。

還支持備用簽名 (context, properties) .

參數

properties -- 來自的鍵和值的序列 sampler_properties 已被接受 clCreateSamplerWithProperties() (有關詳細信息,請參見OpenCL規范)。尾隨 0 是自動添加的,不需要包括在內。

此簽名需要OpenCL 2或更新版本。

在 2018.2 版更改: 添加了基于屬性的簽名。

info?

的小寫版本 sampler_info 常量可以用作此類實例上的屬性,以直接查詢信息屬性。

get_info(param)?

sampler_info 對于價值 param .

static from_int_ptr(int_ptr_value: int, retain: bool = True)pyopencl._cl.Sampler?

(靜態方法)返回一個引用C級的新Python對象 cl_sampler 對象指向的位置 int_ptr_value . 相關的 clRetain* 函數將被調用,如果 保持 是是的,如果對象的前所有者將 not 釋放引用, 保持 應設置為 ,有效地將所有權轉移給 pyopencl .

2013.2 新版功能.

在 2016.1 版更改: 保持 補充。

int_ptr?

返回與基礎 cl_sampler . 使用 from_int_ptr() 返回到Python對象。

2013.2 新版功能.

Instances of this class are hashable, and two instances of this class may be compared using "==" and "!=". (Hashability was added in version 2011.2.) Two objects are considered the same if the underlying OpenCL object is the same, as established by C pointer equality.

?

class pyopencl.Pipe(context, flags, packet_size, max_packets, properties)?

mem_flags 對于價值 旗幟 .

參數

properties -- 來自的鍵和值的序列 pipe_properties 已被接受 clCreatePipe() . 尾隨 0 是自動添加的,不需要包括在內。

此函數需要OpenCL 2或更新版本。

2020.3 新版功能.

get_pipe_info(param)?

pipe_info 對于價值 param .