我正在使用 pyopencl 使用 GPU 来加速我的计算,目前我对以下问题感到困惑。
我使用以下代码在 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)
最后三行当然做同样的事情,即乘法。但是,前两个选项会导致以下错误(我当然注释掉了其他两个):
pyopencl.MemoryError: clEnqueueNDRangeKernel failed: mem object allocation failure
我只是迷失了为什么前两个选项会遇到分配错误。
笔记:
GPU:[0] pyopencl.Device 'Capeverde' on 'AMD Accelerated Parallel Processing' at 0x2a76d90
>>> pyopencl.VERSION
(2013, 1)
我知道复杂类型的处理不正确,但是如果将它们更改为 np.float32 我仍然会遇到同样的问题。