pycoda int型変数伝達

630 ワード

pycodaを用いてGPUプログラミングを行う場合,パラメータ変換と伝達は不可欠な一歩である.通常、配列転送では、メモリの割り当てと変換を一般的な方法で行うことができます.たとえば、次のようにします.
import numpy
a = numpy.random.randn(4,4)
a = a.astype(numpy.float32)
a_gpu = cuda.mem_alloc(a.nbytes)
cuda.memcpy_htod(a_gpu, a)

以上の手順で配列伝達を実現できますが、変数タイプがfloat 32というcudaに変換されるのが最も扱いやすいタイプであることに注意してください.配列に加えてint型変数を渡す必要がある場合もありますが、この場合は上の方法で行います.
a=1
a_gpu = cuda.mem_alloc(a.nbytes)

エラーが表示されます:AttributeError:'int'object has no attribute'nbytes'この場合に必要な正しい操作は、次のとおりです.
a=np.int32(a)

これにより得られたaはcudaコア関数に直接伝達され,他の操作を必要としない.