Sesión Técnica. Sacando el máximo de tus Apps con IA
1. Sacando el maximo de tus
Apps con IA
Marcelo Lorenzati
ASDC - Argentina Software Design Center
2. Agenda
Breve historia, evolución y el rol de Intel en la tecnología
Información, recursos y contactos
Optimizaciones, consejos y buenas prácticas de desarrollo
Herramientas
Preguntas
4. Evolución
Evolución de los procesadores Intel, desde miles a billones de transistores en un
solo chip, en 42 años.
http://www.intel.com/content/www/us/en/history/history-intel-chips-timeline-poster.html
8. Contacto con los desarrolladores
Zona para desarrolladores Intel®
http://software.intel.com/es-es/
Foro de Preguntas del Hackaton
http://software.intel.com/es-es/node/472278
9. Optimizaciones, conceptos generales
1. Primero claridad antes que eficiencia
2. Estas pensando en optimizar? Espera!
3. Piensa en paralelismo
1. En los datos
2. En las tareas
3. En las instrucciones (acá te ayuda el
compilador y el micro)
4. Aprovecha herramientas y librerías
10. Concurrencia y paralelismo
Dos tareas en un procesador
de doble núcleo vs uno de
núcleo único.
Múltiples tareas en un
procesador de doble núcleo
Se usa paralelismo no solo para performance, sino como un método se separar dominios de un
problema.
11. Concurrencia y paralelismo
Sincronización de datos
entre tareas y procesos
Cuando no se usa paralelismo? Cuando el costo de implementar es mayor que el beneficio de provee.
Cual es ese costo? La sincronización y protección de los datos compartidos
http://software.intel.com/sites/default/files/m/d/4/1/d/8/Gillespie-0053-AAD_Gustafson-Amdahl_v1__2_.rh.final.pdf
14. Optimizaciones, HTML5
• Webworkers
var worker = new Worker('task.js');
worker.postMessage(); //Ejecuta el worker por separado
• Animaciones CSS3 / HTML5 (la mayoría aceleradas por HW)
<style>
div
{
width:100px;
transition:width 2s;
}
div:hover
{
width:300px;
}
</style>
• Librerias:
– jquery, jqueryUi, bootstrap (client side scripting)
– cocos2D-HTML5, CraftyJs (gaming)
http://html5test.com/
http://www.html5rocks.com/en/tutorials/speed/html5/
http://www.html5rocks.com/en/tutorials/canvas/performance/
15. Optimización C/C++ - Librerías
Librerias de soporte de C++
Boost (http://www.boost.org/)
Frameworks de desarrollo de aplicaciones:
Qt (http://qt-project.org/)
GTK (http://www.gtk.org/)
WxWidgets (http:// www.wxwidgets.org/)
Webserver embebido
Mongoose (https://code.google.com/p/mongoose/)
Procesamiento de imágenes
OpenCV (http:// opencv.org)
Persistencia local
sqlite3 (http://www.sqlite.org/)
Imágenes 3D
Ogre (http://www.ogre3d.org)
16. Optimización C/C++ - Compilación y enlazado
Algunos parámetros de compilación: en GCC (GNU C Compiler) o en ICC( Intel C Compiler)
-O0 sin optimización
-O1 Optimizaciones escalares (por defecto)
-O2 Vectorización, transformación de bucles, inlining
-O3 La mas agresiva, se debe probar
incluye cache blocking, loop fusion, loop interchange
Optimización inter procedimiento: Analisis entre funciones sus fuentes
gcc –flto , icc -ipo
• Funciones inline
• Análisis de alineación
• Desambiguación
• Propagación de constantes
• Disposición y transformación de datos
17. Optimización C/C++ - Compilación y enlazado
Uso de librerías optimizadas
Gcc –lm
• Math (libm) ( acos, atan, ceil, log, pow, sin, etc)
• Math Kernel Library (MKL)
– Vectores y matrices
– Algebra lineal
– FFT
– Librería estadística (números aleatorios)
Manejo de punto flotante
• En gcc esta apagado por defecto, se habilita con –ffast-math
• En icc se habilita con –fp-model (fast / precise / strict)
18. SIMD: Single Instruction, Multiple Data
• Scalar mode
– one instruction produces
one result
– E.g. addss, (addsd)
• Vector mode
– with AVX (or SSE) instructions
– one instruction can produce multiple
results
– E.g. addps, (addpd)
+
X
Y
X + Y
+
X
Y
X + Y
= =
x7+y7 x6+y6 x5+y5 x4+y4 x3+y3 x2+y2 x1+y1 x0+y0
y7 y6 y5 y4 y3 y2 y1 y0
x7 x6 x5 x4 x3 x2 x1 x0
SSE
19. Herramientas de optimización C/C++
Intel® Parallel Studio XE
Fase Herramienta Función Beneficio
Diseño
Intel®
Parallel
Advisor
for C++
Windows
Asistente de diseño con hilos
• Simplifica, desmistifica y acelera el
diseño de aplicaciones con multihilo
Codificación
y depuración
Intel®
Composer
XE
Compiladores de C/C++ y Fortran
con librerías optimizadas
• Intel® Integrated Performance
Primitives
• Intel® Math Kernel Library
• Intel® Threading Building Blocks
• Intel@ Cilk™ Plus
• Permite alcanzar el rendimiento y
escalabilidad deseada aprovechando
beneficios multi-núcleo
Verificación
Intel®
Inspector
XE
Análisis dinámico de memoria e
hilos para mejorar la calidad del
código
Análisis estático de código para
mejorar la calidad y confianza
• Incrementa la productividad, calidad y baja
costos.
• Encuentra defectos en memoria, hilos y
bugs antes de que sucedan.
Tune
Intel®
VTune™
Amplifier
XE
Generado de perfil para
optimización de aplicación y
escalabilidad
• Elimina conjeturas, salva tiempo y hace
fácil encontrar cuellos de botella del código
http://software.intel.com/en-us/articles/intel-software-evaluation-center/
20. 20
Intel®
Parallel Advisor – Overview
Discover, Analyze, Check, Add Parallelism
Analyzes the executing serial program as developers work
through the methodology
Check Suitability
Evaluates performance impact and implication of the parallel experiments
Survey Target
Focuses effort where it will pay off and targets coarse-grain parallelism
Annotate Sources
Inserts annotations to sources to describe parallel experiments
Check Correctness
Finds and resolves conflicts before parallelism is applied. Reduces
debugging problems by defining safe and solid paths to parallelism
Design Phase
Models Intel® Threading Building Blocks, Intel® Cilk™
Plus, Microsoft*PPL, Windows* Threads, OpenMP*
21. 10/7/2013
Intel® C++
Composer XE 2011
• Intel® C++ Compiler XE 12.1
• Intel® Threading Building Blocks
• Intel® Cilk™ Plus
• Intel® Math Kernel Library
• Intel® Integrated Performance
Primitives
Intel® Fortran
Composer XE 2011
• Intel® Fortran Compiler XE 12.1
• Intel® Math Kernel Library
• Intel® Integrated Performance
Primitives
Intel Composer XE - Overview
Compilers, Performance Libraries, Debugging Tools
• Leading Performance Optimizing Compilers
- Intel C++ and Fortran Compilers
- Intel® Integrated Performance Primitives, Intel® Math
Kernel Library libraries
- Profile-Guided Optimization (PGO)
- Interprocedural Optimization (IPO)
- Guided-auto parallelism (GAP)
- High-Performance Parallel Optimizer (HPO)
- SIMD Pragma
- C++ Array Notations
• Standard Support
- OpenMP*
- C++0x
- Support for key parts of the latest Fortran and C++
standards, Visual Studio* 2010 Shell for Visual Fortran*
• Compatibility – Mix and Match
- Binary and source compatible with
Microsoft* Visual Studio* C++ and GCC*
Windows*, Linux*, Mac OS*
32-bit & 64-bit multicore processor support
Intel® AVX support
Supported Environments
Microsoft Visual Studio* 2005, 2008, 2010 Eclipse CDT and Mac XCode*
23. Where is my application…
Spending Time? Wasting Time? Waiting Too Long?
• Focus tuning on functions
taking time
• See call stacks
• See time on source
• See cache misses on your
source
• See functions sorted by
# of cache misses
• See locks by wait time
• Red/Green for CPU
utilization during wait
Intel® VTune™ Amplifier XE
Performance Profiler
• Windows & Linux
• Low overhead
• No special recompiles
Advanced Profiling For Scalable Multicore Performance
24. Optimizaciones, conceptos avanzados
Manual de optimizaciones
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-
optimization-manual.html
25. Consejos
• >60% de las classmates son dual boot
– Piensa en multiplataforma
• No siempre habrá conectividad constante de internet
– Modos offline, persistencia, etc.
• Tamaño de pantalla de 10.1”
– Diseña iconos y fuentes grandes
– No sobrecargues las pantallas con detalles, sepáralas
• Piensa en la batería
– Optimizar el procesamiento
– Usa sólo lo necesario