block vs grid vs tread the best way? how to set the pointer for each tread ?

block vs grid vs tread.

Lets say that I have a array of 1000000 point that contain random numbers like x,y,z …
And lets say that the limitation is 1000:1000:100 (int)
I want to add the 1 in the z to all the points
Naturally it needs to be in parallel what is the best way?

Like I have (1,2,3),(1,3,5) => (1,2,4),(1,5,6)

How to divide it to (Thread vs block vs grid)?
What’s it the use of the shared memory in this case?
How to set the pointer that each and every one tread take is on part? :"> :"> :">