2013-06-11 2 views
-1

Я передаю программу FORTRAN Monte Carlo на C++ и обнаружил, что при полной передаче программа на C++ работает почти в два раза медленнее, чем программа FORTRAN. Я пытаюсь подготовить вторую версию программы на C++, где многие функции вводятся в линию с использованием структур классов для ускорения работы; однако некоторые из функций превышают 40 или 50 строк, и я прочитал, что приведение больших функций в линию может замедлить работу программы. Что слишком велико, когда дело доходит до ввода функций в линию и как я могу ускорить работу на C++ (без многопроцессорной обработки), чтобы программа на C++ могла работать так же быстро или почти так же быстро, как программа FORTRAN?Как ускорить выполнение C++ с помощью встроенных функций?

+2

Невозможно сказать, не видя результатов запуска профилировщика в вашей программе. – dasblinkenlight

+2

Вы уверены, что накладные расходы вызваны вызовами функций? – juanchopanza

+3

Вы использовали какой-либо инструмент для профилирования, чтобы сначала увидеть, где именно находятся узкие места? – OldProgrammer

ответ

1

Вложение в C++ - это только предложение для компилятора. Если функция слишком сложная, она не будет встроена большинством современных компиляторов. Компилятор сделает все возможное, чтобы оптимизировать вызовы в любом случае, даже без ключевого слова inline, до тех пор, пока реализация будет доступна, когда она будет скомпилирована. Существуют также компиляторы, которые будут встроены в единицы компиляции, но это менее распространено.

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

+0

Позвольте задать вопрос другим способом. Я привык к FORTRAN, где компилятор уже оптимизирован для эффективности и скорости, поэтому многие из комментариев, сделанных здесь, несовместимы со мной. Какие другие факторы могут привести к тому, что код будет работать медленнее и какие инструменты я могу использовать, чтобы определить, какие из них наиболее ответственны. Я никогда не использовал инструмент профилирования, и в результате я не знаю, где его получить, любые предложения о том, где найти документ с документацией о том, как его использовать, будут значительно восприняты. – Jon

+0

В какой среде вы работаете? Linux? Окна? OSX? И C++ также оптимизирован для эффективности и скорости. Скорее всего, некоторая библиотека, которую вы используете, не так быстро, как в Fortran. – Joel

+0

Я использую OSX с XCode; тем не менее, большая часть моего программирования связана с командной строкой, и я должен признать, что на данный момент я не уверен в знании всех колоколов и свистков на XCode, но я собираюсь изменить это в ближайшем будущем. – Jon

Смежные вопросы