15 de Octubre Crowne Plaza - acohailab.webcindario.com

43
15 de Octubre Crowne Plaza Ciudad de México ni.com/mexico Simposio Técnico de Medición y Automatización

Transcript of 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Page 1: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

15 de Octubre

Crowne Plaza

Ciudad de México

ni.com/mexico

Simposio Técnico de

Medición y Automatización

Page 2: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Arquitecturas de Programación

para Sistemas Multinúcleo

EmbebidoFinanciero Médico Científico Industrial

National Instruments Confidential

Aprovechando los procesadores multinúcleo en sus aplicaciones

Page 3: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

El Rendimiento de los CPUs Ahora

Proviene del Diseño Multinúcleo

• ¿Porqué multinúcleo?

– Relojes más rápidos = más potencia y calor

– Respuesta: relojes más lentos, pero múltiples núcleos

• La guerra de los GHz ha sido reemplazada por la • La guerra de los GHz ha sido reemplazada por la

guerra de los N-núcleos

• CPUs con más núcleos están más cerca de lo que

creemos

– Polaris: procesador experimental con 80 núcleos

– Larrabee: 16-32 núcleos, hyperthreaded a 4x

Page 4: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Diseños de Software Deben

Adaptarse para Aprovecharlo

• ¿Quieren mejoras en el rendimiento?

– Re-escriba el código crítico para lograr paralelismo

• Desafortunadamente… ¡esto es difícil!

– La mayoría de los programadores piensan de forma

“secuencial”

• Además, todavía están los retos tradicionales

– Eficiencia del código

– Corrección del algoritmo

Page 5: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Nuevos Retos al Escribir Software en

Paralelo

• Es más difícil conseguir eficiencias:

– Afectación por la memoria caché en los CPUs

multinúcleo

– Limpiar el caché, coherencia, etc– Limpiar el caché, coherencia, etc

• Escalabilidad a múltiples núcleos

• Mantenerse productivo al mismo tiempo

que lidia con la complejidad

Page 6: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Agenda

• Ejecución de threads y multitareas en

LabVIEW

• Paralelismo de tareas

• Paralelismo de datos• Paralelismo de datos

• Pipelining

• Consideraciones y herramientas para

depurar aplicaciones multinúcleo

Page 7: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

¿Qué son Procesos y Threads?

• Procesos

– Cada programa en ejecución es un proceso

– Los procesos cuentan con recursos necesarios para su ejecución

(memoria, manejadores de memoria, sockets, ventanas)

• Threads• Threads

– Threads son unidades dentro

de un proceso que pueden ser

ejecutadas (regularmente en

paralelo)

– Todos los threads comparten

los recursos del proceso

Page 8: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Aplicaciones Multithreading en

LabVIEW• Automático

– Un algoritmo de agrupación en LabVIEW

automáticamente asigna partes del código a

threads basado en su paralelismo

• Manual

– Forzar secciones del código a ejecutar en un

thread único

8

Page 9: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Multithreading Automático en

LabVIEW

• LabVIEW automáticamente divide cada

aplicación en múltiples threads de

ejecución

threadthread

thread

thread

Page 10: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Multithreading en LabVIEW – a Fondo1. Se agrupan las instrucciones secuenciales del código y sus

dependencias

2. Se almacenan en una fila (queue) de ejecución los diferentes

segmentos de código que pueden correr juntos

3. Si el diagrama de bloques contiene suficiente paralelismo, se

ejecutará simultáneamente en todos los threads del sistema

thread

thread

thread

thread

21 3

ejecutará simultáneamente en todos los threads del sistema

Page 11: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Técnicas de Programación en Paralelo

• Paralelismo de tareas y

multithreading automático

• Paralelismo de datos• Paralelismo de datos

• Pipelining y balanceo de

etapas

Page 12: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Paralelismo de Tareas

1) Busque tareas que se pueden realizar en

paralelo

2) Modifique el código para que refleje ese

paralelismoparalelismo

• Elimine la dependencia de datos

• ¡LabVIEW automáticamente identifica código en

paralelo y lo divide en múltiples threads!

Page 13: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

• LabVIEW divide un programa en múltiples threads

