Sunteți pe pagina 1din 43

15 de Octubre Crowne Plaza Ciudad de Mxico

Simposio Tcnico de Medicin y Automatizacin

ni.com/mexico

Arquitecturas de Programacin para Sistemas Multincleo


Financiero Embebido Mdico Cientfico Industrial

Aprovechando los procesadores multincleo en sus aplicaciones

National Instruments Confidential

El Rendimiento de los CPUs Ahora Proviene del Diseo Multincleo


Porqu multincleo?
Relojes ms rpidos = ms potencia y calor Respuesta: relojes ms lentos, pero mltiples ncleos

La guerra de los GHz ha sido reemplazada por la guerra de los N-ncleos CPUs con ms ncleos estn ms cerca de lo que creemos
Polaris: procesador experimental con 80 ncleos Larrabee: 16-32 ncleos, hyperthreaded a 4x

Diseos de Software Deben Adaptarse para Aprovecharlo


Quieren mejoras en el rendimiento?
Re-escriba el cdigo crtico para lograr paralelismo

Desafortunadamente esto es difcil!


La mayora de los programadores piensan de forma secuencial

Adems, todava estn los retos tradicionales


Eficiencia del cdigo Correccin del algoritmo

Nuevos Retos al Escribir Software en Paralelo


Es ms difcil conseguir eficiencias:
Afectacin por la memoria cach en los CPUs multincleo Limpiar el cach, coherencia, etc

Escalabilidad a mltiples ncleos Mantenerse productivo al mismo tiempo que lidia con la complejidad

Agenda
Ejecucin de threads y multitareas en LabVIEW Paralelismo de tareas Paralelismo de datos Pipelining Consideraciones y herramientas para depurar aplicaciones multincleo

Qu son Procesos y Threads?


Procesos
Cada programa en ejecucin es un proceso Los procesos cuentan con recursos necesarios para su ejecucin (memoria, manejadores de memoria, sockets, ventanas)

Threads
Threads son unidades dentro de un proceso que pueden ser ejecutadas (regularmente en paralelo) Todos los threads comparten los recursos del proceso

Aplicaciones Multithreading en LabVIEW


Automtico
Un algoritmo de agrupacin en LabVIEW automticamente asigna partes del cdigo a threads basado en su paralelismo

Manual
Forzar secciones del cdigo a ejecutar en un thread nico

Multithreading Automtico en LabVIEW


LabVIEW automticamente divide cada aplicacin en mltiples threads de ejecucin
thread thread thread

Multithreading en LabVIEW a Fondo


1. Se agrupan las instrucciones secuenciales del cdigo y sus dependencias 2. Se almacenan en una fila (queue) de ejecucin los diferentes segmentos de cdigo que pueden correr juntos 3. Si el diagrama de bloques contiene suficiente paralelismo, se ejecutar simultneamente en todos los threads del sistema 1 2 3

thread thread thread thread

Tcnicas de Programacin en Paralelo


Paralelismo de tareas y multithreading automtico Paralelismo de datos Pipelining y balanceo de etapas

Paralelismo de Tareas
1) Busque tareas que se pueden realizar en paralelo 2) Modifique el cdigo para que refleje ese paralelismo
Elimine la dependencia de datos LabVIEW automticamente identifica cdigo en paralelo y lo divide en mltiples threads!

Multithreading Automtico
LabVIEW divide un programa en mltiples threads (introducido originalmente en 1998 con LabVIEW 5.0) La mayora de los programas existentes corrern ms rpido en un sistema multincleo sin alteraciones al cdigo thread thread thread

Paralelismo Automtico en LabVIEW


Operaciones Simultneas

thread thread thread

DEMO

Threading Manual con Estructuras Temporizadas


El cdigo en estas estructuras se ejecuta en un thread independiente Los threads pueden tener una prioridad relativa Capacidad para definir el procesador o ncleo DEMO

Paralelismo de Datos
1) Busque conjuntos de datos que puedan ser procesados en dos o ms bloques independientes 2) Disee su cdigo: Divida los datos Procese los datos en paralelo Combine los resultados individuales

Ejemplo: Paralelismo de Datos


Conjunto de Datos

CPU Core

Procesamiento de Seales

Resultado

Ejemplo: Paralelismo de Datos


Conjunto de Datos
CPU Core CPU Core

Procesamiento de Seales Procesamiento de Seales Procesamiento de Seales Procesamiento de Seales

CPU Core CPU Core

Combinacin de Resultados

Ejemplo: Paralelismo de Datos en LabVIEW


Multiplicacin de Matrices

Desempeo del Paralelismo de Datos

DEMO

Pipelining
Motivacin: muchos programas contienen algoritmos secuenciales de mltiples pasos Implementar pipelining puede mejorar la tasa de rendimiento
2 4 2 4 3

Acquire
1

Filter Analyze Log


3

Acquire
1

Filter Analyze Log tiempo

t0

t3

t4

t7

Estrategia de Pipelining
CPU Core
Acquire

CPU Core

Filter

CPU Core

Analyze

CPU Core

Log

t0

t1

t2

t3

tiempo

Estrategia de Pipelining
CPU Core
Acquire Acquire

CPU Core

Filter

Filter

CPU Core

Analyze

Analyze

CPU Core

Log

Log

t0

t1

t2

t3

tiempo

Estrategia de Pipelining
CPU Core
Acquire Acquire Acquire Acquire

CPU Core

Filter

Filter

Filter

