Intrinsics Vs inline ASM para codificação SSE em VC++ 2K8
-
23-09-2019 - |
Pergunta
Já fiz alguma codificação ASM in-line para SSE antes e não foi também difícil mesmo para quem não conhece ASM.Mas observo que a MS também fornece intrínsecos envolvendo muitas dessas instruções especiais.
Existe uma diferença específica de desempenho ou algum outro motivo forte para que um seja usado acima do outro?
Repetindo o título, isso cobre especificamente os intrínsecos expostos pelo VC++ 2008 para C++ nativo não gerenciado.
Solução
Em geral, é melhor usar o Intrinsics - é mais produtivo para o programador e um bom compilador (por exemplo, Intel ICC) fará um trabalho decente de alocação de registro, agendamento de instruções etc. O compilador da Microsoft não é tão bom a esse respeito, mas provavelmente ainda Faz um trabalho razoável - você sempre pode mudar para a ICC mais tarde, se precisar obter melhor desempenho.
Outras dicas
Não há assembly embutido no Visual C++ para x64.Intrínsecos também podem ser usados em x64.Se você quiser portar seu código para x64, terá que usar intrínsecos.
Os intrínsecos são idênticos às suas instruções equivalentes de montagem e você deve usá -las se possível - o compilador sabe traduzi -las diretamente, não há diferença de desempenho.
Use intrínsecos.
O uso da montagem geralmente resulta em vários dias de trabalho ininterrupto, apenas para descobrir que o compilador supera o seu melhor desempenho em 5%. (5% se você é realmente bom; provavelmente 30%.)