CUDA CORES de NVIDIA ¿ Qué son?
Explicamos que son los NVIDIA CUDA Cores de las tarjetas gráficas y como trabaja esta tecnología y como permitió ofrecer un considerable salto en la computación por medio de la paralelización
Siempre que estamos hablando de las tarjetas gráficas de NVIDIA, estamos hablando de sus informaciónes técnicas, como logre ser la continuidad de trabajo de la GPU, la proporción de memoria, el TDP o los CUDA Cores, etc. Conocemos de sobra que es la continuidad y como trabaja sobre el chip gráfico, que es el TDP o la proporción de memoria y el tipo de la misma, de esta forma como otras consideraciones de las mismas, pero hoy nos vamos a centrar en comentar de NVIDIA CUDA, la tecnología donde se fundamentan los chips de silicio de NVIDIA.
¿QUÉ ES CUDA?
La arquitectura NVIDIA CUDA es donde se fundamentan las tarjetas gráficas de NVIDIA destinadas a hacer el cálculo en paralelo, ofreciendo una enorme capacidad de cálculo en la GPU, lo cual facilita que el sistema tenga un enorme desempeño. NVIDIA hasta hoy vendió millones de graficas que tienen dentro la satisfacción NVIDIA CUDA, siendo muy valorada entre los programadores, estudiosos, investigadores y además los gamers. El segmento que más explota esta tecnología son los tres primeros, dado que NVIDIA CUDA facilita mover sin inconvenientes resoluciones dentro de los campos del procesamiento de video e imagen, la biología o la química computacional, la simulación dinámica de fluidos, el exámen sismológicos u otras tantas apps que necesitan de enorme capacidad de computo.
ARQUITECTURA NVIDIA CUDA
En la arquitectura tradicional de una tarjeta gráfica logramos hallar la existencia de dos tipos de procesadores, los procesadores de vértices y los procesadores de extractos, aplicados a tareas diferentes e indispensables dentro del cauce gráfico y con repertorios de normas diferentes. Esto muestra dos inconvenientes destacables, por un lado el desequilibrio de carga que hace aparición entre los dos procesadores y por otro la distingue entre sus propios repertorios de normas. De esta forma, la evolución natural en la arquitectura de una GPU fué la búsqueda de una arquitectura unificada donde no se distinguiera entre los dos tipos de procesadores. Asi se llegó a la arquitectura CUDA, donde todos los núcleos de ejecución requieren el mismo repertorio de normas y básicamente los mismos elementos.
Podemos consultar en la imagen la existencia de unas entidades de ejecución catalogados Uso contínuo Multiprocessors (SM), 8 entidades en el ejemplo de la figura, que están interconectadas entre sí por una región de memoria habitual. Cada SM está compuesto paralelamente por unos núcleos de computo llamados cuda cores ‘núcleos CUDA’, que son los responsables de realizar las normas y que en nuestro ejemplo observamos que hay 32 núcleos por cada SM, lo que hace un total de 256 núcleos de procesamiento. Este diseño de hardware facilita la programación simple de los núcleos de la GPU usando un lenguaje de prominente nivel como puede ser el lenguaje C para NVIDIA CUDA. De esta forma, el programador sencillamente redacta un programa secuencial dentro del cual se denomina a eso que se conoce como kernel, que puede ser una fácil funcionalidad o un programa terminado.
Este kernel se ejecuta de manera paralela dentro de la GPU como un grupo hilos (threads y que el programador organiza dentro de una jerarquía donde tienen la posibilidad de agruparse en bloques (blocks), y que paralelamente se tienen la posibilidad de repartir formando una malla (grid). Por intereses, los bloques y las mallas tienen la posibilidad de tener una, dos o 3D. Hay multitud de ocasiones en las que los datos con los que se trabaja tienen de manera natural una composición de malla, pero generalmente, descomponer los datos en una jerarquía de hilos no es una labor simple. Asi ya que, un bloque de hilos es un grupo de hilos concurrentes que tienen la posibilidad de cooperar entre ellos por medio de mecanismos de sincronización y comunicar accesos a un espacio de memoria único de cada bloque. Y una malla es un grupo de bloques que tienen la posibilidad de ser ejecutados independientemente y que entonces tienen la posibilidad de ser lanzados en paralelo en los Uso contínuo Multiprocessors (SM).
Cuando se invoca un kernel, el programador detalla el número de hilos por bloque y el número de bloques que constituyen la malla. Una vez en la GPU, a cada hilo se le da un exclusivo número de identificación dentro de su bloque, y cada bloque recibe un identificador dentro de la malla. Esto facilita que cada hilo decida sobre qué datos debe trabajar, lo que reduce de enorme manera el direccionamiento de memoria cuando se trabaja con datos multidimensionales, como es la situacion del procesado de imágenes o la resolución de ecuaciones diferenciales en dos y 3D.
Otro aspecto a poner énfasis en la arquitectura CUDA cores es la existencia de una unidad de organización de trabajo que tiene como función repartir los bloques entre los SM accesibles. Los hilos dentro de cada bloque se ejecutan concurrentemente y cuando un bloque acaba, la unidad de organización lanza nuevos bloques sobre los SM libres. Los SM mapean cada hilo sobre un núcleo SP, y cada hilo se ejecuta de forma sin dependencia con su contador de programa y registros de estado. Ya que cada hilo tiene asignados sus propios registros, no existe penalización por los cambio de contexto, pero en cambio sí hay un límite en el número más alto de hilos activos ya que cada SM tiene un número preciso de registros.
Una propiedad especial de la arquitectura CUDA es la agrupación de los hilos en grupos de 32. Un grupo de 32 hilos recibe el nombre de warp, y se puede tener en cuenta como la unidad de ejecución en paralelo, dado que todos los hilos de un mismo warp se ejecutan de forma física en paralelo y entonces empiezan en la misma instrucción (aunque luego son libres de bifurcarse y ejecutarse independientemente). De esta forma, cuando se selecciona un bloque para su ejecución dentro de un SM, el bloque se distribuye en warps, se selecciona uno que esté terminado para ejecutarse y se emite la siguiente instrucción a todos los hilos que forman el warp. Ya que todos ellos ejecutan la misma instrucción al unísono, la máxima eficacia se consigue cuando todos los hilos coinciden en su ruta de ejecución (sin bifurcaciones). Aunque el programador puede ignorar este accionar, conviene poseerlo presente si se quiere mejorar alguna aplicación.
En relación a la memoria, a lo largo de su ejecución los hilos tienen la posibilidad de entrar a los datos desde diferentes espacios dentro de una jerarquía de memoria. De esta forma, cada hilo tiene una región privada de memoria local y cada bloque tiene una región de memoria compartida aparente por todos los hilos del mismo bloque, con un alto ancho de banda y baja latencia (similar a una cache de nivel 1). Por último, todos los hilos pueden entrar a un mismo espacio de memoria global (del orden de MiB o GiB) localizada en un chip de afuera de memoria DRAM. Ya que esta memoria tiene una latencia muy elevada, es una aceptable costumbre copiar los datos que van a ser accedidos recurrentemente a la región de memoria compartida.
El modelo de programación CUDA asume que el host como el device mantienen sus propios espacios separados de memoria. La exclusiva región de memoria alcanzable desde el host es la memoria global. Además, tanto la reserva o liberación de memoria global como la transferencia de datos entre el host y el device debe hacerse de manera explícita desde el host por medio de llamadas a funcionalidades particulares de CUDA.
¿QUÉ ES LA ACELERACIÓN DE LA COMPUTACIÓN POR GPU?
El otro punto clave de los CUDA cores es la aceleración del procesamiento grafico cuando se combina una GPU con el procesador (CPU), lo cual facilita llevar a cabo apps a deep learning, exámen e ingeniería. Este sistema fue introducido por NVIDIA en el año 2017 y desde ese momento, las GPU se fueron instalando en centros de datos enormemente eficaces energéticamente en universidades, instalaciones gubernamentales, enormes compañias y PYMEs de todo el planeta. Estos tienen una enorme consideración en la aceleración de apps que van desde la IA (inteligencia artificial) hasta los coches, drones y robots.
¿CÓMO FUNCIONA ESTA ACELERACIÓN EN UTILIDADES DE SOFTWARE?
Este sistema de aceleración del cálculo en tarjetas gráficas, provoca que la más grande parte del peso de la carga de cómputo pase a la GPU, dejando que el código que sobra se ejecute en la únidad central de procesamiento. La transferencia del peso de la computación es automática y el usuario no debe llevar a cabo nada, únicamente, el usuario notara que las tareas paralizadas van a tener un desempeño más ágil.
Dicho sistema se enseña de forma más simple, si entendemos las diferencias simples entre un procesador y la tarjeta gráfica. Si observamos una únidad central de procesamiento desde adentro. Las únidad central de procesamiento se desarrollan con un número con limite de núcleos, entre otras cosas, un Intel i7 7700K tiene 4 núcleos, lo cual sugiere que son 4 procesadores para la computación en serie, en tanto que las GPU tiene una cantidad enorme de núcleos, más chicos, pero muchísimo más eficaces, los cuales son desarrollados para prestar múltiples tareas simultaneas. Un ejemplo evidente es la NVIDIA GTX 1080 Ti, la tarjeta gráfica destinada al gaming más fuerte del mercado, que nos da 3594 CUDA Cores.
Si quieres conocer más artículos parecidos a CUDA CORES de NVIDIA ¿ Qué son? puedes visitar nuestra portada y ver lo más reciente.
Deja una respuesta