← Últimos artículos
💻 computer science

What Irregularity Costs: CUDA C++, Rust, and Triton on a Hash-Blocked GPU Workload

Este artículo demuestra que, si bien CUDA C++, Rust y Triton se comportan de manera similar en cargas de trabajo regulares de GPU, su eficiencia diverge drásticamente en tareas de bloqueo de hash irregulares debido a las limitaciones específicas del lenguaje para expresar operaciones atómicas y límites de bucle, sufriendo Rust de problemas de coherencia de caché y Triton de atómicos no enmascarables y restricciones de bucle en tiempo de compilación.

Autores originales: Petr Korolev (Spacial Intelligence Labs)

Publicado 2026-08-11
📖 7 min de lectura🧠 Análisis profundo

Autores originales: Petr Korolev (Spacial Intelligence Labs)

Artículo original bajo licencia CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo

El Escenario y los Jugadores

Imagina que estás intentando construir un modelo 3D de una habitación utilizando una cámara que toma miles de fotografías. Para que esto suceda, tu computadora necesita organizar una cantidad masiva de datos sobre cada pequeña parte del espacio en esa habitación. Este es el mundo de la programación de GPU, donde las "GPUs" son esos chips gráficos súper rápidos dentro de las computadoras que también son brillantes realizando millones de cálculos matemáticos a la vez.

Normalmente, cuando la gente compara diferentes lenguajes de programación para estos chips, los prueban en tareas muy ordenadas y predecibles, como multiplicar cuadrículas gigantes de números. Es como probar un coche de carreras en una autopista perfectamente recta y vacía. Cada carril es igual y cada conductor sabe exactamente cuánto durará la carrera. Pero el mundo real es caótico e impredecible. En aplicaciones como la realidad virtual o la navegación de robots, la computadora tiene que lidiar con datos caóticos y desordenados. Es como enviar ese mismo coche de carreras a una calle de ciudad congestionada y sinuosa, donde ocurren atascos de tráfico de forma aleatoria y los conductores tienen que detenerse y arrancar constantemente. Este artículo plantea una pregunta simple pero crucial: Cuando el camino se vuelve caótico, ¿todos los lenguajes de programación se comportan igual, o algunos se quedan atrapados en el tráfico mientras otros avanzan a toda velocidad?

El Gran Duelo de Lenguajes de GPU

En este estudio, los investigadores tomaron tres formas populares de hablar con estos superchips —CUDA C++ (el estándar clásico escrito a mano), Rust (un lenguaje moderno conocido por su seguridad) y Triton (una herramienta más nueva diseñada para facilitar la codificación)— y los pusieron a trabajar en una tarea muy específica y caótica: construir un mapa 3D de una habitación utilizando una "tabla hash".

Piensa en una tabla hash como un vestuario gigante y caótico. Tienes a miles de personas (puntos de datos) intentando encontrar un casillero (un lugar en la memoria) para guardar sus cosas. A veces, el casillero que quieren está vacío, así que lo toman. Pero a menudo, el casiller ya está ocupado, por lo que tienen que revisar el siguiente, y el siguiente, hasta que encuentren un espacio libre. En un mundo perfecto, todos encuentran un casillero instantáneamente. En este tipo de carga de trabajo "irregular", algunas personas encuentran casilleros inmediatamente, mientras que otras tienen que buscar durante mucho tiempo, y todos están peleando por los mismos pocos casilleros al mismo tiempo.

Los investigadores ejecutaron exactamente el mismo trabajo en los tres lenguajes y midieron qué tan rápido terminaron. Los resultados fueron impactantes: los lenguajes se comportaron de manera completamente diferente dependiendo del tipo de trabajo.

La Parte "Regular": Un Empate Técnico

Primero, probaron la parte "regular" del trabajo, que es como caminar por un pasillo y pintar cada pared que veas. Esta parte es predecible. En esta tarea, los tres lenguajes fueron casi idénticos. Ya fuera que usaras el clásico CUDA, el moderno Rust o el fácil de usar Triton, terminaron casi en el mismo tiempo. Si solo observaras estas pruebas ordenadas y predecibles (que es lo que hacen la mayoría de los otros estudios), pensarías que no importa qué lenguaje elijas.

La Parte "Irregular": La Gran División