(introducido originalmente en 1998 con LabVIEW 5.0)

• La mayoría de los programas existentes correrán más

rápido en un sistema multinúcleo sin alteraciones al

código

Multithreading Automático

threadthread

thread

thread

Page 14: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Paralelismo Automático en LabVIEW

thread

thread

Operaciones Simultáneas

thread

thread

DEMO

Page 15: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Threading Manual con Estructuras

Temporizadas

• El código en estas

estructuras se ejecuta

en un thread

independiente

• Los threads pueden • Los threads pueden

tener una prioridad

relativa

• Capacidad para

definir el procesador

o núcleo

DEMO

Page 16: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

1) Busque conjuntos de datos que puedan ser

procesados en dos o más bloques independientes

2) Diseñe su código:

Paralelismo de Datos

2) Diseñe su código:

• Divida los datos

• Procese los datos en paralelo

• Combine los resultados individuales

Page 17: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Ejemplo: Paralelismo de Datos

Resultado

Conjunto de Datos

Procesamiento de ResultadoCPU CoreProcesamiento de

Señales

Page 18: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Co

mb

ina

ció

n d

e R

esu

lta

do

s

Procesamiento de Señales

Conjunto de Datos

CPU Core

CPU Core Procesamiento de Señales

Ejemplo: Paralelismo de Datos

Co

mb

ina

ció

n d

e R

esu

lta

do

s

CPU Core

CPU Core

Procesamiento de Señales

Procesamiento de Señales

Page 19: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Ejemplo: Paralelismo de Datos en

LabVIEW

Multiplicación de Matrices

Page 20: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Desempeño del Paralelismo de Datos

DEMO

Page 21: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

• Motivación: muchos programas contienen

algoritmos secuenciales de múltiples pasos

• Implementar pipelining puede mejorar la tasa

de rendimiento

Pipelining

1

2

3

4

Acquire Filter Analyze Log

tiempo

1

2

3

4

Acquire Filter Analyze Log

t0 t3 t4 t7

Page 22: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Acquire

Filter

CPU Core

CPU Core

Estrategia de Pipelining

tiempo

Analyze

Log

t0 t1 t2

CPU Core

CPU Core

t3

Page 23: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Acquire Acquire

Filter Filter

CPU Core

CPU Core

Estrategia de Pipelining

Analyze Analyze

Log Log

CPU Core

CPU Core

tiempot0 t1 t2 t3

Page 24: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Acquire Acquire Acquire Acquire

Filter Filter Filter Filter

CPU Core

CPU Core

Estrategia de Pipelining

Analyze Analyze Analyze Analyze

Log Log Log Log

CPU Core

CPU Core

tiempot0 t1 t2 t3

Page 25: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Secuencial Pipeline

Pipelining en LabVIEW: Registros de

Corrimiento en Cascada

• Cada etapa se ejecuta en bloque

• Hay que tomar en consideración la inicialización y fin de

variables/operaciones

• El cableado en el diagrama de bloques es poco natural

Page 26: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Secuencial Pipeline

Pipelining en LabVIEW: Nodos de

Retroalimentación

• Cada etapa se ejecuta en bloque

• Hay que tomar en consideración la inicialización y fin de

variables/operaciones

• Forma de cablear mucho más natural

Page 27: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Pipelining en LabVIEW: Queues

• Cada etapa corre con cierto grado de libertad

• Es fácil inicializar valores

• Muchos cables

• Las copias de los datos pueden llenar los queues

Page 28: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Balanceo de las Etapas del Pipeline

• La ruta crítica es la etapa que más tiempo tome

• Implementar pipelining con etapas no balanceadas

puede no generar mejoras significativas en desempeño

Sin pipeline (tiempo total = 4 s)

Etapa 1 (3s) Etapa 2 (1s)

Etapa 1 (3s)

Etapa 2 (1s)

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

DEMO

Page 29: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Diseñando Aplicaciones Multinúcleo

• Patrones de diseño más comunes:

– Ciclo sencillo con técnicas de programación en

paralelo

– Ciclos múltiples independientes– Ciclos múltiples independientes

– Productor/consumidor (transferencia de datos vía

queues)

