Como implementar atoi usando SIMD?

Eu gostaria de tentar escrever uma implementação atoi usando instruções SIMD, para ser incluída noRapidJSON (uma biblioteca de leitor / gravador C ++ JSON). Atualmente, há algumas otimizações do SSE2 e SSE4.2 em outros locais.

Se for um ganho de velocidade, váriosatoi os resultados podem ser feitos em paralelo. As strings são originalmente provenientes de um buffer de dados JSON, portanto, uma função multi-atoi precisará fazer qualquer swizzling necessário.

O algoritmo que criei é o seguinte:

Posso inicializar um vetor de comprimento N da seguinte maneira: [10 ^ N..10 ^ 1]Eu converto cada caractere no buffer em um número inteiro e os coloco em outro vetor.Pego cada número no vetor de dígitos significativos e multiplico-o pelo número correspondente no vetor de números e soma os resultados.

Estou direcionando arquiteturas x86 e x86-64.

Eu sei que o AVX2 suporta três operandos Fused Multiply-Add, para que eu possa executar Soma = Número * Dígito Significativo + Soma.
Foi aí que cheguei até agora.
Meu algoritmo está correto? Existe uma maneira melhor?
Existe uma implementação de referência para atoi usando qualquer conjunto de instruções SIMD?