我正在尝试自学CUDA。到目前为止这并不容易,但我也不会轻易放弃:)
我创建了一个非常简单的程序。它只是从 GPU 返回一个值。
import pycuda.driver as cuda
from pycuda.compiler import SourceModule
import pycuda.autoinit
import numpy as np
returnValue = np.zeros(1)
mod = SourceModule("""
__global__ void myVeryFirstKernel(float* returnValue) {
returnValue[0] = 8.0;
}
""")
func = mod.get_function('myVeryFirstKernel')
func(cuda.InOut(returnValue), block=(1024, 1, 1), grid=(1, 1))
print str(returnValue[0])
但是,我的程序打印的值是5.387879938e-315
. 那肯定不像8.0
。为什么 GPU 会返回错误的值?
我试过改变块大小,我认为这不应该(但谁知道)。我还检查了我发送的数据类型(float64)是否与我的内核匹配。