Este documento presenta información sobre el desarrollo de aplicaciones con inteligencia artificial optimizadas para procesadores Intel. Brevemente describe la historia y evolución de Intel y sus procesadores, y proporciona consejos y herramientas para el desarrollo optimizado, incluyendo el uso de paralelismo, librerías, compilación y herramientas como Intel Parallel Studio e Intel VTune Amplifier. También incluye enlaces a recursos adicionales para desarrolladores.
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
• Vector mode
• Scalar mode
– with AVX (or SSE) instructions
– one instruction can produce multiple
results
– one instruction produces
one result
– E.g. addss, (addsd)
– E.g. addps, (addpd)
SSE
X
X
x7
x6
x5
Y
x1
x0
y7
y6
y5
y3
y4
y2
y1
y0
=
=
X+Y
x2
+
+
Y
x3
x4
X+Y
x7+y7 x6+y6 x5+y5 x4+y4 x3+y3 x2+y2 x1+y1 x0+y0
19. Herramientas de optimización C/C++
Intel® Parallel Studio XE
Fase
Herramienta
Función
Beneficio
Intel®
Parallel
Advisor
for C++
Windows
Asistente de diseño con hilos
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
Diseño
• Simplifica, desmistifica y acelera el
diseño de aplicaciones con multihilo
http://software.intel.com/en-us/articles/intel-software-evaluation-center/
20. Intel® Parallel Advisor – Overview
Design Phase
Discover, Analyze, Check, Add Parallelism
Analyzes the executing serial program as developers work
through the methodology
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 Suitability
Evaluates performance impact and implication of the parallel experiments
Check Correctness
Finds and resolves conflicts before parallelism is applied. Reduces
debugging problems by defining safe and solid paths to parallelism
Models Intel® Threading Building Blocks, Intel® Cilk™
Plus, Microsoft*PPL, Windows* Threads, OpenMP*
20
21. Intel Composer XE - Overview
Compilers, Performance Libraries, Debugging Tools
• Leading Performance Optimizing Compilers
•
•
•
•
•
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 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*
10/7/2013
23. Intel® VTune™ Amplifier XE
Performance Profiler
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
• 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-architecturesoptimization-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