You are on page 1of 5

Qu es la programacin paralela?

La programacin paralela es el uso de varios procesadores trabajando en conjunto


para dar solucin a una tarea en comn, lo que hacen es que se dividen el trabajo
y cada procesador hace una porcin del problema al poder intercambiar datos por
una

red

de

interconexin

travs

de

memoria.

La programacin paralela permite resolver problemas que no caben en un solo


procesador y que no se resuelven en un tiempo razonable, se pueden ejecutar
problemas

con

mayor

complejidad

ms

rpidamente.

El rendimiento de las computadoras tradicionales secuenciales est saturndose


porque las aplicaciones de hoy en da necesitan realizar trabajo ms complejo, por
lo cual la solucin es tener varios procesadores en sistemas paralelos, al as
obtener ganancia de eficiencia siempre y cuando los algoritmos se diseen
adecuadamente.
Lenguajes para computadoras paralelos son flexibles para permitir una
implementacin eficiente y ser an ms fciles para programar.
Con la introduccin de un nuevo paradigma de programacin como lo es el
cmputo paralelo surge tambin la idea de cmo solucionar la programacin de
computadoras paralelas, ya que la idea del cmputo paralelo sugiere la
implementacin de arquitecturas paralelas, algoritmos paralelos y lenguajes de
programacin paralelos.
En nuestros das las arquitecturas paralelas estn en su mayor auge, con la
introduccin de procesadores Multicore, y que no decir de los algoritmos paralelos,
que desde la propuesta de ste nuevo paradigma se han venido desarrollando, sin
embargo, en nuestros das no es muy posible hablar de lenguajes totalmente
paralelizables, o un compilador que de un programa secuencial nos d como
resultado un programa paralelo.

Los lenguajes de programacin concurrentes, bibliotecas, APIs y modelos de


programacin paralela han sido creados para la programacin de computadores
paralelos. Estos generalmente se pueden dividir en clases basadas en las
suposiciones que se hacen sobre la arquitectura de memoria subyacente:
compartida, distribuida, o compartida-distribuida. Los lenguajes de programacin
de memoria compartida se comunican mediante la manipulacin de variables en la
memoria compartida. En la arquitectura con memoria distribuida se utiliza el paso
de mensajes. POSIX Threads y OpenMP son dos de las API ms utilizadas con la
memoria compartida, mientras que Message Passing Interface (MPI) (Interfaz de
Paso de Mensajes) es el API ms utilizado en los sistemas de paso de mensajes.
El concepto valor futuro es muy utilizado en la programacin de programas
paralelos, donde una parte de un programa promete proporcionar un dato
requerido a otra parte del programa en un tiempo futuro.
Dos tcnicas bsicas:
pipeline:

Un pipeline es un conjunto de elementos procesadores de datos conectados en


serie, en el cual la salida de un elemento est conectado en la entrada del que
sigue. Los elementos de esta tcnica son ejecutados en paralelo, debe haber un
tipo

buffer

insertando

los

elementos.

Aplicaciones de pipelines, consiste en mltiples procesos que estn ordenados de


tal forma que el flujo de salida de un proceso se alimenta de la entrada del
siguiente

proceso.

Replicacin asincrnica

Tecnologa en la que una vez que los datos estn escritos en el sitio de
almacenamiento primario, los nuevos datos a este sitio son aceptados, sin tener
que esperar que el sitio de almacenamiento secundario o remoto termine su
escritura.
Espero que mi explicacin les sirva, si tienen algn comentario acerca de esta
entrada, espero me digan ya que estoy abierto a cualquier error.

Lenguajes de programacin en paralelo

POSIX Threads (Pthreads)


OpenMP (Open Multi-Processing)
CUDA (Compute Unified Device Architecture)
OpenCL (Open Compute Language)

POSIX Threads
Thread (Hilo): es un conjunto independiente de instrucciones que
es ejecutado de manera independiente
Un programa puede tener mltiples threads
Implementa un modelo de programacin MIMD
Todos los threads comparten un area de memoria del proceso
principal

Pthreads fue creado en un inicio para dar soporte a la


multiprogramacin en sistemas operativos, no para
programacion en dispositivos multi-core
Con la aparicion de procesadores multi-core, cada thread puede
ser ejecutado por un core diferente (processor affinity)

OpenMP (Open Multi-Processing)


Es un modelo SIMD
Esta compuesto por un conjunto de directivas (#PRAGMA) que
indican al compilador que es un area a paralelizar
Adicionalmente posee variables que permiten definir parmetros
de la paralelizar (ej. el numero de threads a crear)
El momento de la ejecucion, el runtime crea tantos threads como
se haya especificado
Pasa asociar threads a cores, se usa el mismo concepto de
processor affinity

CUDA (Compute Unified Device Architecture)

Estndar propietario de Nvidia


Programacin de Dispositivos Many-core (GPU)
Es SIMT (Single Instruction Multiple Thread)
Variacion de SIMD
Necesita miles de threads para obtener optimo rendimiento
Esconde la latencia de memoria, no la reduce como en el caso
de los CPUs

OpenCL (Open Compute Language)


Estandar universal desarrollado por Khronos
Consorcio: Nvidia, Intel, AMD, Apple, entre otros
Tiene una filosofia de programacion similar a CUDA
Define unicamente el API, la implementacion queda para los
fabricantes de HW
Problema: Interoperabilidad entre plataformas no es posible
hasta este momento

No totalmente optimizado para las diferentes plataformas

You might also like