Функция C и C++ double floor(double arg)
(определенная в cmath
и math.h
) возвращает наибольшее целое значение не более arg
. Каков наиболее эффективный способ его векторизации с помощью инструкций AVX?Как реализовать пол (двойной) в AVX?
По сути, то, что я хочу
__m256d floor(__m256d arg);
Нужно ли преобразовать в целое и обратно?
Хотите поддерживать значения больше, чем 2^31? – anatolyg
Я не думаю, что вы даже можете безопасно преобразовать в целое число, потому что нет конвертированного двойного> 64-битного преобразования до AVX512, только скалярного CVTTSD2SI r64, xmm/m64'. Хорошо, что SSE4.1 'roundpd'. : P –