Когда вы упомянули об этом в IRC, я был в странном настроении и потратил некоторое время на его оптимизацию. Теперь он работает как минимум в 4 раза быстрее на моем Mac, не считая флагов оптимизации компилятора, и даже больше на некоторых других платформах.
Я... невежественен, когда дело доходит до высшей математики, но я знаю кое-что об оптимизации. Я считаю, что вычисление здесь такое же, как и в оригинале, за исключением замены системы cexp() на вашу реализацию в expc(), и он дает идентичный результат. Вы сами решаете, достаточно ли он численно стабилен для вас.
Как заметил Брайан Свифт, powc() стоит дорого, и это из-за функций log() и pow().
Вещи, которые были большими победами:
- вычисления в pjtheta() и pjtheta3() можно комбинировать
- это вычисление может быть сделано внутренним циклом в newt(), и часть его может быть перемещена из внутреннего или обоих циклов
- cpow() может быть медленнее для Брайана (и для меня), но cexp() определенно быстрее, чем ваш код, по крайней мере, на моих машинах. попробуй оба варианта
- -ffast-math в флагах компилятора убирает поддержку соответствия стандартам с некорректными числами и значительно ускоряет работу.
Еще одним большим успехом стало преобразование арифметики в cexp() и cpow() в одинарную точность, но это дало немного другие результаты, которые вас могут волновать или не волновать.
Вы можете больше не узнавать программу, но она находится по адресу:
https://github.com/cgull/allegra.git
Я заметил еще пару вещей и выкинул из этого еще 25%-33% (черт возьми, это итеративная функция, которая сходится!)
Я уверен, что кто-то, кто разбирается в высшей математике лучше меня, мог бы найти там еще 2-4-кратную производительность...
person
cgull
schedule
07.07.2012
clang
C, чем с их gcc. - person Brian Swift   schedule 14.04.2012icc
отличная идея. Мне любопытно, сколько улучшений вы видите с ним по сравнению сgcc
. - person Brian Swift   schedule 15.04.2012icc
сгенерированный код, который работал в 7 раз быстрее, чем gcc, впечатляет. (Также спасибо за упоминание icc, я не знал, что Intel предоставляет свои инструменты разработки бесплатно для некоммерческого использования в Linux). - person Brian Swift   schedule 16.04.2012