4.3。内存管理
原文: http://numba.pydata.org/numba-doc/latest/cuda-reference/memory.html
numba.cuda.to_device(obj, stream=0, copy=True, to=None)
将 numpy ndarray 或结构化标量分配并传输到设备。
要将 host->设备复制为 numpy 数组:
ary = np.arange(10)
d_ary = cuda.to_device(ary)
要将传输排入队列:
stream = cuda.stream()
d_ary = cuda.to_device(ary, stream=stream)
得到的d_ary
是DeviceNDArray
。
要复制 device->主机:
hary = d_ary.copy_to_host()
要将 device->主机复制到现有数组:
ary = np.empty(shape=d_ary.shape, dtype=d_ary.dtype)
d_ary.copy_to_host(ary)
要将传输排入队列:
hary = d_ary.copy_to_host(stream=stream)
numba.cuda.device_array(shape, dtype=np.float, strides=None, order='C', stream=0)
分配一个空设备 ndarray。与numpy.empty()
类似。
numba.cuda.device_array_like(ary, stream=0)
使用数组中的信息调用 cuda.devicearray()。
numba.cuda.pinned_array(shape, dtype=np.float, strides=None, order='C')
使用固定(页面锁定)的缓冲区分配 np.ndarray。与 np.empty()类似。
numba.cuda.mapped_array(shape, dtype=np.float, strides=None, order='C', stream=0, portable=False, wc=False)
使用固定并映射到设备的缓冲区分配映射的 ndarray。与 np.empty()相似
| 参数: |
- 便携式 - 一个布尔标志,允许分配的设备内存在多个设备中使用。
- wc - 一个布尔标志,用于启用写组合分配,主机写入和设备读取速度更快,但主机写入速度较慢,设备写入速度较慢。
| | --- | --- |
numba.cuda.pinned(*arylist)
用于临时固定主机 ndarray 序列的上下文管理器。
numba.cuda.mapped(*arylist, **kws)
用于临时映射主机 ndarray 序列的上下文管理器。
4.3.1。设备对象
class numba.cuda.cudadrv.devicearray.DeviceNDArray(shape, strides, dtype, stream=0, writeback=None, gpu_data=None)
GPU 上阵列类型
copy_to_device(ary, stream=0)
将 ary
复制到 self
。
如果 ary
是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。
copy_to_host(ary=None, stream=0)
如果ary
为None
,则将self
复制到ary
或创建新的 Numpy ndarray。
如果给出了 CUDA stream
,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。
始终返回主机阵列。
例:
import numpy as np
from numba import cuda
arr = np.arange(1000)
d_arr = cuda.to_device(arr)
my_kernel[100, 100](d_arr)
result_array = d_arr.copy_to_host()
is_c_contiguous()
如果数组是 C-contiguous,则返回 true。
is_f_contiguous()
如果数组是 Fortran-contiguous,则返回 true。
ravel(order='C', stream=0)
在不改变其内容的情况下展平阵列,类似于 numpy.ndarray.ravel()
。
reshape(*newshape, **kws)
与 numpy.ndarray.reshape()
类似,重塑阵列而不改变其内容。例:
d_arr = d_arr.reshape(20, 50, order='F')
split(section, stream=0)
将数组拆分为部分
大小的相等分区。如果阵列不能平均分割,则最后一部分将更小。
class numba.cuda.cudadrv.devicearray.DeviceRecord(dtype, stream=0, gpu_data=None)
GPU 上的记录类型
copy_to_device(ary, stream=0)
将 ary
复制到 self
。
如果 ary
是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。
copy_to_host(ary=None, stream=0)
如果ary
为None
,则将self
复制到ary
或创建新的 Numpy ndarray。
如果给出了 CUDA stream
,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。
始终返回主机阵列。
例:
import numpy as np
from numba import cuda
arr = np.arange(1000)
d_arr = cuda.to_device(arr)
my_kernel[100, 100](d_arr)
result_array = d_arr.copy_to_host()
class numba.cuda.cudadrv.devicearray.MappedNDArray(shape, strides, dtype, stream=0, writeback=None, gpu_data=None)
使用 CUDA 映射内存的主机阵列。
copy_to_device(ary, stream=0)
将 ary
复制到 self
。
如果 ary
是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。
copy_to_host(ary=None, stream=0)
如果ary
为None
,则将self
复制到ary
或创建新的 Numpy ndarray。
如果给出了 CUDA stream
,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。
始终返回主机阵列。
例:
import numpy as np
from numba import cuda
arr = np.arange(1000)
d_arr = cuda.to_device(arr)
my_kernel[100, 100](d_arr)
result_array = d_arr.copy_to_host()
split(section, stream=0)
将数组拆分为部分
大小的相等分区。如果阵列不能平均分割,则最后一部分将更小。