С быстрым развитием компиляторов C ++, особенно Intel, и способностями прямого применения функций SIMD в ваших кодах C / C ++, сохраняет ли Fortran какое-либо реальное преимущество в мире численных вычислений?
Я из области прикладных математических наук, моя работа включает в себя много численного анализа, вычислений, оптимизаций и тому подобное, со строго определенным требованием к производительности.
Я почти ничего не знаю о Фортране, у меня есть некоторый опыт работы с C / CUDA / matlab (если вы рассматриваете последний как компьютерный язык для начала), и моя ежедневная задача включает анализ очень больших данных (например, матрицы размером 10 ГБ), и кажется, что программа, по крайней мере, тратит 2/3 своего времени на доступ к памяти (вот почему я отправляю часть своей работы в GPU), думаете ли вы, что это может стоить для меня эффекта от попытки рутины Фортрана, по крайней мере, какая-то критическая часть моего кода для повышения производительности моей программы?
Поскольку в этом должны быть задействованы сложности и вещи, я буду выполнять эту процедуру только в том случае, если там будет существенное повышение производительности, заранее спасибо.
Fortran обладает строгой семантикой псевдонимов по сравнению с C ++ и десятилетиями агрессивно настраивался на числовую производительность. Алгоритмы, использующие ЦП для работы с массивами данных, часто могут извлечь выгоду из реализации на Фортране.
Стрельбу по языкам программирования не следует воспринимать слишком серьезно, но из 15 тестов Фортран занимает первое место по скорости на четыре из них (для Intel Q6600 одно ядро), больше, чем любой другой язык. Вы можете видеть, что эталоны, где сияет Фортран, являются в значительной степени числовыми:
контрпример:
Вы также можете увидеть сводную страницу «во сколько раз медленнее«Это показывает, что из всех реализаций код Fortran в среднем ближе всего к самой быстрой реализации для каждого теста — хотя квантильные бары гораздо больше, чем для C ++, что указывает на то, что Fortran не подходит для некоторых задач, в которых хорошо работает C ++, но ты должен знать это уже.
Итак, вопросы, которые вам нужно будет задать себе:
Является ли скорость этой функции настолько критичной, что ее повторная реализация в Фортране стоит моего времени?
Производительность настолько важна, что мои инвестиции в изучение Fortran окупятся?
Можно ли использовать библиотеку типа ATLAS вместо написания кода самостоятельно?
Ответ на эти вопросы потребует детального знания вашей кодовой базы и бизнес-модели, поэтому я не могу ответить на них. Но да, реализации Fortran часто быстрее, чем реализации C ++.
Другим фактором в вашем решении является количество образца кода и количество доступных реализаций ссылок. Сильная история Fortran означает, что существует множество цифровых кодов, доступных для скачивания и даже с поездкой в библиотеку. Как всегда вам нужно будет просеять через него, чтобы найти хорошие вещи.
Полный и правильный ответ на ваш вопрос: «Да, у Fortran есть некоторые преимущества».
C ++ также имеет ряд преимуществ. Как и Python, R и т. Д. Это разные языки. Проще и быстрее делать некоторые вещи на одном языке, а некоторые на других. Все они широко используются в своих общинах и по очень веским причинам.
Что-то еще, в отсутствие более конкретных вопросов, это просто шум и языковая военная приманка, поэтому я проголосовал за то, чтобы закрыть вопрос и надеюсь, что другие тоже.
Фортран просто естественно подходит для численного программирования. Вы склонны иметь большое количество чисел в таких программах, обычно это упорядоченные массивы. Массивы являются гражданами первого класса в Фортране, и часто довольно просто перевести числовые ядра из Matlab в Фортран.
Относительно потенциальных преимуществ производительности смотрите другие ответы, которые достаточно хорошо это описывают. Базовая линия, вероятно, заключается в том, что вы можете создавать высокоэффективные числовые приложения с большинством скомпилированных языков сегодня, но вы можете перепрыгнуть через некоторые циклы, чтобы попасть туда. Fortran был тщательно разработан, чтобы позволить компилятору распознавать большинство мест для оптимизации, благодаря особенностям языка. Конечно, вы также можете написать произвольный медленный код на любом скомпилированном языке, включая Fortran.
В любом случае вы должны выбрать инструменты, которые вам подходят. Fortran подходит для числовых приложений, C подходит для системной разработки. В заключение отметим, что изучение основ Fortran не сложно, и всегда стоит взглянуть на другие языки. Это открывает другой взгляд на проблемы, которые вы хотите решить.
Также стоит отметить, что Fortran намного легче освоить, чем C ++. Фактически, Fortran имеет более короткую спецификацию языка, чем обычный C, и его синтаксис, возможно, проще. Вы можете поднять это очень быстро.
Это означает, что если вы заинтересованы только в изучении C ++ или Fortran для решения одной конкретной проблемы, которая у вас есть на данный момент (скажем, для устранения узких мест в том, что вы написали на языке прототипов), Fortran может дать вам более высокую отдачу от инвестиций. ,
Код Fortran лучше для работы с матричным и векторным типом в целом. Но вы также можете добиться аналогичной производительности с кодом на языке c / c ++, передавая подсказки / предложения компилятору для получения векторных инструкций подобного качества. Одна из опций, которая дала мне хороший импульс, заключалась в том, чтобы не предполагать алиасинг памяти среди входных переменных, которые являются объектами массива. Таким образом, компилятор может агрессивно выполнять развертывание внутреннего цикла и конвейеризацию для ILP, где он может перекрывать нагрузки и сохранять операции в течение итерации цикла с правильными предварительными выборками.