LINUX.ORG.RU

SSE

 


0

1

Всем привет, нужно сделать реализацию сложения чисел float с накоплением, для 16 битных целых есть такое _mm_madd_epi16, а для точки найти не могу, есть варианты?

★★

То что ты хочешь стоит поискать по словам «Accurate summation», люди до сих пор пишут новые алгоритмы и диссертации по этой теме. И даже Кнут в своих трудах задел только вершину айсберга.

Для затравки, алгоритм Кэхэна: https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D1%8D%D1%85%D1%8D%D0%BD%D0%B0

Для примера можно посмотреть исходный код Питоновской math.fsum: https://github.com/python/cpython/blob/ef6e44d392dc45a60b4699a6dd9dbae875a50b2f/Modules/mathmodule.c#L1420

Или этот микро обзор: https://accurate-algorithms.readthedocs.io/en/latest/ch04summation.html

В зависимости от того, сколько памяти можно потратить, можно ли отсортировать массив, или использовать его для промежуточных данных, выбирают то или иное решение. При этом надо понимать, что чем больше чисел ты складываешь, тем больше чисел требуется для хранения точного результата. А вот аппаратных решений не видел, хотя можно применить тот же SumK над векторами.

AlexVR ★★★★★
()
Ответ на: комментарий от zerhud

Да,сами нашли, ключевое слово _mm256_fmadd_ps, это AVX

PETER ★★
() автор топика
Последнее исправление: PETER (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.