4.3。内存管理

原文: http://numba.pydata.org/numba-doc/latest/cuda-reference/memory.html

  1. numba.cuda.to_device(obj, stream=0, copy=True, to=None)

将 numpy ndarray 或结构化标量分配并传输到设备。

要将 host->设备复制为 numpy 数组:

  1. ary = np.arange(10)
  2. d_ary = cuda.to_device(ary)

要将传输排入队列:

  1. stream = cuda.stream()
  2. d_ary = cuda.to_device(ary, stream=stream)

得到的d_aryDeviceNDArray

要复制 device->主机:

  1. hary = d_ary.copy_to_host()

要将 device->主机复制到现有数组:

  1. ary = np.empty(shape=d_ary.shape, dtype=d_ary.dtype)
  2. d_ary.copy_to_host(ary)

要将传输排入队列:

  1. hary = d_ary.copy_to_host(stream=stream)
  1. numba.cuda.device_array(shape, dtype=np.float, strides=None, order='C', stream=0)

分配一个空设备 ndarray。与numpy.empty()类似。

  1. numba.cuda.device_array_like(ary, stream=0)

使用数组中的信息调用 cuda.devicearray()。

  1. numba.cuda.pinned_array(shape, dtype=np.float, strides=None, order='C')

使用固定(页面锁定)的缓冲区分配 np.ndarray。与 np.empty()类似。

  1. numba.cuda.mapped_array(shape, dtype=np.float, strides=None, order='C', stream=0, portable=False, wc=False)

使用固定并映射到设备的缓冲区分配映射的 ndarray。与 np.empty()相似

| 参数: |

  • 便携式 - 一个布尔标志,允许分配的设备内存在多个设备中使用。
  • wc - 一个布尔标志,用于启用写组合分配,主机写入和设备读取速度更快,但主机写入速度较慢,设备写入速度较慢。

    | | —- | —- |

  1. numba.cuda.pinned(*arylist)

用于临时固定主机 ndarray 序列的上下文管理器。

  1. numba.cuda.mapped(*arylist, **kws)

用于临时映射主机 ndarray 序列的上下文管理器。

4.3.1。设备对象

  1. class numba.cuda.cudadrv.devicearray.DeviceNDArray(shape, strides, dtype, stream=0, writeback=None, gpu_data=None)

GPU 上阵列类型

  1. copy_to_device(ary, stream=0)

将 <cite>ary</cite> 复制到 <cite>self</cite> 。

如果 <cite>ary</cite> 是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。

  1. copy_to_host(ary=None, stream=0)

如果aryNone,则将self复制到ary或创建新的 Numpy ndarray。

如果给出了 CUDA stream,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。

始终返回主机阵列。

例:

  1. import numpy as np
  2. from numba import cuda
  3. arr = np.arange(1000)
  4. d_arr = cuda.to_device(arr)
  5. my_kernel[100, 100](d_arr)
  6. result_array = d_arr.copy_to_host()
  1. is_c_contiguous()

如果数组是 C-contiguous,则返回 true。

  1. is_f_contiguous()

如果数组是 Fortran-contiguous,则返回 true。

  1. ravel(order='C', stream=0)

在不改变其内容的情况下展平阵列,类似于 numpy.ndarray.ravel()

  1. reshape(*newshape, **kws)

numpy.ndarray.reshape() 类似,重塑阵列而不改变其内容。例:

  1. d_arr = d_arr.reshape(20, 50, order='F')
  1. split(section, stream=0)

将数组拆分为<cite>部分</cite>大小的相等分区。如果阵列不能平均分割,则最后一部分将更小。

  1. class numba.cuda.cudadrv.devicearray.DeviceRecord(dtype, stream=0, gpu_data=None)

GPU 上的记录类型

  1. copy_to_device(ary, stream=0)

将 <cite>ary</cite> 复制到 <cite>self</cite> 。

如果 <cite>ary</cite> 是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。

  1. copy_to_host(ary=None, stream=0)

如果aryNone,则将self复制到ary或创建新的 Numpy ndarray。

如果给出了 CUDA stream,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。

始终返回主机阵列。

例:

  1. import numpy as np
  2. from numba import cuda
  3. arr = np.arange(1000)
  4. d_arr = cuda.to_device(arr)
  5. my_kernel[100, 100](d_arr)
  6. result_array = d_arr.copy_to_host()
  1. class numba.cuda.cudadrv.devicearray.MappedNDArray(shape, strides, dtype, stream=0, writeback=None, gpu_data=None)

使用 CUDA 映射内存的主机阵列。

  1. copy_to_device(ary, stream=0)

将 <cite>ary</cite> 复制到 <cite>self</cite> 。

如果 <cite>ary</cite> 是 CUDA 内存,请执行设备到设备传输。否则,执行主机到设备传输。

  1. copy_to_host(ary=None, stream=0)

如果aryNone,则将self复制到ary或创建新的 Numpy ndarray。

如果给出了 CUDA stream,则传输将作为给定流的一部分异步进行。否则,传输是同步的:复制完成后函数返回。

始终返回主机阵列。

例:

  1. import numpy as np
  2. from numba import cuda
  3. arr = np.arange(1000)
  4. d_arr = cuda.to_device(arr)
  5. my_kernel[100, 100](d_arr)
  6. result_array = d_arr.copy_to_host()
  1. split(section, stream=0)

将数组拆分为<cite>部分</cite>大小的相等分区。如果阵列不能平均分割,则最后一部分将更小。