El desarrollo de software para el microprocesador Cell implica una combinación de prácticas de desarrollo convencionales para el núcleo PPU compatible con PowerPC y nuevos desafíos de desarrollo de software con respecto a los coprocesadores SPU funcionalmente reducidos.
Se adoptó una estrategia basada en software de código abierto para acelerar el desarrollo de un ecosistema Cell BE y proporcionar un entorno para desarrollar aplicaciones Cell, incluido un compilador Cell basado en GCC, binutils y un puerto del sistema operativo Linux. [1]
Octopiler es el compilador prototipo de IBM que permite a los desarrolladores de software escribir código para procesadores Cell . [2] [3] [4]
La tecnología VMX (Vector Multimedia Extensions) es conceptualmente similar al modelo vectorial proporcionado por los procesadores SPU, pero existen muchas diferencias significativas.
El modo Java VMX cumple con el subconjunto de la Especificación del lenguaje Java 1 del estándar IEEE predeterminado , ampliado para incluir la compatibilidad con IEEE y C9X en los casos en que el estándar Java no se pronuncia al respecto. En una implementación típica, el modo que no es Java convierte los valores anormales en cero, pero el modo Java realiza una captura en un emulador cuando el procesador encuentra dicho valor.
El manual IBM PPE Vector/SIMD no define operaciones para punto flotante de doble precisión, aunque IBM ha publicado material que implica ciertos números de rendimiento de doble precisión asociados con la tecnología Cell PPE VMX.
Los compiladores para Cell [ ¿quién? ] proporcionan funciones intrínsecas para exponer instrucciones SPU útiles en C y C++. Las instrucciones que difieren solo en el tipo de operando (como a, ai, ah, ahi, fa y dfa para la suma) suelen estar representadas por una única función intrínseca de C/C++ que selecciona la instrucción adecuada en función del tipo de operando.
Existe una gran cantidad de código que se ha desarrollado para otros microprocesadores IBM Power que podrían adaptarse y recompilarse para ejecutarse en la SPU. Esta base de código incluye código VMX que se ejecuta en la versión PowerPC de Mac OS X de Apple , donde se lo conoce mejor como Altivec . Según la cantidad de características específicas de VMX involucradas, la adaptación involucrada puede variar desde sencilla hasta onerosa o completamente impráctica. Las cargas de trabajo más importantes para la SPU generalmente se asignan bastante bien.
En algunos casos, es posible portar directamente el código VMX existente. Si el código VMX es muy genérico (hace pocas suposiciones sobre el entorno de ejecución), la traducción puede ser relativamente sencilla. Los dos procesadores especifican un formato de código binario diferente , por lo que se requiere una recompilación como mínimo. Incluso cuando existen instrucciones con los mismos comportamientos, no tienen los mismos nombres de instrucción, por lo que esto también debe asignarse. IBM proporciona funciones intrínsecas del compilador que se encargan de esta asignación de forma transparente como parte del kit de herramientas de desarrollo.
Sin embargo, en muchos casos no existe una instrucción directamente equivalente. La solución alternativa puede ser obvia o no. Por ejemplo, si se requiere un comportamiento de saturación en la SPU, se puede codificar agregando instrucciones SPU adicionales para lograrlo (con cierta pérdida de eficiencia). En el otro extremo, si se requiere la semántica de punto flotante de Java, esto es casi imposible de lograr en el procesador SPU. Para lograr el mismo cálculo en la SPU, puede ser necesario escribir desde cero un algoritmo completamente diferente.
La similitud conceptual más importante entre VMX y la arquitectura SPU es que admiten el mismo modelo de vectorización. Por este motivo, la mayoría de los algoritmos adaptados a Altivec también suelen adaptarse con éxito a la arquitectura SPU.
La transferencia de datos entre los almacenes locales de diferentes SPU puede tener un gran coste de rendimiento. Los almacenes locales de SPU individuales se pueden explotar mediante diversas estrategias.
Las aplicaciones con alta localidad, como los cálculos de matrices densas, representan una clase de carga de trabajo ideal para los almacenamientos locales en Cell BE. [5]
Los cálculos de streaming se pueden realizar de manera eficiente mediante la canalización de software de transferencias de bloques de memoria utilizando una estrategia de almacenamiento en búfer múltiple. [1]
La caché de software ofrece una solución para accesos aleatorios. [6]
Las aplicaciones más sofisticadas pueden utilizar múltiples estrategias para diferentes tipos de datos. [7]