Tecnicas Programacion de Aplicaciones Eficientes en Labview

53

Transcript of Tecnicas Programacion de Aplicaciones Eficientes en Labview

Page 1: Tecnicas Programacion de Aplicaciones Eficientes en Labview
Page 2: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Técnicas de Programación para Obtener el Máximo Provecho de

LabVIEW

Ing. Benjamín CelisGerente – Ingeniería de Aplicaciones

National Instruments Mexico

Page 3: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Agenda

• Técnicas de Programación Multinúcleo• Patrones de Diseño Avanzados• Programación Orientada a Objetos• Herramientas para Aplicaciones a Gran Escala

Page 4: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Arquitecturas Paralelas Aumentan Desempeño

1970 1975 1980 1985 1990 1995 2000 2005 2010

CPU

Spee

d

Clock Speed (kHz) Transistor Count

Procesador Intel QX6700 Quad Core• 4 procesadores (pare de Core 2)• Velocidad de reloj2.66 GHz

Procesadores rápidos Procesadores Multinúcleo

Page 5: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Creando Aplicaciones Multitarea

Aplicaciones deben hacer uso de las tareas para beneficiarse de los procesadores multinúcleo.

Page 6: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Programas Multitarea en LabVIEW

• Multitarea automático– LabVIEW automáticamente asigna tareas basado

en el paralelismo– La mayoría de los programas existentes correrán

más rápido en un sistema Multinúcleo sin alteración

• Multitarea manual– Se limita la sección de código a ejecutarse como

una tarea

Page 7: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Técnicas para Paralelismo

• Paralelismo de Tareas y Multitareas Automático

• Paralelismo de Datos• Pipelining y balanceo de etapas

Page 8: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Paralelismo Tareas

1) Buscar tareas que pueden correr en paralelo2) La arquitectura del código refleja el

paralelismo• Eliminar dependencias de datos• LabVIEW automáticamente identifica código

paralelo y puede separarlo en múltiples tareas!

Page 9: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Ejemplo: Paralelismo de Tareas

Tarea

Tarea

Tarea

Operaciones Paralelas

Page 10: Tecnicas Programacion de Aplicaciones Eficientes en Labview

1) Buscar un set de datos grande que pueda ser procesado en dos o más pedazos independientes

2) Arquitectura de código:• Separar los datos• Procesar los datos en paralelos• Combinar los resultados individuales para

obtener un resultado general

Paralelismo de Datos

Page 11: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Ejemplo: Paralelismo de Datos

Resultados

Set de Datos

CPU Núcleo Procesamiento Señales

Page 12: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Combinar Resultados

Procesamiento Señal

Set de Datos

CPU Núcleo

CPU Núcleo

CPU Núcleo

CPU Núcleo

Procesamiento Señal

Procesamiento Señal

Procesamiento Señal

Ejemplo: Paralelismo Datos

Page 13: Tecnicas Programacion de Aplicaciones Eficientes en Labview

• Motivación: Muchos programas contienen secuencias, algoritmos de múltiples pasos

• Aplicando pipelining se puede incrementar la cantidad de datos procesados

Pipelining

1

2

3

4

Acquire Filter Analyze Log

time

1

2

3

4

Acquire Filter Analyze Log

t0 t3 t4 t7

Page 14: Tecnicas Programacion de Aplicaciones Eficientes en Labview

time

Acquire

Filter

Analyze

Log

t0 t1 t2

CPU Core

CPU Core

CPU Core

CPU Core

t3

Estrategia Pipelining

Page 15: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Acquire Acquire

Filter Filter

Analyze Analyze

Log Log

CPU Core

CPU Core

CPU Core

CPU Core

timet0 t1 t2 t3

Estrategia Pipelining

Page 16: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Acquire Acquire Acquire Acquire

Filter Filter Filter Filter

Analyze Analyze Analyze Analyze

Log Log Log Log

CPU Core

CPU Core

CPU Core

CPU Core

timet0 t1 t2 t3

Estrategia Pipelining

Page 17: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Nota: otras técnicas existen para pipelining como utilizar múltiples ciclos con buffers, y utilizar nodos de retroalimentación

Secuencial Pipelining

Pipelining en LabVIEW

Page 18: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Balanceo de Etapas• La ruta crítica es la etapa más larga• Pipelining con etapas desbalanceadas no

necesariamente da una mejora en desempeño

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

Etapa 1 (3s)

Etapa 2 (1s)

Sin Pipelining (tiempo total= 4s)

Con Pipelining (tiempo total= 3s): aumento velocidad = 1.33X (no ideal para pipelining)

Page 19: Tecnicas Programacion de Aplicaciones Eficientes en Labview

¿Qué Son los Patrones de Diseño?

• Una platilla o arquitectura para código de LabVIEW

• Ampliamente aceptado y bien conocido• Fácilmente reconocible

Page 20: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Herramientas Básicas• Ciclos• Registros Corrimiento• Estructura Casos• Constantes Enum• Estructura Eventos

Page 21: Tecnicas Programacion de Aplicaciones Eficientes en Labview

1. La Variable Global Funcional es un SubVI No-Reentrante2. Se puede hacer acciones sobre los datos3. La constante Enum selecciona la acción4. Guarda el resultado en un registro de corrimiento sin

inicializar5. El ciclo se ejecuta una sola vez

Variable Global Funcional

Page 22: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Código de Transición

Máquina de Estados

Primer Estado

Primer Estado

Siguiente Estado

Ejecución de Estado

Los registros de corrimiento acarrean el estado

Se tiene un caso por cada estado El código de transición determina el siguiente caso según los resultados

Page 23: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Opciones de Código de Transición

