Какие математические методы реализованы в оборудовании fpu с .net? - PullRequest
1 голос
/ 16 декабря 2009

Кто-нибудь знает, какие математические методы реализованы аппаратным обеспечением процессора для .net? Например, у меня есть алгоритм, который широко использует atan. Я могу легко написать таблицу поиска для этого, но если math.net реализует это, используя fpu или другие аппаратные расширения, это не будет стоить этого.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2009

Почему бы просто не сравнить свой подход к таблице поиска с atan (), предоставляемым .net. Тогда вы сможете четко определить, какая разница в скорости при использовании справочной таблицы действительно составляет.

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

1 голос
/ 17 декабря 2009

Вопрос о том, реализованы ли методы с использованием аппаратных инструкций x87, не имеет значения, потому что аппаратные инструкции трансцендентных функций медленны.

В «Справочном руководстве по оптимизации архитектур Intel 64 и IA-32» (скачать здесь ) перечислено fpatan с задержкой 150-300 циклов на новейшем оборудовании. Хорошо написанная программная реализация может обеспечить полную точность результатов с двойной точностью за значительно меньшее время - действительно, высококачественные математические библиотеки делают именно это.

1 голос
/ 16 декабря 2009

Согласно этому блогу, JIT-компилятор Microsoft использует преимущества инструкций FPU на платформе x86:

http://blogs.msdn.com/davidnotario/archive/2004/10/26/247792.aspx

Это довольно элементарная вещь, поскольку FPU уже более десяти лет являются стандартом для процессоров x86.

0 голосов
/ 16 декабря 2009

В небольшом приложении для тестирования производительности получается, что даже если используется fpu, производительность Math.Atan2 не так хороша, как у альтернативной функции аппроксимации.

В моем простом тесте цикл Math.Atan2 занимает 8 секунд, а приблизительная версия - 5,5 секунд.

...