LINUX.ORG.RU
ФорумTalks

С фортраном всегда так?

 


0

0

Попросили тут на днях халтурку сделать небольшую. Переписать одну мини-утилитку (~ 250 строк кода) переписать с фортрана на плюсы.

Присылают код, действительно 250 строк. Но какой это код:

      WRITE(16,9)(NBC(I),NFIX(I),I=1,NB)
   9  FORMAT(2i8)
      call FRMEG(imax,nband,nszf,ne,ndfg,ncnm,
     *nop,estifm,nstm,a,nb,nfix,nbc,ndis,knul)
if(ncol.gt.nband) write(16,901)ncol,l,k,km,ncolb,nrowb,nop(n,kk)
     *,n,kk,ndfg
 901  format(1x,'NCOL=',10i9)
      a(im,ncol)=a(im,ncol)+estifm(i,nfx+k)
 322  continue
 320  continue
 321  continue
 360  continue
      if(ie.ne.n) read(8)

Продакшн код на фортране всегда так выглядит? Я когда-то книжку по нему листал, там всё приличнее было...

PS И предлагали в этом разбираться за 1000р =)

☆☆☆☆☆

Программу на фортране можно написать на любом языке (б)ойан

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Archer73

Все от задачи зависит.

Ага. Я 30-50% на своих задачах вывел некоторое время назад. А вообще видно, что gfortran на некоторых задачах жестоко сливает Intel Fortran в несколько раз, но на этих же задачах другие компиляторы сливают ещё хуже, а на многих задачах отставание от IF невелико.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от yvv

Обсуждается утилита, которую почему-то хотят переписать с Fortran77 за 1000 рублей. Это скорее всего означает что а) она работает б) на математическую библиотеку и ускорение как бы всё равно, в) внешних библиотек не использует

Ну воспользуетесь вы оптимизирующим компилятором от фирмы XXX и будет у вас ускорение 10%, но зато вы получите массу интересных проблем связанных с линковкой если в качестве основного компилятора используется нечто от фирма YYY.

Evgueni ★★★★★
()
Ответ на: комментарий от drBatty

Ога, меня всегда восхищали программисты которые морщат носик глядя на рабочий код и неспособные самостоятельно написать рабочую (то есть делающую то, что нужно) программу.

Evgueni ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Не. DECовские расширения похоронили.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Я, честно говоря, тоже не понимаю, зачем им с фортрана на С переписывать. Насчёт компиляторов скажу так: если хочешь избежать гемороя в заднице, купи интел фортран, не жлобься.

yvv ★★☆
()
Ответ на: комментарий от Evgueni

Ога, ога и все внешние библиотеки под ним собирать?

Конечно. Не под g77 же. Это сэкономит время в итоге. Мне неприятно об этом говорить, но на сегодняшний день свободные компиляторы фортрана - полное г.... Мне вот лично хотелось бы качественного, свободного, но его же нет.

yvv ★★☆
()
Ответ на: комментарий от Evgueni

библиотеки (типа этой) под ним собирать?

Разработчики этой библиотеки - сами себе злобные буратины. Нельзя так делать.

yvv ★★☆
()
Ответ на: комментарий от yvv

10% _компьютерного_ кое дёшево и его легко в случае нехватки можно приобрести. Люди много дороже. Основной тормоз в мозгах.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

По мне так злобные буратины Intel, который не озадачился проблемой совместимости с gcc.

Нет. Они сделали очень классный компилятор, с mkl, и mpi. Причём дают в нагрузку к железу, т.е. купил кластер, а там уже всё есть.

yvv ★★☆
()
Ответ на: комментарий от anonymous_incognito

Ага. Я 30-50% на своих задачах вывел некоторое время назад. А вообще видно, что gfortran на некоторых задачах жестоко сливает Intel Fortran в несколько раз, но на этих же задачах другие компиляторы сливают ещё хуже, а на многих задачах отставание от IF невелико.

может заодно расскажешь, как сейчас с вопросом cc vs fortran? (просто для интереса, не флейма ради. Я в этом вопросе некомпетентен если что).

drBatty ★★
()
Ответ на: комментарий от Evgueni

Ога, меня всегда восхищали программисты которые морщат носик глядя на рабочий код и неспособные самостоятельно написать рабочую (то есть делающую то, что нужно) программу.

хм... ты наверное никогда не видел рабочих программ для MS-DOS/Win без исходников. Код есть, работает, требуется его как-то исправить (на самом деле, оно не слишком сложно, только возни много. с фортраном я наблюдал такое же).

drBatty ★★
()
Ответ на: комментарий от drBatty

Я вообще не использую для работы программ без исходников, а выбор языка программирования на работоспособности программ весьма слабо сказывается. Основной затык в предметной области.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от yvv

Это осмысленно если всё пишется с нуля и задача ограничена по времени — нет необходимости заботиться о переносимости. Человеческое же время много дороже компьютерного. Ну и вендор-лок тоже ничего хорошего.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от Evgueni

Я вообще не использую для работы программ без исходников

я тоже. Однако для меня, программа на фортране ненамного лучше программы в кодах без сырцов, особенно такого плана как в первом посте.

а выбор языка программирования на работоспособности программ весьма слабо сказывается. Основной затык в предметной области.

задачи разные бывают. Часто в предметной области разберётся даже ребёнок.

