CUDA Academy · Lección

Estructura de arrays frente a array de estructuras

Elija diseños que permitan fusionar accesos.

Lección 3 de 413 pasos

Estructura de arrays frente a array de estructuras es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 3 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.

Dos formas de almacenar registros

Suponga que cada partícula tiene x, y y z. Puede mantener estos datos juntos o separarlos, y esa elección cambia cómo se combinan todos los warps.

Array de estructuras

La disposición natural de C++ empaqueta los campos de cada registro uno junto a otro. Esto es un array de estructuras, abreviado a menudo como AoS.

struct Particle { float x, y, z; };
Particle p[N];

Por qué AoS dispersa los datos

Cuando un warp lee únicamente x de cada registro, los valores de x están separados por 12 bytes. Este stride integrado desperdicia la mayor parte de cada línea que carga.

float xi = p[i].x; // x values are spaced by sizeof(Particle)

Estructura de arrays

Hágalo al contrario: almacene juntos todos los valores de x, luego todos los de y y todos los de z. Esto es una estructura de arrays, o SoA.

float x[N];
float y[N];
float z[N];

Por qué SoA se combina

Ahora, leer x para 32 hilos toca 32 valores float contiguos. Eso equivale a una línea alineada y una única transacción ordenada por campo.

float xi = x[i]; // neighbors land in one line

La prueba de acceso a campos

Pregúntese cómo lee los datos su kernel. Si los hilos recorren un campo de muchos registros, SoA casi siempre ofrece mejores resultados en la GPU.

Cuándo AoS es adecuado

Si cada hilo utiliza juntos todos los campos de un registro, AoS los mantiene en una sola línea y favorece la caché.

Ancho de banda, no solo estilo

No se trata de una cuestión de gustos. Cambiar de AoS a SoA puede multiplicar el rendimiento real con los mismos cálculos, simplemente reduciendo los bytes desperdiciados.

Un punto medio híbrido

Puede agrupar algunos registros y después separar los campos dentro de cada grupo. Esta disposición AoSoA equilibra la combinación de accesos con la localidad de caché.

Diseñe antes de optimizar

Es difícil cambiar la disposición al final, ya que afecta a cada kernel y cada copia. Elija pronto su estructura SoA o AoS, guiándose por los patrones de acceso. 🧩

La correspondencia clave

Regla práctica para GPU: separe los campos en arrays para que cada warp lea un tramo contiguo. Prefiera SoA para kernels que procesan campos.

Comprobación rápida

Elija la disposición que combine este acceso.

Resumen

Ha comparado AoS y SoA: agrupe los campos para usar registros completos, pero sepárelos en arrays cuando los warps recorran un campo cada vez. 🎉

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 «Estructura de arrays frente a array de estructuras» es gratis?

Sí — el texto completo de «Estructura de arrays frente a array de estructuras» 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 «Estructura de arrays frente a array de estructuras»?

Elija diseños que permitan fusionar accesos. 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 3 de 4.

¿Cuánto tiempo toma la lección «Estructura de arrays frente a array de estructuras»?

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. Qué es una transacción de memoria
  2. Lecturas fusionadas frente a estriadas
  3. Estructura de arrays frente a array de estructuras
  4. Medir el ancho de banda efectivo
← Volver a CUDA Academy