我正在使用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,我仍然会遇到同样的问题。