cudaMemcpy question

Hi all,
I have a question regarding the cudaMemcpy. I always used to have an array and when i transferred the array from CPU to GPU, i transfered all of it.

However, now, i have the array of size 81 and i want to transfer elements from 9-18.

So my question is do i have to create a new array, copy elements 9-18 to it, and then transfer it to GPU, or is there a shortuct way to do:

cudaMemcpy(dev, a, “elements from 9-18”, ToDevice);

Thanks for any answers!

Maybe something like:

cudaMemcpy(dev, &a[9], 10 * sizeof(double), cudaMemcpyHostToDevice)

i.e. pass as reference the first element you wanna copy, and then the number of elements to copy.

I was able to do something like that only by defining an array of pointers like

double *dev_pos[nstr];

//then allocate each pointer 

for(is=0;is<nstr,is++)

{

cudaMalloc(&dev_pos[is],sizeof(double)*n);

kernel<<<  >>>(dev_pos[is]);

}

// and for copy 

cudeMemcpy(h_pos[ist],dev_pos[ist],sizeof(double)*n);