Быстродействие кода в VC и Visual Fortran
Программа расчитывает TVD схему на 3-х мерной сетке. Соответственно очень много расчетов.
Поставленная задача - распаралелить для расчетов на кластере.
Так-как я гораздо лучше знаю C и мне он больше по душе я решил первым делом переписать эту программу на С.
После переделки ( собственно переписал почти в идентичную программу ) решил сравнить быстродействие.
Результат - фортрановская программа работает в 2-3 раза быстрее. Мне кажется что разница не должна превышать 20-30%
Отсюда вопрос - какие возможны общие методы повышения производительности? Может быть существуют пакеты для оптимизации под Athlon/Intel?
Цитата:
Originally posted by sema
Есть программа, написанная на Фортране.
Программа расчитывает TVD схему на 3-х мерной сетке. Соответственно очень много расчетов.
Поставленная задача - распаралелить для расчетов на кластере.
Так-как я гораздо лучше знаю C и мне он больше по душе я решил первым делом переписать эту программу на С.
После переделки ( собственно переписал почти в идентичную программу ) решил сравнить быстродействие.
Результат - фортрановская программа работает в 2-3 раза быстрее. Мне кажется что разница не должна превышать 20-30%
Отсюда вопрос - какие возможны общие методы повышения производительности? Может быть существуют пакеты для оптимизации под Athlon/Intel?
Есть программа, написанная на Фортране.
Программа расчитывает TVD схему на 3-х мерной сетке. Соответственно очень много расчетов.
Поставленная задача - распаралелить для расчетов на кластере.
Так-как я гораздо лучше знаю C и мне он больше по душе я решил первым делом переписать эту программу на С.
После переделки ( собственно переписал почти в идентичную программу ) решил сравнить быстродействие.
Результат - фортрановская программа работает в 2-3 раза быстрее. Мне кажется что разница не должна превышать 20-30%
Отсюда вопрос - какие возможны общие методы повышения производительности? Может быть существуют пакеты для оптимизации под Athlon/Intel?
Не знаю конкретно твоей задачи, но Intel выпускает для математических расчетов Intel Math Kernel Library, содержащую оптимизированные функции для Intel P4 и Itanium. Там есть спектральные преобразования, BLAS и т.п. Работает как для Fortran, так и для C
Цитата:
Originally posted by pavor
Не знаю конкретно твоей задачи, но Intel выпускает для математических расчетов Intel Math Kernel Library, содержащую оптимизированные функции для Intel P4 и Itanium. Там есть спектральные преобразования, BLAS и т.п. Работает как для Fortran, так и для C
Не знаю конкретно твоей задачи, но Intel выпускает для математических расчетов Intel Math Kernel Library, содержащую оптимизированные функции для Intel P4 и Itanium. Там есть спектральные преобразования, BLAS и т.п. Работает как для Fortran, так и для C
Да вроде-бы из особо математических функций только sin и cos. Остальное вроде просто умножения да сложения
Я уже давно не делал этого, в последний раз Fortran-77 переписывал на MS C v5 (не Visual, а просто MS C без ++) около 1990 года... но точно помню, что скорость выполнения моей программы на C была примерно такая же, как исходной на Фортране. (Программа удаляла невидимые линии изображения поверхности, перебором треугольников.)
Ещё можно попробовать использовать Analyzer, поставляемый с Visual Studio. Он покажет время выполнения разных частей вашего кода и позволит, если повезёт, узнать, что надо оптимизировать. Хотя скажу честно, пару раз я пытался его использовать, но мне он ни разу не помог.
Вот ещё одно забыл. Если программа на Фортране работает под DOS, то любая программа под Windows, скорее всего, будет отставать за счёт многозадачности, квантования времени и т.п.
Цитата:
Originally posted by sq_deep
А вы случайно не с отладочной ли версией сравниваете? И проверьте настройки оптимизации.
А вы случайно не с отладочной ли версией сравниваете? И проверьте настройки оптимизации.
В debug-е разница в 2 раза (25 сек на VC, 12 сек Fortran), в release в 3 раза ( 20 - 7 ) :(
Обе проги под виндами. где основное время тратится тоже ясно. Вобщем с индексами массивов буду играться. о результатах сообщу