Подтвердить что ты не робот

Fortran vs С++, поддерживает ли Fortran какое-либо преимущество в численном анализе в наши дни?

С быстрым развитием компиляторов С++, особенно с Intel, и способностей непосредственного применения SIMD-функций в ваших кодах C/С++, сохраняет ли Fortran какое-либо реальное преимущество в мире числовых вычислений?

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

Я почти ничего не знаю о Fortran, у меня есть некоторый опыт работы в C/CUDA/matlab (если вы считаете, что последний - это компьютерный язык), а моя ежедневная задача - анализ очень больших данных (например, 10 ГБ матрица), и кажется, что программа по крайней мере тратит 2/3 своего времени на доступ к памяти (вот почему я отправляю часть своей работы на GPU), думаете ли вы, что это может стоить последствий для меня, чтобы попробовать протран по крайней мере, в какой-то критичной для производительности части моих кодов, чтобы улучшить производительность моей программы?

Поскольку сложность и что-то нужно сделать там, я буду идти только по этой программе, если только там есть значительное преимущество в производительности, спасибо заранее.

4b9b3361

Ответ 1

Fortran имеет строгую семантику aliasing по сравнению с С++ и на протяжении десятилетий активно настроен на числовую производительность. Алгоритмы, которые используют CPU для работы с массивами данных, часто могут извлечь выгоду из реализации Fortran.

Перехват языков программирования не следует воспринимать слишком серьезно, но из 15 тестов Fortran занимает первое место по скорости для четырех из них (для Intel Q6600 - одно ядро), больше, чем любой другой отдельный язык. Вы можете видеть, что тесты, в которых сияет Fortran, являются сильно численными:

контрпример:

  • k-нуклеотид на 500% медленнее (этот ориентир в значительной степени фокусируется на более сложных структурах данных и обработке строк, что не является силой Fortran)

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

Таким образом, вопросы, которые вам нужно задать самому себе:

  • Является ли скорость этой функции настолько критической, что переопределение ее в Fortran стоит моего времени?

  • Является ли производительность настолько важной, что мои инвестиции в обучение Fortran окупятся?

  • Возможно ли использовать библиотеку, такую ​​как ATLAS, вместо написания кода?

Ответ на эти вопросы потребует подробного знания вашей базы кода и бизнес-модели, поэтому я не могу ответить на эти вопросы. Но да, реализации Fortran часто бывают быстрее, чем реализации С++.

Другим фактором в вашем решении является количество примерного кода и количество доступных эталонных реализаций. Крепкая история Fortran означает, что имеется множество числовых кодов, доступных для скачивания, и даже с поездкой в ​​библиотеку. Как всегда вам нужно просеять его, чтобы найти хороший материал.

Ответ 2

Полный и правильный ответ на ваш вопрос: "Да, Fortran имеет некоторые преимущества".

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

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

Ответ 3

Фортран просто естественным образом подходит для численного программирования. Вы, как правило, имеете большое количество чисел в таких программах, как правило, с массивами. Массивы являются гражданами первого класса в Фортране, и часто довольно просто перевести числовые ядра из Matlab в Fortran. Что касается потенциальных преимуществ производительности, см. Другие ответы, которые покрывают это довольно хорошо. Возможно, базовая линия позволяет создавать высокопроизводительные численные приложения с большинством компилируемых языков сегодня, но вы можете перепрыгнуть через некоторые циклы, чтобы добраться туда. Fortran был тщательно разработан, чтобы позволить компилятору распознавать большинство точек для оптимизации из-за особенностей языка. Конечно, вы также можете написать произвольный медленный код с любым скомпилированным языком, включая Fortran. В любом случае вы должны выбрать инструменты как подходящие. Fortran подходит для численных приложений, C соответствует системному развитию. В заключительном замечании изучение основ Фортран не сложно, и всегда стоит взглянуть на другие языки. Это открывает другое представление о проблемах, которые вы хотите решить.

Ответ 4

Также стоит упомянуть, что Fortran намного легче освоить, чем С++. Фактически, Fortran имеет более короткую спецификацию языка, чем простая C, и синтаксис, пожалуй, проще. Вы можете подобрать его очень быстро.

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

Ответ 5

Код Fortran лучше всего подходит для работы с матрицей и векторным типом. Но вы также можете создавать аналогичную производительность с кодом c/С++, передавая подсказки/предложения компилятору для создания похожих векторных инструкций. Один из вариантов, который дал мне хороший импульс, заключался в том, чтобы не предполагать псевдонимы памяти среди входных переменных, которые являются объектами массива. Таким образом, компилятор может агрессивно выполнять разворачивание внутренних контуров и конвейерную обработку для ILP, где он может перекрывать нагрузки и хранить операции на итерации цикла с правильными предварительными выборками.