Estrutura de vetores versus vetor de estruturas
Escolha organizações que permitam o acesso coalescido.
Estrutura de vetores versus vetor de estruturas é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CUDA Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CUDA Academy inclui 4 aulas no total.
Duas formas de armazenar registros
Suponha que cada partícula tenha x, y e z. O senhor pode mantê-los juntos ou separá-los, e essa escolha muda a forma como cada warp faz a coalescência.
Vetor de estruturas
O layout natural de C++ agrupa os campos de cada registro lado a lado. Isso é um vetor de estruturas, frequentemente abreviado como AoS.
struct Particle { float x, y, z; };
Particle p[N];Por que AoS dispersa os acessos
Quando um warp lê apenas x de cada registro, os valores de x ficam separados por 12 bytes. Esse passo incorporado desperdiça a maior parte de cada linha carregada.
float xi = p[i].x; // x values are spaced by sizeof(Particle)Estrutura de vetores
Inverta a organização: armazene todos os valores de x juntos, todos os valores de y juntos e todos os valores de z juntos. Isso é uma estrutura de vetores, ou SoA.
float x[N];
float y[N];
float z[N];Por que SoA faz coalescência
Agora, ler x para 32 threads acessa 32 números de ponto flutuante contíguos. Isso corresponde a uma linha alinhada e a uma transação organizada por campo.
float xi = x[i]; // neighbors land in one lineO teste de acesso aos campos
Pergunte como seu kernel lê os dados. Se as threads percorrem um campo em vários registros, SoA quase sempre vence na GPU.
Quando AoS é adequado
Se cada thread usa todos os campos de um registro em conjunto, AoS os mantém na mesma linha e continua favorecendo o cache.
Largura de banda, não apenas estilo
Isso não é uma questão de gosto. Trocar AoS por SoA pode multiplicar a vazão real para a mesma matemática, simplesmente reduzindo os bytes desperdiçados.
Um meio-termo híbrido
O senhor pode agrupar alguns registros e depois separar os campos dentro de cada grupo. Esse layout AoSoA equilibra a coalescência com a localidade do cache.
Projete antes de otimizar
É difícil alterar o layout posteriormente, pois ele afeta todos os kernels e cópias. Escolha cedo entre SoA e AoS, orientando-se pelos padrões de acesso. 🧩
O mapeamento essencial
Regra prática para GPUs: separe os campos em vetores para que cada warp leia uma sequência contígua. Prefira SoA para kernels que operam por campo.
Verificação rápida
Escolha o layout que faz este acesso ser coalescido.
Recapitulação
Você comparou AoS e SoA: agrupe os campos para usar o registro inteiro, mas divida-os em matrizes quando as warps percorrerem um campo por vez. 🎉
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Estrutura de vetores versus vetor de estruturas” é grátis?
Sim — o texto completo de “Estrutura de vetores versus vetor de estruturas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CUDA Academy, atualize para CoddyKit PRO. O curso de CUDA Academy inclui 4 aulas no total.
O que vou aprender em “Estrutura de vetores versus vetor de estruturas”?
Escolha organizações que permitam o acesso coalescido. Você pratica CUDA Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar CUDA Academy?
Nenhuma experiência prévia é necessária. CUDA Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Estrutura de vetores versus vetor de estruturas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de CUDA Academy?
Sim. Cada aula de CUDA Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O que é uma transação de memória
- Leituras coalescidas versus entrelaçadas
- Estrutura de vetores versus vetor de estruturas
- Meça a largura de banda efetiva