CUDAカーネルをPythonで書く方法を教えてください。 AFAIK、numba.vectorizeは、ターゲットに基づいて、cuda、cpu、parallel(multi-cpus)で実行できます。しかしtarget = 'cuda'にはCUDAカーネルを設定する必要があります。あなたが初心者している場合は特に、CUDA-Python:PythonでCUDAカーネルを起動するにはどうすればいいですか(Numba 0.25)?
主な問題は、多くの例、インターネットで回答がに関連しているということですが NumbaProライブラリを非推奨なので、、更新されていないWIKIsなどに従うのは難しいです。
私が持っている:ここでは
- 最新のアナコンダ(V2)
- 最新Numba(v0.25)
- 最新のCUDAツールキット(V7)
は、私はエラーです取得:
numba.cuda.cudadrv.driver.CudaAPIError: 1 Call to cuLaunchKernel results in CU DA_ERROR_INVALID_VALUE
import numpy as np
import time
from numba import vectorize, cuda
@vectorize(['float32(float32, float32)'], target='cuda')
def VectorAdd(a, b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
start = time.time()
C = VectorAdd(A, B)
vector_add_time = time.time() - start
print "C[:5] = " + str(C[:5])
print "C[-5:] = " + str(C[-5:])
print "VectorAdd took for % seconds" % vector_add_time
if __name__ == '__main__':
main()
あなたが投稿したコードと間違って何もありません。私は間違いなくそれを実行することができます。私は2つの可能性を考えることができます - (a)あなたのnumbaのインストールは完全に壊れているか、(b)あなたのGPUにはほとんどメモリがありません。 GPUにメモリが不足している場合は、3つの128Mbベクトルをデバイスに割り当てます。 Nをもっと小さくして何が起こるかを見てみてください。 – talonmies
@talonmies、うわー、N = 1000万で働き、20万人で失敗します。 3 x 128 Mbの計算方法を教えてください。私はGeForce 820Mを持っています、そのメモリは2Gbです、私は – Novitoll
32000000 * 4 = 128Mbと信じています。また、GPUがディスプレイを実行していて、計算容量が多くない場合は、 – talonmies