我正在使用pyopencl加速我的計算使用GPU,並在目前神祕的下列問題。pyopencl分配錯誤與for循環中的簡單乘法
進出口使用下面的代碼
import numpy as np
import pyopencl as cl
import pyopencl.array as cl_array
from pyopencl.elementwise import ElementwiseKernel
ctx = cl.create_some_context(0)
queue = cl.CommandQueue(ctx)
multiply = ElementwiseKernel(ctx,
"float *x, float *y, float *z",
"z[i] = x[i] * y[i]",
"multiplication")
x = cl_array.arange(queue, 1000000, dtype=np.complex64)
y = cl_array.arange(queue, 1000000, dtype=np.complex64)
z = cl_array.empty_like(x)
for n in range(10000):
z = x*y
multiply(x.real, y.real, z.real)
multiply(x, y, z)
做兩個陣列的簡單乘法在for循環中的最後三個行做的當然就是同樣的事情乘法。然而,前兩個選項導致以下錯誤(我註釋掉當然其他兩個):
pyopencl.MemoryError: clEnqueueNDRangeKernel failed: mem object allocation failure
我只是失去了爲什麼前兩個選項正在運行到分配錯誤。
NOTES:
GPU:[0] pyopencl.Device '佛得角' 上 'AMD加速並行處理' 在0x2a76d90
>>> pyopencl.VERSION
(2013, 1)
我知道複雜類型沒有被正確處理,但如果你把它們改成np.float32,我仍然會遇到同樣的問題。