Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.
Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
Что можете сказать по этому поводу.
С Уважением.
Re: Fortran vs C++
От:
Аноним
Дата:
13.07.09 05:53
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Добрый день,
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
Ищите бенчмарки, смотрите на них, пробуйте их и думайте, насколько объективно и .т.п.
А>Добрый день,
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
Если они написаны хорошо на фортране и плохо на С++, то запросто.
Здравствуйте, Аноним, Вы писали:
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.
По-моему, это ерунда.
Скорость работы программ не зависит от того, на каком из этих двух языков они написаны.
Если вычислительные задачи достаточно хорошо реализованы и там и там, то скорость работы зависит от используемых компиляторов, а также от ключей компиляции.
Быстрее всего будут работать программы на ассемблере, если они правильны. Только программировать вычислительные задачи на ассемблере не удобно.
Если в наличии хорошие оптимизирующие компиляторы и для Fortran и для С++, то они будут работать одинаково быстро.
Т.о. программировать можно на том, на чем удобнее (лучше получается).
Еще могут играть роль доступные возможности. Например, MS VC не умеет работать с 80-битным long double, весьма полезным для многих вычислительных задач.
Здравствуйте, Аноним, Вы писали:
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
ИМХО, правильный ответ такой: если предельно оптимизировать по скорости вычислительный код на С++ (с учетом промахов в кэше процессора и т.п.), он станет похож на фортрановский. Например, массив структур хуже по времени доступа, чем параллельные массивы.
Здравствуйте, TheBeard, Вы писали:
TB>ИМХО, правильный ответ такой: если предельно оптимизировать по скорости вычислительный код на С++ (с учетом промахов в кэше процессора и т.п.), он станет похож на фортрановский. Например, массив структур хуже по времени доступа, чем параллельные массивы.
У меня сомнения тщательная оптимизация франтовского кода какую-то пользу приносит. Она сделана неизвестно кем и неизвестно под какой процессор. LINPAk сплошные вставки низкоуровневых процедур эта древность тянется с еще с Крееев. А FFTW выбрали для себя Си
P>У меня сомнения тщательная оптимизация франтовского кода какую-то пользу приносит. Она сделана неизвестно кем и неизвестно под какой процессор. LINPAk сплошные вставки низкоуровневых процедур эта древность тянется с еще с Крееев. А FFTW выбрали для себя Си
FFTW ЕМНИП написана на Окамле, который генерит сишный код, который уже собирается в бинарник
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
Нет, это не так, другое дело что выбороптимизированных фортрановских исходников все же побольше.
Тенденция переписывания с Фортрана на С также существует(пример — CVODE), но это происходит крайне медленно.
Здравствуйте, Sergey Chadov, Вы писали:
SC>FFTW ЕМНИП написана на Окамле, который генерит сишный код, который уже собирается в бинарник
ДЛЛку пользую, исходники не смотрел . Там есть опция сборки конечно навороченные, еще и рунтайм оптимизация
Re[2]: Fortran vs C++
От:
Аноним
Дата:
13.07.09 16:00
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:
SC>Нет, это не так, другое дело что выбороптимизированных фортрановских исходников все же побольше. SC>Тенденция переписывания с Фортрана на С также существует(пример — CVODE), но это происходит крайне медленно.
уже пора на C# переводить, а они только на C переводят шутка
Да, скорее всего так и есть. Но! Разговор не идёт о абстрактном Fortran или C++. Если мы говорим про "оптимальные" в некотором смысле реализации, скажем от производителей процессора, то да, вычисления на fortran'е будут быстрее чем на C++. Но вот, мне кажется, что не всякие вычисления. Скажем вычисленения с векторами и матрицами будут безусловно быстрее по нескольким причинам. Одна из которых, кроется в том, что сам язык для этого собственно и говоря предазначен, НО я никогда вплотную не занимался работой оптимизирующих компиляторов, поэтому не знаю, может тут C++ при ОПРЕДЕЛЁННОМ варианте написания и догонит fortran.
Вторая и более существенная причина кроется в том, что в современных процесорах есть наборы инструкций специально для выполнения некоторых векторных и матричных операций, есть такие вещи, как суперскалярность и многое другое, что делает векторные и матричные вычисления ОЧЕНЬ быстрыми(думаете GPU выдают такое дикое число Gigaflops просто так?). И если компилятор знает про все эти вкусности, то в силу устройства языка всё будет просто летать.
Я немного представляю про то что пишу, потому что работаю в организации занимающейся разработкой процессоров.
Если не убедил, то посмотрите в Википедии на чём написан LAPACK -- тот пакет на котором обязательно тестируется производительность всех суперкомпьютеров в мире.
А>Добрый день,
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
А>С Уважением.
Здравствуйте, Аноним, Вы писали:
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++. А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически. А>Что можете сказать по этому поводу.
Ну а как вы на C++, например, напишете 2-мерную матрицу чисел, размеры которой неизвестны во время компиляции? А в Фортране это встроенный тип...
Здравствуйте, Pzz, Вы писали:
Pzz>Ну а как вы на C++, например, напишете 2-мерную матрицу чисел, размеры которой неизвестны во время компиляции? А в Фортране это встроенный тип...
без проблем — g++ встроенный тип...
Здравствуйте, zerone, Вы писали:
Z>Если не убедил, то посмотрите в Википедии на чём написан LAPACK -- тот пакет на котором обязательно тестируется производительность всех суперкомпьютеров в мире.
Да нет никакого быстрого LAPACK написанного на Фортране. Я както придумал алгоритм обращения квадратной матрицы более быстрый чем через LU. У меня компактная жорданоподобная схема. Говорят не может быть чтоб самописное было быстрей LAPACK , а ежели быстрей то с неправильным LAPACK сравнивается. А где канонические лапаковские алгоритмы на СПП — нетути. Дело в том что LAPACKовскае сорсы весьма ветвистые и сами ничего не делает. Это фортрановский workaround над многочисленным низкоуровневым векторным операциям типа XERBLA и т.д. канонический набор именуется BLAST, ИМХО его на ассемблере пишут. Поскольку вектора предполагаются длинными совершенно всеравно на чем сам LAPACK написан.
Здравствуйте, Аноним, Вы писали:
А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.
Это реальный факт.
Дело в том, что у оптимизатора Фортрана намного больше свободы — там нет указателей (и алиасинга) и ряда других трудностей. Ну и ещё мелочи типа computed goto помогают (их нет в С, хотя есть в определённых реализациях).
Впрочем, часть проблем с алиасингом решается с помощью ключевого слова restrict в С. А expression templates в С++ помогают автоматически оптимизировать некоторые выражения.
Sapienti sat!
Re[4]: Fortran vs C++
От:
Аноним
Дата:
14.07.09 03:23
Оценка:
Здравствуйте, Programador, Вы писали:
P>PS собственно обращение в одной процедуре P>против 500 строк из LINPAK