optimising the kernel partitioning scheme so buffers on the device are
allocated only once and then resused for storing the results and the
input data. This avoids the overhead of allocating device memory each
time a new kernel is started...
taking care of some warnings in the cuPrint header provided by Nvidia