drBatty ★★
()
Ответ на: комментарий от Evgueni

Это осмысленно если всё пишется с нуля и задача ограничена по времени — нет необходимости заботиться о переносимости. Человеческое же время много дороже компьютерного.

вот именно поэтому и необходимо заботится о переносимости: для того, что-бы твой код на новом(или наоборот встроенном) железе работал с минимальными модификациями, а в идеале без оных. Именно потому-то ассемблер давно уже умер - он непереносим. И прогресс в скорости железа ничего не меняет - IRL код для другого процессора НЕ работает даже в виртуальной машине (если он изначально заточен под какую-то конкретно).

И да, ВСЕ программы пишутся с нуля и с ограничением по времени. Изначально.

drBatty ★★
()
Ответ на: комментарий от drBatty

Есть одно но: кроме своего кода есть ещё и код, который был написан задолго до (в качестве примера я давал ссылку на библиотеку CERNLIB — по объёму кода она сравнима с кодом ядра Linux). И даже если он переносимый, задача доказательства того, что при новом компиляторе он работает ожидаемо вполне может быть неразрешимой, поэтому со сторонними библиотеками совместимость необходима.

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

Evgueni ★★★★★
()
Ответ на: комментарий от drBatty

И да, ВСЕ программы пишутся с нуля и с ограничением по времени. Изначально.

Ну да, ну да. То бишь изобретаем заново все велосипеды и не используем сторонних библиотек. Видно, что вам платят не за результат, а за число строк кода.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Есть одно но: кроме своего кода есть ещё и код, который был написан задолго до (в качестве примера я давал ссылку на библиотеку CERNLIB — по объёму кода она сравнима с кодом ядра Linux).

да. Мир не идеальный. Потому я и использовал слова «заботиться», и «в идеале».

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

не говорю. И всё равно, о переносимости нужно заботится, а эти багофичи стараться не использовать. (или хотя-бы комментарии поставить, с разъяснением, что-бы потом можно было _быстро_ исправить бажный код, когда эту багофичу наконец исправят).

Ну да, ну да. То бишь изобретаем заново все велосипеды и не используем сторонних библиотек. Видно, что вам платят не за результат, а за число строк кода.

нет конечно! сторонние библиотеки НАДО использовать, если они есть, конечно. В этом-то и заключается unix way ИМХО. Я говорю про само приложение. Если задача ТСа решается сторонней либой, то надо просто выкинуть этот код нафиг, и использовать либу. Но в рассматриваемом случае очевидно не решается. И я не думаю, что для C/C++ не написано нужной либы, хотя для фортрановского кода она таки написана.

drBatty ★★
()

проблема даже не в непонятном синтаксисе, а в том, что нарушив например последовательность суммирования ряда ты можешь получить совсем неправильную работу утилиты (будет нарастать ошибка округления, например).

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

а написано всё по правилам и правильно, посмотри хотя-бы http://num-anal.srcc.msu.ru/

aiqu6Ait ★★★★
()
Ответ на: комментарий от drBatty

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

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

да никак.

ИМХО тогда есть смысл переписывать на C. Особенно учитывая, что судя по треду, хорошие компиляторы фортрана - коммерческие и совсем не гнутые.

drBatty ★★
()
Ответ на: комментарий от drBatty

(% а ты уверен, что алгоритм перенесётся без неочевидных изменений? ведь неизвестно, что там, а даже простые синусы-косинусы, не говоря уже про бесселя или нетривиальные ряды, даже на разных компиляторах одного языка считаются немного по-разному.

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

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

я не уверен. Но вообще говоря, уже лет 15 все поголовно считают математику i8087, там и какой-то IEEE на эту тему есть ЕМНИП.

И ИМХО, если автор программы ничего не напутал, и если он не использовал каких-то грязных хаков, то алгоритм по любому будет работать с допустимой погрешностью. Я не прав? (при условии, что точность моего FPU не хуже точности FPU автора конечно).

drBatty ★★
()
Ответ на: комментарий от drBatty

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

aiqu6Ait ★★★★
()

Может для фортрана есть аналог astyle?

andreyu ★★★★★
()
Ответ на: комментарий от aiqu6Ait

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

дык это я и назвал «грязным хаком». Если сходимость твоего алгоритма зависит от кривизны твоего FPU - это УГ, а не алгоритм. Как-бы не набигала ошибка, алгоритм просто обязан завершаться, причём достаточно быстро. На то вычислительная математика как раз и нужна. Если мой FPU более точный, чем твой, то у меня алгоритм просто быстрее завершится, чем у тебя. Ну или также в худшем случае.

drBatty ★★
()
Ответ на: комментарий от aiqu6Ait

а пруф можно?

Пруф?

В моей компании мы используем 3 кластера. На всех пакет от интел изкаробки. Очень удобно.

yvv ★★☆
()

Подозреваю, что да. Я как-то хотел разобраться в чужом алгоритме. Исходник — на фортране. Читал-читал, да понял, что проще будет с нуля самому сделать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от drBatty

может заодно расскажешь, как сейчас с вопросом cc vs fortran? (просто для интереса, не флейма ради. Я в этом вопросе некомпетентен если что).

А сложно сказать на самом деле. IF и IC примерно равны, с остальными всё сложнее.

anonymous_incognito ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.