The library cudapp is the basis of SimplePyCuda, a simple wrapper for CUDA functions in Python. The idea is to workaround the issues regarding Context in old CUDA versions, that persist on PyCuda.
No need to pre-compile the project.
Install from pip (https://pypi.org/project/simplepycuda/):
pip install simplepycuda
In Python:
import ctypes import numpy from simplepycuda import SimplePyCuda, SimpleSourceModule, grid, block def classicExample(cuda): a = numpy.random.randn(4,4) a = a.astype(numpy.float32) print a a_gpu = cuda.mem_alloc(a.nbytes) cuda.memcpy_htod(a_gpu, a) mod = SimpleSourceModule(""" #include<stdio.h> __global__ void doublify ( float* a ) { int idx = threadIdx.x + threadIdx.y*4; a[idx] *= 2; //printf("oi=%d\\n",idx); } """) func = mod.get_function("doublify") # TODO: this next line will be made automatically in get_function method... just need a few more time :) func.argtypes = [ctypes.c_void_p, grid, block, ctypes.c_ulong, ctypes.c_ulong] func(a_gpu, grid(1,1), block(4,4,1), 0, 0) cuda.memcpy_dtoh(a, a_gpu) cuda.deviceSynchronize() print a cuda.free(a_gpu) # this is not necessary in PyCUDA print "Finished" def main(): cuda = SimplePyCuda() classicExample(cuda) return 0
MIT License - Igor Machado Coelho and Rodolfo Pereira Araujo (2017)