内存管理

numba.cuda.to_device(obj, stream=0, copy=True, to=None)[源代码]

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

要将 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

复制设备->主机:

hary = d_ary.copy_to_host()

要将设备->主机复制到现有数组中:

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.float64, strides=None, order='C', stream=0)[源代码]

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

numba.cuda.device_array_like(ary, stream=0)[源代码]

使用数组中的信息调用 device_array()

numba.cuda.pinned_array(shape, dtype=np.float64, strides=None, order='C')[源代码]

分配一个带有固定(页锁)缓冲区的 ndarray。类似于 np.empty()

numba.cuda.pinned_array_like(ary)[源代码]

使用数组中的信息调用 pinned_array()

numba.cuda.mapped_array(shape, dtype=np.float64, strides=None, order='C', stream=0, portable=False, wc=False)[源代码]

分配一个映射的 ndarray,其缓冲区被固定并在设备上进行映射。类似于 np.empty()。

参数:
  • portable – 一个布尔标志,允许分配的设备内存可用于多个设备。

  • wc – 一个布尔标志,用于启用writecombined分配,这种分配方式在主机写入和设备读取时更快,但在主机写入和设备写入时较慢。

numba.cuda.mapped_array_like(ary, stream=0, portable=False, wc=False)[源代码]

使用数组中的信息调用 mapped_array()

numba.cuda.managed_array(shape, dtype=np.float64, strides=None, order='C', stream=0, attach_global=True)[源代码]

分配一个由缓冲区管理的 np.ndarray。类似于 np.empty()。

托管内存支持 Linux / x86 和 PowerPC,在 Windows 和 Linux / AArch64 上被视为实验性功能。

参数:

attach_global – 一个标志,指示是否全局附加。全局附加意味着内存可以从任何设备上的任何流访问。如果 False ,附加是 主机 ,并且内存只能由计算能力为6.0及以上的设备访问。

numba.cuda.pinned(*arylist)[源代码]

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

numba.cuda.mapped(*arylist, **kws)[源代码]

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

设备对象

class numba.cuda.cudadrv.devicearray.DeviceNDArray(shape, strides, dtype, stream=0, gpu_data=None)[源代码]

一种在GPU上的数组类型

copy_to_device(ary, stream=0)

ary 复制到 self

如果 ary 是 CUDA 内存,执行设备到设备的传输。否则,执行主机到设备的传输。

copy_to_host(ary=None, stream=0)

self 复制到 ary ,或者如果 aryNone 则创建一个新的 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连续的,则返回真。

is_f_contiguous()[源代码]

如果数组是Fortran连续的,则返回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)

将数组分割成大小为 section 的相等部分。如果数组不能被等分,最后一个部分将会较小。

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)

self 复制到 ary ,或者如果 aryNone 则创建一个新的 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, gpu_data=None)[源代码]

使用 CUDA 映射内存的主机数组。

copy_to_device(ary, stream=0)

ary 复制到 self

如果 ary 是 CUDA 内存,执行设备到设备的传输。否则,执行主机到设备的传输。

copy_to_host(ary=None, stream=0)

self 复制到 ary ,或者如果 aryNone 则创建一个新的 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)

将数组分割成大小为 section 的相等部分。如果数组不能被等分,最后一个部分将会较小。