Patrón de Diseño

Técnicas Paralelas

Page 30: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Diseños con un Solo Ciclo• Utilice técnicas de paralelismo (paralelismo de datos,

paralelismo de tareas, pipelining) en un mismo ciclo

• La velocidad del ciclo se ve limitada a la etapa crítica

Page 31: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Diseño de Ciclos en Paralelo

• Ciclos separado pueden ejecutar en paralelo

• Permite tener diferentes velocidades de ejecución

Page 32: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Productor / Consumidor

• Los queues funcionan como búfer para las

transferencia de datos entre los ciclos

• El diseño de productor/consumidor es uno de los

patrones más usados

QUEUE 1

PRODUCTOR

CONSUMIDORDEMO

Page 33: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Consideraciones y Herramientas para

Depurar Aplicaciones Multinúcleo

• VIs re-entrantes y ejecución iluminada

• Sincronización de threads

• Trazado de la ejecución

• Consideraciones en la transferencia de datos

• Distribución física del procesador

Page 34: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

VIs Re-entrantes• Todos los VIs en LabVIEW se pueden configurar como re-

entrantes

• Permite que cada subVI ocupe un lugar de memoria

separado

Todos los subVIs que se ejecuten múltiples veces en

paralelo deben de configurarse como re-entrantes

Page 35: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Ejecución Iluminada

• Permite visualizar secciones paralelas del código

durante su ejecución

• Nota: esta opción alenta la ejecución, por lo que

debe de apagarla una vez terminada la depuración

Page 36: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Sincronización de Threads

• No hay garantía de que el SO calendarizará los

threads en la secuencia correcta sin primitivas de

sincronización

• El orden de los eventos puede cambiar cada

ejecución debido a la calendarización de los threadsejecución debido a la calendarización de los threadsThread

1Thread

2Thread

3

Thread 2

Thread 3

Thread 1

Primera ejecución

Segunda ejecución

Thread 3

Thread 1

Thread 2Tercera ejecución

Page 37: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Sincronización de Código Usando

Flujo de Datos• El paradigma de flujo de datos garantiza la

sincronización

threadLas rutas de código

paralelo son sincronizadas

thread

paralelo son sincronizadas

y el orden de ejecución es

determinado por los

cables en LabVIEW

El flujo de datos natural en LabVIEW facilita la

programación multinúcleo

Page 38: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Sincronización en LabVIEW

• Existen mecanismos de sincronización cuando se

requiere control a más bajo nivel:

• Queues

• Notifiers

• Semaphores

• Rendezvous

• Occurrences

Page 39: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Trazado de la Ejecución• 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

núcleo al seleccionar el CPU específico

Page 40: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Consideraciones en la Transferencia de

Datos

• Tome en consideración la arquitectura de la memoria

en su sistema al programa sistemas multinúcleo

• Evite transferir conjuntos de datos muy grandes entre

núcleos (relativo al tamaño del caché)

• Transferencias muy pequeñas de memoria pueden

causar actualizaciones constantes del caché y reducir

el rendimiento

Page 41: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Distribución Física del Procesador

• La distancia entre los procesadores y la calidad de las

conexiones entre los mismos puede afectar

considerablemente

• La transferencia de datos a través del bus del sistema es más

lento que de la caché compartida

Ejemplos de Caché

Compartida: Sistema

Dual-Core con Dos

Procesadores

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

Core 0 Core 1 Core 2 Core 3

L2 Cache L2 Cache

System BusSystem

Memory

Page 42: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Resumen: Estrategias para Paralelismo

• Paralelismo de Tareas

– Ideal para programas con funcionalidades independientes

que tienen una mínima dependencia de datos o recursos

compartidos

• Paralelismo de Datos• Paralelismo de Datos

– Ideal para aplicaciones que trabajan con conjuntos de

datos muy grandes que pueden ser divididos y manejados

independientemente

• Pipelining

– Ideal para código que repite varias etapas en forma

secuencial con dependencia de datos entre las etapas

Page 43: 15 de Octubre Crowne Plaza - acohailab.webcindario.com

Recursos Adicionaleswww.ni.com/multicore