2016-02-29 9 views
3

Функция C и C++ double floor(double arg) (определенная в cmath и math.h) возвращает наибольшее целое значение не более arg. Каков наиболее эффективный способ его векторизации с помощью инструкций AVX?Как реализовать пол (двойной) в AVX?

По сути, то, что я хочу

__m256d floor(__m256d arg); 

Нужно ли преобразовать в целое и обратно?

+0

Хотите поддерживать значения больше, чем 2^31? – anatolyg

+0

Я не думаю, что вы даже можете безопасно преобразовать в целое число, потому что нет конвертированного двойного> 64-битного преобразования до AVX512, только скалярного CVTTSD2SI r64, xmm/m64'. Хорошо, что SSE4.1 'roundpd'. : P –

ответ

4

Это внутренняя существует как _mm256_floor_pd

+0

Ooops. По какой-то причине он уклонился от моего поиска. – Walter

+2

@Walter: это происходит со всеми нами :) Руководство по интригам, которое я связал, отлично подходит для поиска. – Bahbar