El proyecto VeriGPU anuncio el desarrollo de una GPU abierta
El proyecto VeriGPU dio a conocer hace pocos dias que ha comenzado a trabajar en el desarrollo de una GPU abierta, la cual tiene como objetivo ser desarrollada bajo el lenguaje de modelado y descripción de sistemas electrónicos Verilog.
Para quienes desconocen de VeriGPU, deben saber que este se posiciona como un procesador específico de aplicaciones (ASIC) optimizado para acelerar los cálculos relacionados con los sistemas de aprendizaje automático.
De manera iniciar, el proyecto se está desarrollando utilizando el simulador Verilog, pero después de que esté listo, se puede utilizar para producir chips reales.
Los planes incluyen compatibilidad con el marco de aprendizaje profundo PyTorch y la capacidad de desarrollar aplicaciones para VeriGPU utilizando la API HIP (interfaz de computación heterogénea). En un futuro no se descarta la incorporación de soporte para otras API, como SYCL y NVIDIA CUDA.
Es importante mencionar que el desarrollo de esta GPU está dirigida directamente al entrenamiento de aprendizaje automático. Por lo tanto, idealmente debería ser compatible con los marcos de aprendizaje automático actuales, como PyTorch y Tensorflow, esto significa que es casi seguro que debe ser compatible con NVIDIA CUDA o AMD HIP.
Aunque tambien se menciona que sé podría implementar una interfaz OpenCL o SYCL, aunque actualmente la compatibilidad con los marcos principales es limitada. Hay un marco de aprendizaje profundo de OpenCL dedicado en DeepCL, pero tiene un conjunto relativamente limitado de capas de red neuronal y posibles topologías de red, en comparación con PyTorch y Tensorflow.
Actualmente, no tenemos la intención de implementar la ejecución fuera de orden, es decir, comenzar una instrucción antes de que haya comenzado la anterior, porque esto es complicado en un escenario de subprocesos múltiples de una sola instrucción (SIMT), y porque esto hace que los núcleos usen más área de troquel. , y por lo tanto menos en número (o más caro).
Por otro lado, implementaremos la ejecución de instrucciones en paralelo, donde comenzamos una instrucción mientras la instrucción anterior aún se está ejecutando. Esto es estándar y bastante liviano, no ocupa demasiada área de troquel.
Actualmente no se implementa almacenamiento en caché de ningún tipo (sin nivel 1, sin nivel 2, sin nivel 3, ni siquiera caché de instrucciones: P). Dado que tengo la intención de crear una GPU, que tiene un mecanismo de caché diferente al de la CPU, pensaré en esto una vez que comience a parecerse más a una GPU.
La GPU evoluciona en función del conjunto de instrucciones de RISC-V, pero la arquitectura del conjunto de instrucciones de GPU interno resultante es poco compatible con RISC-V ISA, ya que en situaciones en las que el diseño de la GPU no se ajusta a la representación de RISC-V, ademas de que no se establece la tarea de mantener la compatibilidad con RISC-V.
Dado que el desarrollo se centra en las capacidades requeridas para los sistemas de aprendizaje automático, por lo tanto, para reducir el tamaño y la complejidad de la matriz del chip, solo se utiliza el formato de coma flotante BF16 y solo las operaciones de coma flotante que están en demanda para el aprendizaje automático, como exp, log, tanh y sqrt, están disponibles.
De los componentes ya disponibles se mencionan por ejemplo el controlador GPU, APU (Accelerated Processing Unit) para operaciones con enteros («+»,»-«,»/»,»*»), unidad para operaciones de punto flotante («+»,»*») y una unidad de ramificación, asi como también el soporte para el compilador HIP.
Para la creación de aplicaciones se ofrece ensamblador y soporte para compilar código C++ basado en LLVM. De las características previstas, se destacan la ejecución paralela de instrucciones, el almacenamiento en caché de datos y la memoria de instrucciones, las operaciones SIMT (Single Instruction Multiple Thread).
Finalmente, si estás interesado en poder conocer más al respecto sobre el desarrollo de esta GPU de código abierto, debes saber que los desarrollos del proyecto se distribuyen bajo la licencia MIT y puedes consultar el código, asi como los avances del proyecto desde el siguiente enlace.