Fortran vs C++
От: Аноним  
Дата: 13.07.09 04:31
Оценка: -1
Добрый день,

Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.
Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
Что можете сказать по этому поводу.

С Уважением.
Re: Fortran vs C++
От: Аноним  
Дата: 13.07.09 05:53
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Добрый день,


А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.

Ищите бенчмарки, смотрите на них, пробуйте их и думайте, насколько объективно и .т.п.
Re: Fortran vs C++
От: jazzer Россия Skype: enerjazzer
Дата: 13.07.09 07:05
Оценка: +1
Здравствуйте, Аноним, Вы писали:


А>Добрый день,


А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.

Если они написаны хорошо на фортране и плохо на С++, то запросто.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Fortran vs C++
От: Peter K.  
Дата: 13.07.09 07:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

По-моему, это ерунда.
Скорость работы программ не зависит от того, на каком из этих двух языков они написаны.
Если вычислительные задачи достаточно хорошо реализованы и там и там, то скорость работы зависит от используемых компиляторов, а также от ключей компиляции.
Быстрее всего будут работать программы на ассемблере, если они правильны. Только программировать вычислительные задачи на ассемблере не удобно.
Если в наличии хорошие оптимизирующие компиляторы и для Fortran и для С++, то они будут работать одинаково быстро.
Т.о. программировать можно на том, на чем удобнее (лучше получается).
Еще могут играть роль доступные возможности. Например, MS VC не умеет работать с 80-битным long double, весьма полезным для многих вычислительных задач.
Re: Fortran vs C++
От: TheBeard Россия  
Дата: 13.07.09 11:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.

ИМХО, правильный ответ такой: если предельно оптимизировать по скорости вычислительный код на С++ (с учетом промахов в кэше процессора и т.п.), он станет похож на фортрановский. Например, массив структур хуже по времени доступа, чем параллельные массивы.
Re[2]: Fortran vs C++
От: Programador  
Дата: 13.07.09 11:34
Оценка:
Здравствуйте, TheBeard, Вы писали:

TB>ИМХО, правильный ответ такой: если предельно оптимизировать по скорости вычислительный код на С++ (с учетом промахов в кэше процессора и т.п.), он станет похож на фортрановский. Например, массив структур хуже по времени доступа, чем параллельные массивы.


У меня сомнения тщательная оптимизация франтовского кода какую-то пользу приносит. Она сделана неизвестно кем и неизвестно под какой процессор. LINPAk сплошные вставки низкоуровневых процедур эта древность тянется с еще с Крееев. А FFTW выбрали для себя Си
Re[3]: Fortran vs C++
От: Sergey Chadov Россия  
Дата: 13.07.09 13:46
Оценка:
Здравствуйте, Programador, Вы писали:


P>У меня сомнения тщательная оптимизация франтовского кода какую-то пользу приносит. Она сделана неизвестно кем и неизвестно под какой процессор. LINPAk сплошные вставки низкоуровневых процедур эта древность тянется с еще с Крееев. А FFTW выбрали для себя Си


FFTW ЕМНИП написана на Окамле, который генерит сишный код, который уже собирается в бинарник
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: Fortran vs C++
От: Sergey Chadov Россия  
Дата: 13.07.09 13:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.


Нет, это не так, другое дело что выбороптимизированных фортрановских исходников все же побольше.
Тенденция переписывания с Фортрана на С также существует(пример — CVODE), но это происходит крайне медленно.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[4]: Fortran vs C++
От: Programador  
Дата: 13.07.09 13:59
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

SC>FFTW ЕМНИП написана на Окамле, который генерит сишный код, который уже собирается в бинарник

ДЛЛку пользую, исходники не смотрел . Там есть опция сборки конечно навороченные, еще и рунтайм оптимизация
Re[2]: Fortran vs C++
От: Аноним  
Дата: 13.07.09 16:00
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

SC>Нет, это не так, другое дело что выбороптимизированных фортрановских исходников все же побольше.

SC>Тенденция переписывания с Фортрана на С также существует(пример — CVODE), но это происходит крайне медленно.

уже пора на C# переводить, а они только на C переводят шутка
Re[2]: Fortran vs C++
От: _Ursus_  
Дата: 13.07.09 17:10
Оценка:
Здравствуйте, TheBeard, Вы писали:

TB>Например, массив структур хуже по времени доступа, чем параллельные массивы.


Хочется услышать обоснование.
Re: Fortran vs C++
От: zerone  
Дата: 13.07.09 18:23
Оценка:
Здравствуйте, Аноним, Вы писали:

Да, скорее всего так и есть. Но! Разговор не идёт о абстрактном Fortran или C++. Если мы говорим про "оптимальные" в некотором смысле реализации, скажем от производителей процессора, то да, вычисления на fortran'е будут быстрее чем на C++. Но вот, мне кажется, что не всякие вычисления. Скажем вычисленения с векторами и матрицами будут безусловно быстрее по нескольким причинам. Одна из которых, кроется в том, что сам язык для этого собственно и говоря предазначен, НО я никогда вплотную не занимался работой оптимизирующих компиляторов, поэтому не знаю, может тут C++ при ОПРЕДЕЛЁННОМ варианте написания и догонит fortran.
Вторая и более существенная причина кроется в том, что в современных процесорах есть наборы инструкций специально для выполнения некоторых векторных и матричных операций, есть такие вещи, как суперскалярность и многое другое, что делает векторные и матричные вычисления ОЧЕНЬ быстрыми(думаете GPU выдают такое дикое число Gigaflops просто так?). И если компилятор знает про все эти вкусности, то в силу устройства языка всё будет просто летать.
Я немного представляю про то что пишу, потому что работаю в организации занимающейся разработкой процессоров.

