Добро пожаловать в сеть Intel® Software Network вход | зарегистрироваться | помощь |
Поиск в форумах и блогах Intel® Software Network
в Вперед

сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

Последнее сообщение 10-04-2008, 11:43 размещено ksili. Ответов - 5.
Сортировать сообщения: Назад Вперед
 09-03-2008, 14:32 30221320  

сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

Я тут посмотрел, длительность вычисления в тактах синуса и косинуса, со времен появления встроенного FPU, как-то совсем не уменьшилась. Иногда она даже наоборот становилась больше. Хотелось бы спросить у инженеров Intel, какой там вообще алгоритм заложен для этого? Если всё так печально, то думаю это не большой секрет. Может там используется усечённый ряд Тейлора или что-то другое? Хотелось бы узнать поконкретнее.
Про Itanium 2 я где-то читал, что он последие годы лидирует среди серверных процессоров в вычислениях с плавающей запятой. Однако конкретно по тактам для инструкций не нашёл. Наверно это связано с архитектурой. Там же команды собираются пакеты (суперкоманды?), которые выполняются разом. Т.е. для одной команды сложно назвать latency. Если это так, прошу подтвердить. Если там трансцендентные функции считаются быстрее, чем в x86, хотелось бы узнать, за счёт чего?

Пишу в этот подфорум, т.к. более подходящего не нашёл.
 
 09-04-2008, 14:48 30221321 в ответ на30221320  

На: сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

Все правильно - FPU с момента появления SSE2 менялся мало. FSIN,FCOS и др считаются по программе в микрокоде, точный алгоритм сказать не могу, там используется полиноминальная аппроксимация насколько я знаю. Сейчас FPU практически не используется при вычислениях, компилятор Intel генерирует SSE2 код для трансцендентных фунций. В состав входит библиотека SVML, которая вычисляет значение сразу для 2-х или 4-х операндов за то же время.... На Itanium подход тот же, есть библиотека, которая вычисляет функции через полиномы/ряды. У нас на сайте можно поискать библиотеку Amath, которая считает многие функции с 12-битной точностью, зато очень быстро... примерно 70 тактов на синус 4-х операндов.


Vadim Sukhomlinov,
Intel, Enterprise Software Enabling
 
 09-04-2008, 15:46 30221322 в ответ на30221321  

На: сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

1) Что значит синус 4-х операндов? т.е. если программе надо посчитать sin(x), то библиотека считает сразу sin(x), sin(x+step), sin(x+2*step), sin(x+3*step)? Или как-то по-другому? 2) Про неиспользование FPU это вы меня удивили. Неужели так? Где приведена такая статистика? По-моему FPU бесплатен, а библиотеки платны, так что забывать его не стоит 3) А в FPU точность сколько разрядов, конкретно для синуса?
 
 09-12-2008, 17:43 30221325 в ответ на30221322  

На: сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

Amath я скачал, сейчас смотрю. Трудно сразу врубиться в код на ассемблере. Попутно ещё подобные работы нашёл. Насколько я понял, во всех них один подход: жертвуют точностью (используя аппроксимацию) во благо скорости. Это всё понятно.
У меня другой вопрос возник. В SSE, SSE2 и SSE3 нет тригонометрических функций. Значит, раз для них интеловский компилятор генерит SSE2-код, то он тоже использует аппроксимацию какой-то функцией. Какова его точность? Ну и интересно бы было саму функцию узнать.
И ещё: почему не использовать что-то подобное в FPU для ускорения его работы? Или там и так используется полином, но из-за требований точности у него много членов, поэтому так долго и считается?
 
 09-30-2008, 10:25 30221350 в ответ на30221325  

На: сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

В библиотеке Intel (R) Integrated Perfomance Primitives есть специальные функции (например, ippsSin_32f_A21, ippsSinCos_64f_A53) , которые поэлементно вычисляют значения SIN, COS итд от вектора. Причем разные функции  делают это с разной точностью (естественно, меньше точность - меньше времени тратится). Точности фиксированные - 11, 21, 24,  50, 53 двоичных разряда.

Здесь можно посмотреть/скачать Intel (R) IPP

http://www3.intel.com/cd/software/products/emea/rus/perflib/358826.htm"

"А в FPU точность сколько разрядов, конкретно для синуса? "

Это зависит от установленной точности FPU (3 вида: float, double, long double). Опять же, выше точность - дольше считатет. Точность устанавливается установкой соответсnвующих битов в слове управления FPU.

 
 10-04-2008, 11:43 30221351 в ответ на30221350  

На: сложность вычисления трансцендентных фунций (FSIN, FCOS, FSINCOS)

Про слово управления FPU я знаю. Но насколько я знаю, FPU все вычисления выполняет в расширенной точности (80 бит), а 32 и 64-разрядные величины использует для обмена с процессором, т.е. берет и округляет уже после вычислений.
В вопросе я имел в виду следующее: вот посчитал он синус определённого аргумента, результат занял все 80 бит. Сколько из этих бит совпадают с реальным значением синуса данного аргумента? Все 80? Или на хвосте сколько-то малозначащих битов не совпадают даже у FPU?
 
Просмотреть как поток новостей RSS в XML

Ярлыки


Тег для данного сообщения

...

Теги сообщества

...