En arquitectura de computadores, la taxonomía de Flynn clasifica a las mismas en función del número de instrucciones que se pueden ejecutar de forma concurrente y el número de datos por instrucción.
Una de las posibilidades es la arquitectura SIMD (Single Instruction Multiple Data), que explota el paralelismo a nivel de datos, puesto que cada instruccion se puede ejecutar simultaneamente sobre un conjunto amplio de datos.
Las GPU (Graphics Processing Unit) son procesadores desarrollados para el procesamiento gráico que implementan una arquitectura vectorial. Si queremos utilizar de esta potencia para nuestros programas paralelos, disponemos de CUDA y OpenCL.
CUDA (Compute Unified Device Architecturees) es el sofware que ofrece NVIDIA para explotar la potencia de las GPUs en las aplicaciones programadas por el usuario.
OpenCL (Open Computing Language) es la alternativa libre a CUDA. No solo pretende trabajar con GPUs sino también con CPUs. La arquitectura OpenCL se muestra en el siguiente gráfico: