【发布时间】:2014-10-01 14:22:03
【问题描述】:
我正在尝试开始使用 pyOpenCL 和 GPGPU。
对于下面的点积代码,我在 GPU 和 CPU 版本之间得到了相当不同的结果。我做错了什么?
~0.5% 的差异似乎很大,因为浮点错误是造成差异的原因。差异似乎随着数组大小而增加(~9e-8 与数组大小为 10000 的相对差异)。也许这是跨块组合结果的问题......?无论哪种方式,都让我感到不安。
我不知道这是否重要:我在 MacBook Air、Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz、Intel HD Graphics 5000 上运行它。
提前致谢。
import pyopencl as cl
import numpy
from pyopencl.reduction import ReductionKernel
import pyopencl.clrandom as cl_rand
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
dot = ReductionKernel( ctx, \
dtype_out = numpy.float32, \
neutral = "0", \
map_expr = "x[i]*y[i]", \
reduce_expr = "a+b", \
arguments = "__global const float *x, __global const float *y"
)
x = cl_rand.rand(queue, 100000000, dtype = numpy.float32)
y = cl_rand.rand(queue, 100000000, dtype = numpy.float32)
x_dot_y = dot(x,y).get() # GPU: array(25001304.0, dtype=float32)
x_dot_y_cpu = numpy.dot(x.get(), y.get()) # CPU: 24875690.0
print abs(x_dot_y_cpu - x_dot_y)/x_dot_y # 0.0050496689740063489
【问题讨论】:
标签: python numpy opencl pyopencl