Por qué utilizar OpenCL en FPGA
La necesidad de una informática heterogénea ha propiciado la aparición de nuevos lenguajes de programación e impulsado el desarrollo de nuevo hardware. Un ejemplo es OpenCL, del que Apple fue pionero. OpenCL es un marco de programación que se ejecuta en plataformas heterogéneas que incluyen CPU, GPU, DSP, FPGA y otros tipos de procesadores. OpenCL incluye un lenguaje para desarrollar programas centrales (funciones que se ejecutan en dispositivos de hardware) y para definir y controlar interfaces de programación de aplicaciones (API) para varias plataformas. OpenCL admite computación paralela basada en tareas y computación paralela basada en datos.
Durante la última década, las frecuencias del hardware de los procesadores se han topado con el llamado muro de potencia que impide que los procesadores aumenten aún más la frecuencia. ¿Cuándo fue la última vez que escuchó a fabricantes de CPU como Intel anunciar el rendimiento del procesador en términos de velocidad de reloj en los últimos años? Por el contrario, los fabricantes de CPU han estado ocupados agregando más núcleos de procesamiento a la CPU, mejorando su conjunto de instrucciones, asegurando que el sistema pueda ejecutar múltiples instrucciones al mismo tiempo y aumentando la velocidad de ejecución del programa sin aumentar la frecuencia del reloj. Las empresas de software también han estado ocupadas desarrollando software que ejecute programas de forma verdaderamente paralela a través de grupos de códigos informáticos, conocidos como "hilos". En la computación paralela, los subprocesos se ejecutan en núcleos de procesador separados, en lugar de los procesadores pseudoparalelos anteriores (los subprocesos no se ejecutan en núcleos de procesador separados, sino que el sistema operativo los divide en el tiempo, aparentemente ejecutándose en paralelo).
FPGA es de naturaleza paralela y, por lo tanto, totalmente consistente con las capacidades de computación paralela de OpenCL. Los FPGA proporcionan un enfoque paralelo canalizado para completar tareas utilizando diferentes datos de tareas anteriores (con o sin interacción del host) mediante la aplicación de configuraciones push-pull dentro de las tareas. Esta es una alternativa al paralelismo típico a nivel de datos o al paralelismo de tareas. OpenCL le permite escribir código en el entorno familiar del lenguaje de programación C aprovechando las diversas funciones proporcionadas por OpenCL. No es necesario aprender el trabajo de codificación HDL de bajo nivel de un diseñador de FPGA para enviar estos programas del núcleo a la FPGA. En general, utilizar OpenCL para escribir código FPGA puede aportar varias ventajas a los desarrolladores de software y diseñadores de sistemas.
? Desarrollo simple y conveniente: la mayoría de los desarrolladores de software están muy familiarizados con el lenguaje de programación C, pero no saben mucho sobre el lenguaje HDL de bajo nivel. OpenCL le permite programar a un nivel superior, haciendo que su sistema esté disponible para más desarrolladores de software.
? Análisis de código: puede utilizar OpenCL para analizar su código e identificar secciones críticas para el rendimiento para la aceleración de hardware a través de núcleos en la FPGA.
Rendimiento: El rendimiento por vatio es el objetivo final del diseño del sistema. Al utilizar FPGA, puede lograr un alto rendimiento equilibrado en una solución energéticamente eficiente.
? Eficiencia: FPGA es una arquitectura paralela de grano fino. Al usar OpenCL, solo se genera la lógica requerida y el consumo de energía es una quinta parte de otras soluciones de hardware.
? Sistemas heterogéneos: con OpenCL, los programas del kernel se pueden desarrollar sin problemas para FPGA, CPU, GPU y DSP, logrando así un diseño de sistema verdaderamente heterogéneo.
? Reutilización de código: el “santo grial” del desarrollo de software es la reutilización de código. A menudo, la reutilización de código es un objetivo difícil de alcanzar para los desarrolladores de software y diseñadores de sistemas. El kernel OpenCL admite el trasplante de código y se puede utilizar en diferentes proyectos, diferentes series y diferentes generaciones de FPGA para extender el ciclo de vida del código.
Actualmente, OpenCL es desarrollado y mantenido por la alianza tecnológica Konas Organization. La mayoría de los fabricantes de FPGA pueden proporcionar un kit de desarrollo de software (SDK) para el desarrollo OpenCL de FPGA.