CUDA Academy · Lección

Atómicos personalizados con atomicCAS

Use compare-and-swap para cualquier actualización.

Lección 4 de 413 pasos

Atómicos personalizados con atomicCAS es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CUDA Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CUDA Academy incluye 4 lecciones en total.

Cuando se agotan las operaciones integradas

Las operaciones atómicas integradas cubren la suma, el máximo, el intercambio y mucho más. Pero ¿qué ocurre si necesita una actualización atómica que no proporcionan? Conozca atomicCAS. 🔁

Comparar e intercambiar

atomicCAS significa compare-and-swap, es decir, comparar e intercambiar. Escribe un valor nuevo únicamente si el valor actual coincide con el esperado, todo en un único paso atómico.

atomicCAS(addr, expected, desired);

Qué devuelve

atomicCAS devuelve el valor que estaba almacenado realmente. Si coincide con el valor esperado, el intercambio se realizó correctamente; de lo contrario, otra persona lo cambió antes.

El bucle de reintento

El patrón básico es un bucle: lea el valor actual, calcule el nuevo, intente realizar el intercambio y repita hasta que atomicCAS confirme que se ha realizado correctamente.

Un bucle CAS en código

Este bucle sigue reintentándolo hasta que ningún otro hilo se interpone entre la lectura y la escritura. Esa es la esencia de un atómico personalizado.

do {
  old = *addr;
  newv = f(old);
} while (atomicCAS(addr, old, newv) != old);

Construya cualquier operación

Sustituya f por cualquier función y obtendrá una versión atómica de ella. CAS permite crear actualizaciones que el hardware nunca ofreció directamente.

Float atómico en hardware antiguo

Antes de que existieran los atómicos nativos para float, se emulaba atomicAdd para valores float mediante atomicCAS sobre el patrón de bits, usando trucos con __int_as_float.

Por qué el bucle puede quedar girando

Bajo una contención intensa, el intercambio suele fallar y reintentarse. Cada fallo significa que otro hilo ganó, por lo que las direcciones hot hacen que los bucles CAS giren durante más tiempo.

El progreso está garantizado

Aunque haya reintentos, el algoritmo no usa bloqueos (lock-free): cada vez que falla un intercambio, algún otro hilo ha progresado sin duda. El sistema nunca se detiene.

Haga coincidir el ancho

atomicCAS funciona con anchos específicos, como 32 y 64 bits. Convierta sus datos al tipo entero correspondiente para que la comparación opere sobre los bits sin procesar.

Prefiera primero las funciones integradas

Use una función atómica integrada cuando exista; será más rápida y sencilla. Use atomicCAS solo para las actualizaciones personalizadas que ninguna otra función cubra.

Comprobación rápida

Compruebe su comprensión de compare-and-swap.

Repaso: atómicos personalizados

Ha aprendido que atomicCAS, junto con un bucle de reintento, permite crear cualquier actualización atómica, no usa bloqueos, pero puede girar bajo contención. ✅

Gratis para empezar

Aprende C++ con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Atómicos personalizados con atomicCAS» es gratis?

Sí — el texto completo de «Atómicos personalizados con atomicCAS» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CUDA Academy, actualiza a CoddyKit PRO. El curso de CUDA Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Atómicos personalizados con atomicCAS»?

Use compare-and-swap para cualquier actualización. Practicas CUDA Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar CUDA Academy?

No se requiere experiencia previa. CUDA Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Atómicos personalizados con atomicCAS»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de CUDA Academy?

Sí. Cada lección de CUDA Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Condiciones de carrera en la GPU
  2. atomicAdd y funciones similares
  3. Construir un histograma
  4. Atómicos personalizados con atomicCAS
← Volver a CUDA Academy