LINUX.ORG.RU

[В смятении] Fortran vs C vs C++


0

1

Вот задумался над сабжем. Вроде с одной стороны fortran мало где используются, да и c гуем плохо. Мало кто его уже использует. Но ведь все равно развивается, intel к ней выпускает компиляторы, спецификации к ней обновляется уже есть 2003, 2007. В основном, конечно, используют для численных расчетов.

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

Поэтому и возник у меня вопрос на чем писать свою прогу для численных расчетов (МКЭ).

Требования: кросскомпильность - дома на ноуте только линукс (оффтоп даже не ставится), а приходится бинарники для расчетов давать и другим.

★★★★★

Если ты ещё долго будешь в этой области работать, смотри что в ней используется. Смотри, на чём нужные либы есть и с чем их проще использовать. Нам говорили, что вся архаичность Фортрана перекрывается теми тучами библиотек, которые есть для него и которые на Си переписывать некому.

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

1. Никто не запрещает использовать фортрановские либы из Си и Си++

2. Никто не запрещает конвертировать Фортран код в Си.

Reset ★★★★★
()

> Поэтому и возник у меня вопрос на чем писать свою прогу для численных расчетов (МКЭ).

mkl (если студент или есть денюжка)

или свободные реализации того-же. Язык большого значения не имеет, т.е. что лучше знаешь.

qnikst ★★★★★
()

Я в своей работе (препроцессор для МКЭ) использую C++, т.к., изначально проще строить систему абстракций (по отношению к C) и, как было упомянуто выше, наличие контейнеров существенно упрощает процесс разработки. Да и вопрос выбора языка среди указанных должен сводится к простоте и эффективности разработки и устранения ошибок, т.к., несколько процентов увлечения скорости вычисления вряд ли будут критическими. кросскомпильность необходимо обеспечить прежде всего для гуи (числодробильные классы портабельны на любом из тех приведенных языков), что я обеспечил использованием wxWidgets + linux hosted cross-compilation (машина с виндой дома отсутствует, бинарники генерировать иногда нужно).

Genuine ★★★
()

Можно посмотреть в сторону библиотеки PETSc. Поддерживается и C, и C++, и FORTRAN. К тому же много полезного «внутри» - методы ЛА (интерфейсы к BLAS/LAPACK), распараллеливание.

PETSc может использоваться в OOFEM (если говорить про МКЭ).

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

Сам f2c есть в любом дистрибутиве линуха, сорцы гуглятся. libf2c надо линковать с программой, но это не проблема, в той же студии оно прекрасно собирается. А некоторые библиотеки, например spherepack, транслируется в Си код таким образом, что вообще никаких дополнительных зависимостей не требуется.

Reset ★★★★★
()

я раньше писал на Фортране, теперь пишу на C++. Если не морочиться с умными указателями и прочим наследованием, скорость такая же, как и у фортрана (g++ vs gfortran)

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

> З.ы. в фортране работа с матрицами

Только в 90-м. В 77, коего еще немало — фиг.

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

> Сдается мне, что для вашей задачи достаточно Matlab'а и ему подобных.

+100500 Не парьте себе мозг и чейтателей/пейсателей этого топика (если это не было целью его (топика) создания конечно же);)

anonymous
()
Ответ на: комментарий от archimag

Потом обнаружил, что библиотек для численных расчётов для C++ на самом деле поболее, а Fortran это ещё тот геморой, и ушёл полностью на C++.

+1

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

Можно по подробнее про BLAS.

Это набор высокооптимизированных функций для алгебраических расчетов. Свое перемножение обычных матриц, например, писать при наличии BLAS - бессмысленно. Я пользовался реализациями atlas и cublas. Они работают.

Я в курсе что это. Меня интересует реализация под си. Т.е. как его применить.

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

ТЫ не смотрел, может тебе прийдёться писать очередной велосипед?!

Велосипед нужен под мой диссер с нестандартными квадратными колесами.

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

f2c есть. Я все используемые фортрановские библиотеки через него прогоняю, чтоб компилилось всё одинаково под всеми платформами в том числе и под студией.

Надо попробовать.

Zodd ★★★★★
() автор топика

конкретно для МКЭ - возможно, С++ будет удобней Си. Но вообще... можешь попробовать питон, у него с математикой весьма не дурственно. Попробуй на паре юнит-тестов производительность померять, чтобы понять, какой именно язык тебе более удобен и подходящ для твоих задач.

ЗЫж нет лучшего языка, есть лучший выбор языка к задаче исходя из ряда входных данных.

Deleted
()

Ответ зависит от количества процессоров:

1. расчет на одной машине: используй что угодно -
хоть brainfuck.
2. кластер где число процессоров < 100: fortran или C или C++
3. > 100: только C++(точнее нужен С с классами + шаблоны)
и надо забыть про линейную алгебру(если задача параболическая,
то это можно сделать, если же эллиптическая...)

