Ускорение целочисленного дивизиона с двойнымC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ускорение целочисленного дивизиона с двойным

Сообщение Anonymous »

У меня есть проект по математике с фиксированной точкой, и я хотел ускорить целочисленные подразделения. Я протестировал двойное разделение с SSE4 и AVX2 и получил почти 2x ускорения по сравнению с скалярным целочисленным делением. Интересно, смогу ли я безопасно позволить себе эту оптимизацию, но она должна быть переносимой по платформам, которые поддерживают 64-битное разделение с плавающей точкой (x64 и ARMV8). < /P>
Гарантируется ли, что преобразование 32-разрядного подписанного или неподтвержденного целых числа удвоится, разделяя и уточняя результат, что дает точное деление интерального подразделения? (За исключением случаев UB, таких как разделение по ноль и int_min/-1 , конечно):
Ниже приведен код ISPC, экспортируемая функция вызывается из C ++:

Код: Выделить всё

export void double_division(const uniform int32 dividends[], const uniform int32 divisors[], uniform int32 quotients[], uniform int32 remainders[], uniform int32 Count)
{
assume(Count % programCount == 0);
foreach(i = 0 ... Count)
{
quotients[i] = (double)dividends[i] / (double)divisors[i];
remainders[i] = dividends[i] - quotients[i] * divisors[i];
}
}
Поскольку в дубле есть 53-битная мантисса (52 явных бита + 1 неявные), они могут точно представлять все целые числа в диапазоне от -2^53 до 2^53 (вики), что охватывает 32-битные целые числа. И это портативные на разных платформах, которые поддерживают 64-разрядное разделение с плавающей запятой?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... th-doubles
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»