CUDA Academy · Aula

Estrutura de vetores versus vetor de estruturas

Escolha organizações que permitam o acesso coalescido.

Aula 3 de 413 etapas

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 line

O 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. 🎉

Grátis para começar

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

  1. O que é uma transação de memória
  2. Leituras coalescidas versus entrelaçadas
  3. Estrutura de vetores versus vetor de estruturas
  4. Meça a largura de banda efetiva
← Voltar para CUDA Academy