Step Execution

Step Execution

Step Execution

Page 24: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Productor / Consumidor

Page 25: Tecnicas Programacion de Aplicaciones Eficientes en Labview

1. Eventos son capturados por el productor

2. Productor pone los datos en el buffer

3. La máquina de estados en el consumidor ejecuta las acciones sobre los datos

4. SubVIs paralelos se comunican usando referencias a los buffers

Máquina Estados Buffer &Productor/Consumidor con Eventos

Page 26: Tecnicas Programacion de Aplicaciones Eficientes en Labview
Page 27: Tecnicas Programacion de Aplicaciones Eficientes en Labview

BufferMaestro

Page 28: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Ciclo ProductorBasado en Eventos

Page 29: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Estado y Datos Entran al Buffer

Page 30: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Máquina EstadosConsumidor

Page 31: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Buffers Adicionales (Q1 y Q2)

Page 32: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Estados Producen para los Buffers Adicionales

Page 33: Tecnicas Programacion de Aplicaciones Eficientes en Labview

SubVIs Consumen datos de Q1 y Q2

Page 34: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Daemon Autoejecutable Estándar

• Punto clave– un Daemon debe mantener una referencia abierta a sí mismo para evitar que sea purgado

Page 35: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Daemon Estándar Ejecutado

• Puntos Clave– el que ejecuta debe transferir responsabilidad por la referencia del daemon VI.

• El que ejecuta no debe cerrar la referencia al daemon VI

Page 36: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Proxy Estándar

• Almacena referencia a un VI real• Carga el VI sólo en su primera llamada

Page 37: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Launcher Estándar

Page 38: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Programación Orientada a Objetos

• Un enfoque para el desarrollo de aplicaciones• Apropiado para aplicaciones de gran escala con un

equipo de desarrolladores• Promueve reutilizar el código• Reduce el mantenimiento de código• Simplifica extender aplicaciones

Page 39: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Programación Orientada a Objetos

•Para desarrollo de aplicaciones a gran escala

Clase Padre

Clase Hija •

Encapsulación

Clases y Objetos

Herencia

Page 40: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Clases y Objetos

• Los Objetos son actores en su aplicación– Referencias a partes individuales de datos

• La Clase define los datos y comportamiento de los Objetos– Los objetos en su aplicación son instancias de una

Clase

Page 41: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Creando Clases en LabVIEW

• Crear una clase en el Proyecto• Especificar los datos con el .ctl

para la clase– Definir la clase en efecto define

un nuevo tipo de dato• Características adicionales

– Especificar el ícono de la clase– Especificar una plantilla de ícono

de VI– Especificar el color del cable

Page 42: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Creando Métodos para las Clases

• Métodos– Acciones o peticiones– Desempeñadas por los objetos– Generalmente verbos

• Crear un VI• Especificar alcance

– Público– Privado– Protegido

Page 43: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Herencia

• Define subclases• Crea una relación de

pertenecía– Ejemplo: Teléfono con Cámara

“es un” Teléfono Celular– Reutiliza funcionalidad común

• Especialización– Extender o sobrescribir

funcionalidad para necesidades específicas

Page 44: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Encapsulación

• Tratar cada objeto como una caja negra– Interfaz bien definida de datos y

métodos– Debe utilizar esta interfaz en la

aplicación

• Todos los datos son privados• Métodos pueden ser públicos,

privados o protegidos

Page 45: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Composición de la Clase

• Definir una clase crea un nuevo tipo de dato• Una clase puede estar hecha de otra clase

Page 46: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Aplicaciones de LabVIEW Usando Clases

• Llaman métodos y objetos• Reduce la rescritura de código mediante la

herencia y envío dinámico

Page 47: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Requerimeintos Arquitectura Desarrollo Depurado y Pruebas Despliegue

Herramientas de Ingeniería de Software

Proceso de Ingeniería de Software

Requirements Gateway

Multicore

Object Orientation

Design Patterns Dataflow

MathScript

Statechart

Simulation

Express

VI Analyzer

Real Time Execution Trace

Desktop Execution Trace

Unit Test Framework

Application Builder

Real Time

FPGA

Embedded

Page 48: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Herramientas para Depurado/Pruebas

Alto RiesgoBajo Riesgo

Depurado y Pruebas

Análisis DinámicoReal Time Execution Trace

Análisis Estático

Validación FuncionalUnit Test Framework

Avan

zado

Sim

pleCo

mplej

idad A

plica

ción

Aplicación Crítica

Desktop Execution Trace

VI Analyzer Toolkit

Page 49: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Preparando una Revisión de Código con VI Analyzer

• Automatiza el análisis de código con más de 60 pruebas configurables– Desempeño– Estilo

• Inspecciona fallas interactivamente

• Genera reportes personalizados

Page 50: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Desktop Execution Trace ToolkitTrazas Durante Ejecución:• Estructuras Eventos• Localidades Memoria• Buffers / Notificadores• Referencia Fugas• ID Tareas• Errores sin Manejar• SubVIs Estáticos/Dinámicos• Cadenas de Caracteres

Personalizadas

Page 51: Tecnicas Programacion de Aplicaciones Eficientes en Labview

LabVIEW Unit Test Framework

VI Bajo Prueba

Valores Entrada Salida

Resultados EsperadosUnit Test Framework

Generación Automática

Reporte

Vector prueba= Valores Entrada+ Salidas Esperadas

Page 52: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Unidades a Probar

Implementación

Requerimientos Software

Resultados Pruebas

Integracion con Requerimientos

Page 53: Tecnicas Programacion de Aplicaciones Eficientes en Labview

Preguntas?