Filter

CPU Core

Analyze

Analyze

Analyze

Analyze

CPU Core

Log

Log

Log

Log

t0

t1

t2

t3

tiempo

Pipelining en LabVIEW: Registros de Corrimiento en Cascada


Secuencial Pipeline

Cada etapa se ejecuta en bloque Hay que tomar en consideracin la inicializacin y fin de variables/operaciones El cableado en el diagrama de bloques es poco natural

Pipelining en LabVIEW: Nodos de Retroalimentacin


Secuencial Pipeline

Cada etapa se ejecuta en bloque Hay que tomar en consideracin la inicializacin y fin de variables/operaciones Forma de cablear mucho ms natural

Pipelining en LabVIEW: Queues

Cada etapa corre con cierto grado de libertad Es fcil inicializar valores Muchos cables Las copias de los datos pueden llenar los queues

Balanceo de las Etapas del Pipeline


La ruta crtica es la etapa que ms tiempo tome Implementar pipelining con etapas no balanceadas puede no generar mejoras significativas en desempeo
Sin pipeline (tiempo total = 4 s)
Etapa 1 (3s) Etapa 2 (1s)

Con pipeline (tiempo total = 3 s): Mejora = 1.33X (no ideal para pipeline)
Etapa 1 (3s) Etapa 2 (1s)

DEMO

Diseando Aplicaciones Multincleo


Patrones de diseo ms comunes: Ciclo sencillo con tcnicas de programacin en paralelo Ciclos mltiples independientes Productor/consumidor (transferencia de datos va queues) Patrn de Diseo
Tcnicas Paralelas

Diseos con un Solo Ciclo


Utilice tcnicas de paralelismo (paralelismo de datos, paralelismo de tareas, pipelining) en un mismo ciclo La velocidad del ciclo se ve limitada a la etapa crtica

Diseo de Ciclos en Paralelo


Ciclos separado pueden ejecutar en paralelo Permite tener diferentes velocidades de ejecucin

Productor / Consumidor
Los queues funcionan como bfer para las transferencia de datos entre los ciclos El diseo de productor/consumidor es uno de los patrones ms usados PRODUCTOR
QUEUE 1

CONSUMIDOR

DEMO

Consideraciones y Herramientas para Depurar Aplicaciones Multincleo


VIs re-entrantes y ejecucin iluminada Sincronizacin de threads Trazado de la ejecucin Consideraciones en la transferencia de datos Distribucin fsica del procesador

VIs Re-entrantes
Todos los VIs en LabVIEW se pueden configurar como reentrantes Permite que cada subVI ocupe un lugar de memoria separado

Todos los subVIs que se ejecuten mltiples veces en paralelo deben de configurarse como re-entrantes

Ejecucin Iluminada
Permite visualizar secciones paralelas del cdigo durante su ejecucin Nota: esta opcin alenta la ejecucin, por lo que debe de apagarla una vez terminada la depuracin

Sincronizacin de Threads
No hay garanta de que el SO calendarizar los threads en la secuencia correcta sin primitivas de sincronizacin El orden de los eventos puede cambiar cada ejecucin debido a la calendarizacin de los threads
Primera ejecucin Segunda ejecucin Tercera ejecucin
Thread 1 Thread 2 Thread 3 Thread 2 Thread 3 Thread 1 Thread 3 Thread 1 Thread 2

Sincronizacin de Cdigo Usando Flujo de Datos


El paradigma de flujo de datos garantiza la sincronizacin thread
Las rutas de cdigo paralelo son sincronizadas y el orden de ejecucin es determinado por los cables en LabVIEW

thread

El flujo de datos natural en LabVIEW facilita la programacin multincleo

Sincronizacin en LabVIEW
Existen mecanismos de sincronizacin cuando se requiere control a ms bajo nivel:
Queues Notifiers Semaphores Rendezvous Occurrences

Trazado de la Ejecucin
En sistemas de tiempo real, se refiere a la capacidad de ver la actividad de cada thread a nivel del SO Se puede visualizar la actividad de cada thread por ncleo al seleccionar el CPU especfico

Consideraciones en la Transferencia de Datos


Tome en consideracin la arquitectura de la memoria en su sistema al programa sistemas multincleo Evite transferir conjuntos de datos muy grandes entre ncleos (relativo al tamao del cach) Transferencias muy pequeas de memoria pueden causar actualizaciones constantes del cach y reducir el rendimiento

Distribucin Fsica del Procesador


La distancia entre los procesadores y la calidad de las conexiones entre los mismos puede afectar considerablemente La transferencia de datos a travs del bus del sistema es ms lento que de la cach compartida
Core 0 Core 1 Core 2 Core 3

L2 Cache

L2 Cache System Memory

Ejemplos de Cach Compartida: Sistema Dual-Core con Dos Procesadores

System Bus

Fuente: Tian and Shih, Software Techniques for Shared-Cache Multi-Core Systems, Intel Software Network

Resumen: Estrategias para Paralelismo


Paralelismo de Tareas
Ideal para programas con funcionalidades independientes que tienen una mnima dependencia de datos o recursos compartidos

Paralelismo de Datos
Ideal para aplicaciones que trabajan con conjuntos de datos muy grandes que pueden ser divididos y manejados independientemente

Pipelining
Ideal para cdigo que repite varias etapas en forma secuencial con dependencia de datos entre las etapas

Recursos Adicionales
www.ni.com/multicore

S-ar putea să vă placă și