Luego, probaron la parte "irregular": la búsqueda caótica en el vestuario. Aquí es donde la historia cambia drásticamente.

  • Rust vs. CUDA C++: El lenguaje Rust funcionó casi tan bien como el CUDA C++ escrito a mano. Fue solo un poco más lento (aproximadamente un 1% a 3% en algunos casos), lo cual es prácticamente un empate. Rust demostró que podía manejar el tráfico caótico e impredecible tan bien como el veterano.
  • La Lucha de Triton: Triton, sin embargo, chocó contra un muro masivo. En la tarea de búsqueda caótica, era más de 10 veces más lento que los otros dos. En algunas pruebas del mundo real con escaneos de habitaciones reales, era casi 30 veces más lento.

¿Por qué se Atascó Triton?

Los investigadores no se limitaron a decir "Triton es lento"; descubrieron exactamente por qué estaba atascado, y no fue porque el código estuviera mal escrito. Fue debido a cómo está construido el lenguaje.

Imagina que Triton es un profesor estricto que insiste en que cada estudiante en una clase debe permanecer en su asiento durante un tiempo fijo, incluso si terminan su trabajo temprano. En el vestuario caótico, algunos hilos (estudiantes) encuentran un casillero en un segundo, mientras que otros tardan diez segundos.

  • El Problema: Triton obliga a los hilos rápidos a esperar en un bucle hasta que el hilo más lento termine, aunque no tengan nada más que hacer. Es como una carrera donde el ganador tiene que quedarse quieto y esperar a que la última persona cruce la línea de meta antes de que nadie pueda abandonar la pista.
  • El Probleo de la "Máscara": Además, Triton carece de una herramienta específica (llamada "máscara") que permita a los hilos rápidos dejar de trabajar por completo. En su lugar, tienen que seguir ejecutando una tarea ficticia, desperdiciando energía y obstruyendo el sistema. Los investigadores descubrieron que esta decisión de diseño obligó a la computadora a realizar una cantidad masiva de trabajo inútil, ralentizando todo por un factor de 10 a 30.
  • Un Peligro Oculto: También hubo un problema de seguridad. Debido a que Triton impone un límite de tiempo fijo para la búsqueda, si el vestuario se llena demasiado, la búsqueda podría rendirse y dejar de buscar. Esto significa que la computadora descarta silenciosamente partes de la habitación 3D, creando agujeros invisibles en el modelo final. Los investigadores descubrieron que, en ciertos niveles de congestión, Triton perdía secciones enteras de la superficie, mientras que los otros lenguajes las encontraban perfectamente.

Por Qué Rust Era un Poco Más Lento (La Trampa Invisible)

Rust estuvo muy cerca de ganar, pero no fue tan rápido como el código CUDA escrito a mano. Los investigadores pasaron mucho tiempo tratando de averiguar por qué, revisando el número de instrucciones y la memoria utilizada. Descubrieron que Rust en realidad estaba haciendo menos trabajo que CUDA, y aun así era más lento.

El culpable fue una trampa oculta en cómo Rust maneja la seguridad. Rust tiene una característica que hace que la lectura de datos compartidos sea "segura" al asegurar que todos vean la misma versión. Sin embargo, en estos chips específicos, la forma "segura" de leer datos obliga a la computadora a saltarse su caché de memoria más rápida y dirigirse a una más lenta. Es como un guardia de seguridad que insiste en revisar cada uno de los paquetes en la puerta principal, a pesar de que los paquetes ya se sabe que son seguros. Este paso adicional ralentizó a Rust aproximadamente un 20-30%, pero fue un precio minúsculo comparado con la enorme ralentización de Triton.

La Conclusión

La lección principal de este artículo es que no puedes juzgar un lenguaje de programación solo por cómo se desempeña en tareas ordenadas y predecibles.

Si solo realizas pruebas en la autopista "regular", Rust, CUDA y Triton parecen campeones. Pero una vez que los lanzas al tráfico caótico de la ciudad del mundo real del mapeo 3D, los resultados se dividen abismalmente.

  • Rust es un fuerte contendiente, manteniéndose casi tan rápido como el mejor código escrito a mano.
  • Triton, aunque es excelente para tareas ordenadas, lucha con dificultad ante el trabajo caótico e impredecible, volviéndose decenas de veces más lento y potencialmente perdiendo datos sin que nadie lo note.

Los investigadores concluyen que, para tareas que involucran datos desordenados del mundo real, elegir el lenguaje equivinto no es solo un pequeño inconveniente; puede hacer que tu programa sea inutilmente lento o causar que falle silenciosamente. También descubrieron que muchos estudios previos pasaron esto por alto porque solo probaron las partes "regulares", dejando las partes peligrosas y desordenadas sin explorar.

¿Ahogado en artículos de tu campo?

Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.

Probar Digest →