In data parallelism, data is divided into data elements that a processor can process in parallel. Several different processors simultaneously read and process different data elements.
The data must be in data structures that processors can read and write in
parallel.
An example of a data parallel application is rendering three-dimensional
graphics. The generated pixels are independent so the computations required to generate them
can be performed in parallel. This type of parallelism is very fine-grained and can involve
hundreds of thousands of active threads simultaneously.
OpenCL is primarily used for data parallel processing.