I've seen two different ways of accessing a vector and I'm not quite sure of the difference between them. Let's say we have a float4 vector. Then in the code I can say:
vector[global_id] = global_id; // assume global_id = 0
and then in other places I see
vector[global_id].x = global_id;
vector[global_id].y = globa_id;
Will these two do the same thing? If so, is there any reason to use the second method if we write the same data to all locations?
Also, if we have something like the above:
// assume vector is a 16 element array
vector[local_id] = local_id // assume local_id = 0
Will this write elements[0-3] with local_id? And then thread 1 writes elements[4-7]?
Or would we have to manually map which elements are executed by each thread?
vector[local_id + X] = local_id // where X is basically making it a loop, in which case we wouldn't be executing 4 items at a time if I'm not mistaken.