Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EPC2026 : RENDIMIENTO, VECTORIZACIÓN Y OPTIMIZ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

EPC2026 : RENDIMIENTO, VECTORIZACIÓN Y OPTIMIZACIÓN EN C++

Avatar for Abraham Zamudio

Abraham Zamudio

September 09, 2026

More Decks by Abraham Zamudio

Other Decks in Education

Transcript

  1. Propósito y alcance • Integrar cuatro reportes técnicos: C, C++,

    GCC e Intel C/C++. • Mostrar cómo lenguaje, compilador y hardware se combinan para obtener rendimiento determinista. • Destacar criterios de decisión para HPC, simulación numérica, infraestructura y ciencia de datos. • Enfatizar buenas prácticas modernas: RAII, sanitizadores, vectorización, reproducibilidad y ABI. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Idea central El software de alto rendimiento no depende solo del lenguaje: depende de la interacción entre abstracción, compilador y hardware. 2 / 25
  2. Agenda 1 C: la capa fundacional 2 C++: abstracción sin

    costo 3 GCC: el optimizador de referencia 4 Intel C/C++: rendimiento especializado 5 Síntesis y recomendaciones GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 3 / 25
  3. C: origen, rol y filosofía • Creado por Dennis Ritchie

    entre 1969 y 1973 en los Laboratorios Bell. • Base histórica de UNIX y de gran parte de la infraestructura computacional global. • Lenguaje procedimental, de tipado estático y muy cercano al hardware. • Funciona como “ensamblador portátil” y como ABI universal para interoperabilidad. • Filosofía: confiar en el programador, transparencia y mínima sobrecarga. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Fortalezas • Control directo de memoria. • Rendimiento predecible. • Núcleo pequeño + biblioteca estándar. • Portabilidad excepcional. 4 / 25
  4. C: evolución estándar y pipeline Evolución estándar Pipeline de traducción

    • K&R C (1978): estándar de facto. 1 Preprocesamiento: macros y cabeceras. • C89/C90: prototipos y biblioteca estándar. 2 Compilación: AST, IR y optimizaciones. • C99: stdint.h, inline, VLA. 3 Ensamblado: objetos ELF, Mach-O o PE. • C11: concurrencia, stdatomic.h, alineación. 4 Enlazado: bibliotecas estáticas o dinámicas. • C23: nullptr, constexpr, typeof. Herramientas asociadas Make/CMake/Meson, GDB/LLDB, Valgrind, perf, ASan, UBSan y análisis estático. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 5 / 25
  5. C: memoria, comportamiento indefinido y riesgo Segmentos típicos Vectores de

    UB Segmento Contenido • Buffer overflow. Texto instrucciones, usualmente solo lectura globales/estáticas inicializadas globales/estáticas no inicializadas memoria dinámica manual variables locales y llamadas • Use-after-free / dangling pointers. Datos BSS Heap Stack GCC (GNU) vs. ICC (Intel) • Signed integer overflow. Mitigación moderna Análisis estático, sanitizadores en CI/CD, hardening binario, extensiones de hardware y disciplina de ingeniería. Abraham Zamudio. 6 / 25
  6. C: dominios donde sigue siendo decisivo Sistemas Infraestructura Linux, núcleos

    BSD, componentes de Windows/macOS, bootloaders y controladores. SQLite, PostgreSQL, Nginx, Apache, bibliotecas de red y motores de E/S. Embebidos Runtimes Microcontroladores, RTOS, sistemas automotrices, dispositivos médicos e IoT. CPython, JVM, NumPy, wrappers de Julia y bibliotecas científicas implementadas en C. Lectura estratégica C sigue siendo la capa fundacional cuando se requiere control absoluto, ABI estable y huella mínima. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 7 / 25
  7. C++: principios de diseño • Diseñado por Bjarne Stroustrup desde

    1979 como “C with Classes”. • Lenguaje compilado, de tipado estático y multiparadigma. • Traslada verificación y optimización al tiempo de compilación. • Combina abstracción de alto nivel con rendimiento determinista. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Principios clave • Zero-overhead: lo que no se usa no se paga. • RAII: recursos ligados al ciclo de vida de objetos. • Rule of 0/3/5: gestión segura de copia, movimiento y destrucción. 8 / 25
  8. C++: de la era clásica al C++ moderno Versión Aportes

    centrales C++98/03 STL, excepciones, RTTI y bases del modelo de objetos. C++11 move semantics, auto, lambdas, smart pointers, nullptr, concurrencia. C++14/17 ergonomía, if constexpr, fold expressions, optional, variant. C++20 concepts, modules, ranges, coroutines. C++23 expected, print, mejoras para CRTP y seguridad expresiva. Interpretación El C++ moderno prioriza seguridad expresiva, verificación en compilación y abstracciones sin costo. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 9 / 25
  9. C++: mecanismos arquitectónicos centrales Polimorfismo Movimiento std::move transfiere recursos desde

    rvalues y evita copias profundas innecesarias. Dinámico Mecanismo Resolución Metaprogramación Costo Plantillas, constexpr, consteval y concepts permiten computar en tiempo de compilación. Uso GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Estático vtable runtime templates compiletime indirección posible bloat plugins HPC/STL 10 / 25
  10. C++: concurrencia, seguridad y límites Concurrencia Limitaciones Modelo de memoria

    formal desde C++11; std::atomic, memory orders y estructuras lock-free. • ABI inestable por name mangling y diseño de vtable. Buenas prácticas • Excepciones con costo en tamaño binario y restricciones en HFT/GPU. • Complejidad cognitiva y tiempos de compilación. Evitar new/delete explícitos; usar smart pointers, span, ASan, UBSan y TSan. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 11 / 25
  11. C++: infraestructura crítica y aceleración Machine learning Interoperabilidad Backends de

    PyTorch, TensorFlow/JAX: grafos, kernels, memoria GPU y ejecución optimizada. Para exponer C++ a Python/Julia se usa extern Ç", pybind11 o wrappers equivalentes. Finanzas y embebidos Rol estratégico HFT, matching engines, sistemas aeroespaciales, MISRA C++, allocators y memory pools. C++ actúa como capa de aceleración entre lenguajes de alto nivel y hardware de rendimiento. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 12 / 25
  12. GCC: arquitectura general del compilador Front-end Back-end Lexer/parser, AST, GENERIC

    y reducción a GIMPLE, RTL, instruction selection, asignación de registros y scheduling para la CPU objetivo. una representación simplificada de tres direcciones. Middle-end Valor Optimización sobre GIMPLE/SSA: alias analysis, CSE, propagación de copias y devirtualización. GCC desacopla la semántica del lenguaje de la arquitectura y se integra con la toolchain GNU. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 13 / 25
  13. GCC: optimización matemática de bucles • El framework Graphite aplica

    el modelo poliédrico. • Los bucles anidados se modelan con dominios y dependencias lineales. • Permite loop tiling, fusión e intercambio de bucles. • Es especialmente útil en álgebra lineal y simulación numérica. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Beneficio Mejora la localidad espacial y temporal, reduce cache misses y aprovecha mejor la jerarquía de memoria. 14 / 25
  14. GCC: optimización avanzada Técnica Descripción LTO optimización en tiempo de

    enlace: inlining global y eliminación de código muerto. PGO usa perfiles reales para optimizar hot paths y disposición de bloques básicos. Vectorización SIMD por bucles y SLP para operaciones escalares adyacentes. OpenMP offloading regiones delegadas a aceleradores heterogéneos. Implicancia Con flags adecuados, GCC puede transformar código portable en binarios altamente optimizados para HPC. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 15 / 25
  15. GCC: hardening y seguridad binaria • -fstack-protector-strong: canarios de pila.

    • -fPIE/-pie: soporte para ASLR. • -D_FORTIFY_SOURCE=3: funciones libc fortificadas. • -fcf-protection: protección CET/BTI. • -fhardened: paquete robusto de hardening. GCC (GNU) vs. ICC (Intel) Objetivo Mitigar buffer overflow, ROP/JOP, ejecución de código y corrupción de memoria. Ecosistema Plugins, libgccjit e integración con entornos científicos como Python y Julia. Abraham Zamudio. 16 / 25
  16. GCC frente a Clang/LLVM Dimensión GCC Clang/LLVM Arquitectura monolítica pero

    extensible modular, IR estable Licencia GPLv3 Apache 2.0 Fortaleza Graphite, targets amplios diagnósticos, velocidad Uso típico FOSS/HPC/sistemas toolchains propietarias Síntesis GCC destaca por madurez, portabilidad y optimización numérica; LLVM/Clang por modularidad y experiencia de desarrollo. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 17 / 25
  17. Intel C/C++: de ICC clásico a ICX Dimensión ICC Classic

    ICX Base front-end EDG Clang/LLVM IR propietaria LLVM-IR / SPIR-V Estándares soporte más lento soporte moderno Licencia comercial gratuito en oneAPI Paradigma oneAPI ICX compila un mismo código para CPU x86 y genera SPIR-V para GPU/FPGA, integrando MKL, CCL y DAL. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 18 / 25
  18. Intel: vectorización, SVML y alineación • Vectorización automática de bucles

    aritméticos y matemáticos. • SVML: intrínsecos SIMD para sin, cos, exp, log, pow. • La alineación de memoria es crítica para AVX-512. • Pragmas y flags: vector aligned, __assume_aligned, -align, -qopt-zmm-usage=high. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Flags de microarquitectura • -xHost: genera código para la CPU actual. • -ax...: múltiples rutas y dispatch en runtime. 19 / 25
  19. Intel: HLO, paralelismo y jerarquía de memoria Loop tiling Auto-paralelización

    Reestructura bucles anidados para trabajar por bloques en caché L1/L2. -parallel analiza dependencias y genera hilos antes de escribir OpenMP manual. Prefetching Diagnóstico Inserción de prefetcht0/t1/t2 para ocultar latencia -qopt-report=5 explica vectorización exitosa o fallida en archivos .optrpt. de RAM. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 20 / 25
  20. Intel: aritmética flotante y reproducibilidad Flag Comportamiento -fp-model precise IEEE

    estricto, reproducible bit a bit. -fp-model fast=1 reordena, usa FMA y busca máximo rendimiento estándar. -fp-model fast=2 asume ausencia de NaN/Inf y permite aproximaciones agresivas. -fp-model source evalúa en formato de origen, favoreciendo portabilidad. Decisión clave En simulación científica, elegir velocidad o reproducibilidad es una decisión matemática y de ingeniería. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 21 / 25
  21. Intel: diagnóstico, profiling y consideraciones prácticas • -qopt-report=5: remarks de

    vectorización. • Integración profunda con VTune Profiler. • Intel Advisor: dependencias, paralelismo y carreras. • Ejemplos: LOOP WAS VECTORIZED, unaligned access. GCC (GNU) vs. ICC (Intel) ABI y ecosistema En Linux es compatible con la ABI de GCC; resulta útil para extensiones en Python/Julia. En clústeres AMD, AOCC puede ser preferible. Abraham Zamudio. 22 / 25
  22. Síntesis comparativa Componente Aporte principal Fortaleza Consideración C ABI estable

    y control simplicidad y portabilidad memoria manual/UB C++ abstracción sin costo templates/RAII complejidad/ABI GCC optimizador FOSS Graphite/hardening builds pesados ICX rendimiento Intel SVML/fp-model foco x86 Intel Criterio La selección debe basarse en requisito de latencia, portabilidad, seguridad, equipo y ciclo de vida del binario. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 23 / 25
  23. Recomendaciones de ingeniería Para C Para GCC Usar estándares modernos,

    sanitizadores, hardening y análisis estático en CI/CD. Explorar LTO, PGO, vectorización, Graphite y flags de seguridad. Para C++ Para ICX Preferir RAII, smart pointers, move semantics, concepts y manejo explícito de errores. Aprovechar SVML, alineación, reports de vectorización y -fp-model según reproducibilidad. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. 24 / 25
  24. Conclusión • C permanece como base de sistemas, runtimes y

    ABI. • C++ permite abstracción de alto nivel con rendimiento determinista. • GCC ofrece optimización portable, segura y madura. • ICX maximiza rendimiento en hardware Intel y oneAPI. GCC (GNU) vs. ICC (Intel) Abraham Zamudio. Mensaje final El rendimiento sostenible surge de decidir con rigor: lenguaje, compilador, flags, modelo de memoria y verificación continua. 25 / 25