h1t
()
Ответ на: комментарий от Zodd

> Велосипед нужен под мой диссер с нестандартными квадратными колесами.

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

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

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

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

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

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

Что значит забыть? Какая разница какая задача? Всё равно при решении возникает куча векторных операций и обращение матрицы.

Reset ★★★★★
()

Имею опыт работы с числодробильней и на с/с++ и на фортране. На фортране разработка несравненно быстрее, код читабельнее (мое субъективное), программы работают быстрее (используйте Intel fortran) Используется кстати много где. Просто у фортрана очень узкая ниша (низкоуровневая числодробильня). Здесь пока ничего лучше нет. Использовать фортран для чего-либо еще - гемморой жуткий. Си для численных имхо не годится совершенно.

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

Я на фортране писал мало, но такого же мнения о нем. Если можно алгоритм легко выразить на фортране, то лучше взять его вместо си и плюсов. И потом, когда еще будет возможность у ТС что-то дельное написать на фортране? :)

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

А GUI-морду можно написать на чем-угодно. Хоть на питоне.

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

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

5 лет уже не занимаюсь
подобными вещами, поэтому
не знаю существуют ли
сейчас эффективные (> 50%)
способы обращения матрицы
(пусть даже специального вида)
на большом количестве процессоров.


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

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

Каким образом? Простейший пример можно ?

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

> подобными вещами, поэтому не знаю существуют ли сейчас эффективные (> 50%) способы обращения матрицы (пусть даже специального вида)

Если существует эффективный способ умножения матрицы на вектор, то можно эффективно распараллелить метод Арнольди. Правда преимущество по сравнению с LU разложением получим только на больших n.

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

препринт ИПМ Келдыша за 1987 год
Локуциевский В. О., Локуциевский О. В.,
Применение чебышевских параметров для
численного решения некоторых
эволюционных задач.

там вся мат часть.

h1t
()
Ответ на: комментарий от anonymous

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

Это интересует меня. Важно удобство и скорость - мой выбор оказался правильным.

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

вряд ли это возможно.

если живешь в москве
то зайди в институт и
попробуй договориться с
библиотекой о распечатке
(там правда охрана стоит)

Миусская площадь дом 4
рядом с РГГУ
(метро Беларусская или Новослободская)

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

если задача параболическая, то это можно сделать, если же эллиптическая

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

Э-э-эм... мсье ничего не перепутал?

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

>>> Можно по подробнее про BLAS.

Это набор высокооптимизированных функций для алгебраических расчетов. Свое перемножение обычных матриц, например, писать при наличии BLAS - бессмысленно. Я пользовался реализациями atlas и cublas. Они работают.

Я в курсе что это. Меня интересует реализация под си. Т.е. как его применить.

Ну реализации для си есть, их применяют. Например, atlas и cublas. Применяют для линейной алгебры - операций с матрицами и векторами. Как - как обычные сишные библиотеки, подключают заголовочный файл и указывают при линковке. Вообще вопрос «можно поподробнее про BLAS» довольно неясный. И «Меня интересует реализация под си» ясности мало добавляет.

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

а что я перепутал?

задача эллиптическая -
здраствуй обращение матрицы.

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

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

h1t
()
Ответ на: комментарий от Reset

Если я всё правильно понял, метод изложен в последнем параграфе книги В.И.Лебедева «Функциональный анализ и вычислительная математика».

Книжка в интернете находится. :)

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

Ага, нашел, прочитал, вспомнил. Это же основа легендарной программы dumka, которой о которой так любит упоминать Лебедев. В общем, без линейной алгебры никуда, особенно если посмотреть на первоначальнуй формулу 11.14 от которой потом пляшут. CUDA в таком методе очень хорошо будет работать.

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

спасибо.
да, это тот метод.

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

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

Решать уравнений не надо, но надо работать с веторами. Сумма, разность ... Если в правой части операторы стоят, то еще и умножение на матрицу появится.

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

Гм. Все релаксационные методы основаны на введении некой «эволюции» в уравнение. Например, эллиптические задачи сводятся к эффективно параболическим, которые можно надеяться решать по явной схеме (ergo без обращения матриц).

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

Vadim_Z
()
Ответ на: комментарий от balodja

зри в корень
(в данном случае в физику)

простой пример:
навье-стокс для несжимаемой жидкости.
для физики требование несжимаемости
означает что возмущения распространяются
мгновенно(т.е у нас появляется «глобальность»
в задаче)
при распарраллеливании возникновение
слова «глобальность» это смерть
(поэтому любой ценой пытался отказаться от
линейной алгебры)

и релаксация здесь не поможет - фиктивое
время этой релаксации должно быть достаточным
чтобы все возмущения в системе затухли -
легче будет матрицу обратить :-)


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

Для расчетов течений есть более качественные методы, чем такое прямолинейное трактование формул. Так что здесь это ни к чему.

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