CUDA, Can you update "CPU's value" from kernel?

So I am creating a simulation using CUDA, I got all the kernel code and other stuff finished, but when I run it it’s kinda slow. Because CUDA needs to copy all the value from global memory(array data) back to host memory and the data is quite huge like 1GB, which slow down my simulation. And I was wondering if I could just update "CPU’s value from the kernel rather than using for loop in CPU to “read” all the data in the array.

pseudocode
kernel:
gobal void simulation(int *in, int *out)
{ int i = blockIdx.x * blockDim.x + threadIdx.x;
int newvalue = “some calculation” * i * in;

    updatecpuvalue("CPU address " ,  newvalue);

}
instead of
CPU:
for(int i =0; i < size; i++)
{
finalsimulation(arrayfromgpu[i]);

}
Because it will take forever to process it for the cpu.

Sorry for my bad English and post style, its my second post, I am still getting use to the forum.

You can update host memory directly if you use pinned memory.