The definition of each communication pattern (map, scatter, collection, etc.) varies slightly from one language / environment / context to another, but since I followed the same Udacity course, I will try to explain this term as I understand it in the context of the course :
The Map operation computes each output element as a function of its corresponding input element, that is:
output[tid] = foo(input[tid]);
The Gather template calculates each output element as a function of one or more (usually more) input elements that are not necessarily corresponding (as a rule, these are elements from a neighborhood). For instance:
output[tid] = (input[tid-1] + input[tid+1]) / 2;
Finally, the Scatter operation has each input element contributing to one or more (again, usually more) output elements. For instance,
atomicAdd( &(output[tid-1]), input[tid]); atomicAdd( &(output[tid]), input[tid]); atomicAdd( &(output[tid+1]), input[tid]);
The example given in the question is clearly not . Map, because each output is calculated from input in another place.
In addition, it is difficult to understand how the same example can be a scatter, because each input element calls only one record on the output, but it really is a scatter, because each input causes a record on the output, the location of which is determined by the input.
In other words, each CUDA stream processes the input element at the location associated with its tid (stream identifier number), and computes where to write the result. Most likely, the spread will be recorded in several places, and not just in one, so this is a specific case, which can also be called differently.