Vetorização SSE & AVX
menotti
167.7K views
Palavras finais
Neste curso, você deve ter obtido um bom nível de compreensão sobre vetorização manual e automática de CPU:
- Requisitos de Hardware e software para usar instruções SSE e AVX no seu código.
- Os tipos de dados de vetores disponíveis.
- Informação sobre como checar o uso de autovetorização e dicas se loopes podem ser autovetorizados.
- Frameworks de vetores em C++.
- Mascaramento e carga condicional.
- Controle do fluxo de dados.
Prós e contras
As vetorizações AVX e SSE são interessantes e, teoricamente, seu uso traz mais benefícios que qualquer otimização linear.
Prós
- Ganhos potenciais de 300% a 600% de performance quando comparados a código linear.
- Similaridades com CUDA, programação vetorizada no nível de GPU.
Contras
- A performance depende do hardware em que o código está sendo rodado.
- Má performance quando há muito carregamento e descarregamento de dados.
- O fluxo de dados pode se tornar bem difícil de controlar, e o tempo de execução de cada valor dentro do vetor afeta o tempo de execução geral. Você não pode sair antes que todos os valores satisfaçam a condição de saída.
- É complexo para programar.
- Carece de funções instrínsecas: Trigonometria, números aleatórios, divisão de inteiros.
Outros cursos
Em desenvolvimento: Offline MarsLander solver using a Genetic Algorithm (AVX enabled)/
Jogos Multiplayer Codingame
Simulações com uso de AVX podem ser feitas em alguns Jogos Multiplayer Codingame:
- Coders Strike Back Minha versão do AVX alcançou entre 2.5 e 3.5 milhões de simulações por turno, com turnos de 150 milisegundos. Isso é feito paralelizando 8 simulações de estadoos jo jogo ao mesmo tempo. Uma versão anterior com cálculos seriais (isto é, com dados fora do AVX, colocando-os dentro de vetores AVX, calculando e, depois, retirando o resultado) alcançou apenas 600k simulações/turno.
- Poker Chip Racer Performance é bem dependente do número de indivíduos, entre 100k e 1.5M simulações/turno. Os turnos duram 150ms também.
Vários outros jogos podem ser paralelizados e simulados usando vetores AVX/SSE.
Links úteis
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Suggested playgrounds