LINUX.ORG.RU

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


0

1

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

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

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

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

★★★★★

Есть мнение, что фортран оптимизируется для рассчётов лучше C. Итого всё упирается не в язык, а в то насколько крут твой компилятор фортрана. Проводишь небольшой тест и вперёд. Ну и да, может быть ты знаешь C, не знаешь фортран и нет смысла извращаться?

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

Использовать С++ для численных расчетов это С++ головного мозга.

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

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

Итого всё упирается не в язык, а в то насколько крут твой компилятор фортрана.

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

Знаю и фортран и си.

З.ы. в фортране работа с матрицами и комплексными числами идет из коробки.

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

C++, естественно, если хочешь иметь меньше проблем и больше библиотек. Ну а если хочешь проникнуться духом тем времён, когда «компьютеры были большими», то выбирай Fortran - буду что детям рассказать ;)

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

а библиотеки для численных расчетов они все как раз на Си или на Фортране.

На фортране были созданы, под си переписали только imsl (пропиетарная).

Есть конечно lapack++ и т.п., но все не то :(

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

>З.ы. в фортране работа с матрицами и комплексными числами идет из коробки.

В C тоже есть комплексные числа, массивы и библиотеки с интерфейсом BLAS. Фортран используется по историческим причинам, потому что есть большие древние программы, написанные на нем.

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

> C++, естественно, если хочешь иметь меньше проблем и больше библиотек.

Интересно чем это плюсы лучше когда нужна молотилка чисел?

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

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

Не работал, но мне кажется, что он будет работать медленно. Да и использовать как полноценную прогу не получится. Для запуска на другом компе надо иметь матлаб.

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

Геммороя меньше. Шаблоны есть (можно и float и double сразу сделать без копипасты), контейнеры есть (для МКЭ они ох как нужны), заботиться о выделении и освобождении памяти не надо ...

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

В C тоже есть комплексные числа, массивы и библиотеки с интерфейсом BLAS.

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

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

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

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

> Для запуска на другом компе надо иметь матлаб

Вызывающе неверная информация.

anonymous
()

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

это зависит от задачи, в общем случае я стал бы использовать python + numpy + whatever, т.к. конечный результат будет получен быстрее, а скорость достаточная

если стоит задача - выжми из себя всё, то всё же С++, С всё же хорош для системных вещей больше

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

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

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

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

Использовать С++ для численных расчетов это С++ головного мозга.

Си.

нафиг, слишком много возни не по делу, скорость разработки в 1,5-2 раза ниже чем с использованием С++, а профит по скорости выполнения можно и вообще не получить

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

У меня тоже есть некоторые сомнения на этот счёт. Но чего проще: взял быстрого фурье на сях, быстрого фурье на фортране, собрал сравнил.

KblCb ★★★★★
()

студент? надо лабораторную сделать?
тогда какая разница на чем считать, лабораторная же маленькая, даже питон посчитает

не лабораторную, а курсовую?
как первый вариант, спроси у руководителя
так ли уж обязательно использовать низкоуровневые языки? есть же scilab, octave, python, sage и т.п. они же сами не считают, а отправляют данные этим всем библиотекам, написанным 20 лет назад на fortran, C, C++, а писать на высоком уровне быстро и удобно.

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

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

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

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

> Интересно чем это плюсы лучше когда нужна молотилка чисел?

Об этом, ещё Страуструп писал, что молотилки то стали сложнее. С++ обладает более мощными средствами для структуризации программ, в этом и есть его основное преимущество.

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

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

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

Это в архаичном фортране с рекурсией проблемы, в более новых версиях языка пофиксили.

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

ну и традиционно варианты для маньяков :) - OCaml, LISP, Haskell
«этот язык столь изящен и гармоничен, что все ваши решения будут элегантными по виду, быстрыми по работе и простыми в сопровождении»

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

> Об этом, ещё Страуструп писал, что молотилки то стали сложнее. С++ обладает более мощными средствами для структуризации программ, в этом и есть его основное преимущество.

Помнится мне он писал что плюсы не дают особых преимуществ при численных решениях

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

> Это в архаичном фортране с рекурсией проблемы, в более новых версиях языка пофиксили

понял

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

Ну... Всё к тому и идёт, но традиционно не хочется.

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

Ну про OCaml и LISP ничего не скажу, но Haskell для математики действительно хорош. Особливо ежели сопровождать его будут математики.

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

К стыду своему и правда внезапно. Но что-то в интернетах не находится ничего конкретного, кроме восторженных отзывов.

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

Увлёкся. Но его действительно легче читать...

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

Но это если нужны либы фортрановские, если всё самому писать, не думаю, что С будет медленнее.

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

Там поимерно так: интерфейс BLAS + две функции - закачать в память устройства и скачать из устройства. В комплекте с библиотекой есть подробный мануал с описанием всех функций.

tim239 ★★
()

А может всё-таки писать на том, что лучше знаешь :)

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

Посмотрел сейчас. Раньше вроде она шла отдельно, а теперь как часть CUDA toolkit.
http://developer.nvidia.com/object/cuda_3_0_downloads.html :
CUDA Toolkit
* C/C++ compiler
* cuda-gdb debugger
* CUDA Visual Profiler
* OpenCL Visual Profiler
* GPU-accelerated BLAS library <---- вот она
* GPU-accelerated FFT library
* Additional tools and documentation

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

> Не знаю как сейчас, но в 80-90-х в основном только Fortran и использовали для расчётов

Потому что плюсы тогда пешком под стол ходили, да и С не многим лучше был: C99 не было и доля фортрановских либ была выше. Времена меняются ;)

const86 ★★★★★
()

немного не в тему

Вот здесь в одном из постов некий KSergP описал 55 пакетов для решения задач линейной алгебры

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

> C99 не было

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

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

> Помнится мне он писал что плюсы не дают особых преимуществ

при численных решениях


Как числодробилка - нет, но.. Вы видели интерфейсы классических Fortran-овских библиотек? Это всё настолько сташно и уродливо... Потом, числодробилки редко нужны сами по себе. С++ позволяет нормально структурировать программу и бороться с возрастающей сложностью. Единственный плюс Fortran - он более прост и понятен инженерам, которые то и не программисты вовсе, да и то, Matlab сейчас в этом плане намного, намного круче.

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