Atómicos personalizados con atomicCAS
Use compare-and-swap para cualquier actualización.
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. ✅
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
- Condiciones de carrera en la GPU
- atomicAdd y funciones similares
- Construir un histograma
- Atómicos personalizados con atomicCAS