值得注意的细节
首先是尝试将 guvectorize 与以下函数一起使用。我正在传递一堆 numpy 数组并尝试使用它们在两个数组之间进行乘法运算。如果使用 cuda 以外的目标运行,则此方法有效。但是,当切换到 cuda 时,会导致未知错误:
文件“C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\decorators.py”,>第 82 行,在 jitwrapper 中 debug=debug)
TypeError: init () 得到了一个意外的关键字参数 'debug'
在按照我可以从这个错误中找到的所有内容之后,我除了死胡同什么也没找到。我猜这是一个非常简单的修复,我完全没有,但哦,好吧。还应该说,此错误仅在运行一次并由于内存过载而崩溃后才会发生。
os.environ["NUMBA_ENABLE_CUDASIM"] = "1"
os.environ["CUDA_VISIBLE_DEVICES"] = "10DE 1B06 63933842"
...
Run Code Online (Sandbox Code Playgroud)
所有的数组都是 numpy
@guvectorize(['void(int64, float64[:,:], float64[:,:], float64[:,:,:],
int64, int64, float64[:,:,:])'], '(),(m,o),(m,o),(n,m,o),(),() -> (n,m,o)',
target='cuda', nopython=True)
def cVestDiscount (ed, orCV, vals, discount, n, rowCount, cv):
for as_of_date in range(0,ed):
for ID in range(0,rowCount):
for num …Run Code Online (Sandbox Code Playgroud) 我试图将比 VRAM 多的数据传递到我的 GPU 中,这导致了以下错误。 CudaAPIError: Call to cuMemAlloc results in CUDA_ERROR_OUT_OF_MEMORY
我创建了这个代码来重现这个问题:
from numba import cuda
import numpy as np
@cuda.jit()
def addingNumbers (big_array, big_array2, save_array):
i = cuda.grid(1)
if i < big_array.shape[0]:
for j in range (big_array.shape[1]):
save_array[i][j] = big_array[i][j] * big_array2[i][j]
big_array = np.random.random_sample((1000000, 500))
big_array2 = np.random.random_sample((1000000, 500))
save_array = np.zeros(shape=(1000000, 500))
arraysize = 1000000
threadsperblock = 64
blockspergrid = (arraysize + (threadsperblock - 1))
d_big_array = cuda.to_device(big_array)
d_big_array2 = cuda.to_device(big_array2)
d_save_array = cuda.to_device(save_array)
addingNumbers[blockspergrid, threadsperblock](d_big_array, …Run Code Online (Sandbox Code Playgroud)