私は自分自身に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)がカーネルと一致することも確認しました。