Если не убедил, то посмотрите в Википедии на чём написан LAPACK -- тот пакет на котором обязательно тестируется производительность всех суперкомпьютеров в мире.

А>Добрый день,


А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.

А>С Уважением.
Re: Fortran vs C++
От: Vamp Россия  
Дата: 13.07.09 18:37
Оценка:
Стоп. По-определению, С позволяет сделать все то же самое, что фортран. Вопрос только в трудозатратах программиста.
Да здравствует мыло душистое и веревка пушистая.
Re: Fortran vs C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.07.09 18:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.

А>Сам ответа на этот вопрос не знаю и отношусь к этому скептически.
А>Что можете сказать по этому поводу.

Ну а как вы на C++, например, напишете 2-мерную матрицу чисел, размеры которой неизвестны во время компиляции? А в Фортране это встроенный тип...
Re: Fortran vs C++
От: D14  
Дата: 13.07.09 19:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на Fortran-е а не на C++.


Ну, в целом, да, будет. Но если цель поставить, то на С++ будет также, а может не будет.
Re[2]: Fortran vs C++
От: Programador  
Дата: 13.07.09 20:00
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ну а как вы на C++, например, напишете 2-мерную матрицу чисел, размеры которой неизвестны во время компиляции? А в Фортране это встроенный тип...

без проблем — g++ встроенный тип...
Re[2]: Fortran vs C++
От: Programador  
Дата: 13.07.09 20:51
Оценка:
Здравствуйте, zerone, Вы писали:

Z>Если не убедил, то посмотрите в Википедии на чём написан LAPACK -- тот пакет на котором обязательно тестируется производительность всех суперкомпьютеров в мире.


Да нет никакого быстрого LAPACK написанного на Фортране. Я както придумал алгоритм обращения квадратной матрицы более быстрый чем через LU. У меня компактная жорданоподобная схема. Говорят не может быть чтоб самописное было быстрей LAPACK , а ежели быстрей то с неправильным LAPACK сравнивается. А где канонические лапаковские алгоритмы на СПП — нетути. Дело в том что LAPACKовскае сорсы весьма ветвистые и сами ничего не делает. Это фортрановский workaround над многочисленным низкоуровневым векторным операциям типа XERBLA и т.д. канонический набор именуется BLAST, ИМХО его на ассемблере пишут. Поскольку вектора предполагаются длинными совершенно всеравно на чем сам LAPACK написан.

сравнить можно http://www.drobotenko.com/code_rus.html и здесь
Re[3]: Fortran vs C++
От: Programador  
Дата: 13.07.09 21:12
Оценка: :)
PS собственно обращение в одной процедуре

     //  (c) Drobotenko    http://drobotenko.com
     inline static  void  invers(DMat m)
     {
       int N= dimA(m);
       int *rn=(int*)alloca((sizeof(int))*N),*cn=(int*)alloca((sizeof(int))*N);
       //int rn[N],cn[N];

       int j,k;   

       for(j=N;j--;)
         rn[j]=cn[j]=j;
       gaus_minved=1e99;
       gaus_deter=1;
       for(gaus_ostatok=N;gaus_ostatok;gaus_ostatok--)
       {  int jved,kved;
          double vved=-1,t;
          for(j=N;j--;)
          {  if(~rn[j])
             for(k=N;k--;)
               if(~cn[k])
               if(vved<fabs(m[j][k]))
                  vved=fabs(m[j][k]),jved=j,kved=k;
          }
          if(gaus_minved>vved)
             gaus_minved=vved;
          gaus_deter*=m[jved][kved];
          if(vved<1e-99)
          {  for(j=N;j--;)
             {  if(~rn[j]) for(k=N;k--;)
                  m[j][k]=_NaN();
                if(~cn[j]) for(k=N;k--;)
                  m[k][j]=_NaN();
             }
             return;
          }
          int jt=rn[jved],kt=cn[kved];
          for(j=N;j--;)
              t=m[kt][j],m[kt][j]=m[jved][j],m[jved][j]=t;
          for(j=N;j--;)
              t=m[j][jt],m[j][jt]=m[j][kved],m[j][kved]=t;

          rn[jved]=rn[kt];
          cn[kved]=cn[jt];
          rn[kt]=cn[jt]=-1;

          vved=m[kt][jt];   m[kt][jt]=1;
          for(j=N;j--;)
          {  if(j==kt)
               continue;
             double mul=m[j][jt]/vved;
             m[j][jt]=0;
             for(k=N;k--;)
               m[j][k]-=m[kt][k]*mul;
          }
          for(k=N;k--;)
              m[kt][k]/=vved;
       }
     }

против 500 строк из LINPAK
Re: Fortran vs C++
От: Cyberax Марс  
Дата: 13.07.09 21:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разные люди говорят что вычислительные программы работают быстрее если они были написаны на 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

Афегительный код! Твой?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.