Если вы можете разделить свою функцию так, чтобы вы могли работать с чанками на карте, вы должны рассмотреть использование потоков (cudaStream_t).
Если вы планируете загрузки и выполнения ядра в нескольких потоках, вы можете иметь один поток данных загрузки, в то время как другой выполняет ядро на карте, тем самым скрывая часть времени передачи ваших данных при выполнении ядра.
Вам нужно объявить буфер с тем размером, который равен размеру вашего чанка, сколько бы вы ни объявляли потоков (насколько я знаю, до 16, для вычислительных возможностей 1.x).