Как реализовать atoi с помощью SIMD?

Я хотел бы попытаться написать реализацию atoi с использованием инструкций SIMD, которая будет включена вRapidJSON (библиотека для чтения / записи C ++ JSON). В настоящее время он имеет некоторые оптимизации SSE2 и SSE4.2 в других местах.

Если это увеличение скорости, несколькоatoi результаты могут быть сделаны параллельно. Первоначально строки поступают из буфера данных JSON, поэтому многопользовательская функция должна выполнять любые необходимые действия.

Алгоритм, который я придумал, следующий:

Я могу инициализировать вектор длины N следующим образом: [10 ^ N..10 ^ 1]Я конвертирую каждый символ в буфере в целое число и помещаю их в другой вектор.Я беру каждое число в векторе значащих цифр и умножаю его на соответствующее число в векторе чисел и суммирую результаты.

Я ориентируюсь на архитектуры x86 и x86-64.

Я знаю, что AVX2 поддерживает три операнда Fused Multiply-Add, так что я смогу выполнить Sum = Number * Значительная цифра + Sum.
Вот где я так далеко.
Мой алгоритм правильный? Есть ли способ лучше?
Существует ли эталонная реализация для atoi с использованием каких-либо SIMD-инструкций?

Ответы на вопрос(0)

Ваш ответ на вопрос