Я инженер-программист, работающий с Fortran в области научных и высокопроизводительных расчётов. Много лет мой хлеб — это численный код, за который редко кто берётся: расчётные ядра, решатели, симуляции и обработка больших массивов данных. Пишу на современном Fortran, от стандарта 77 до 2008 и 2018 годов, и добиваюсь, чтобы программы разворачивались быстро и правильно как на одной рабочей станции, так и на вычислительном кластере. Я сознательно не ухожу в Julia, MATLAB или C++: для узких численных циклов, линейной алгебры и наследуемого научного ПО именно Fortran даёт самую предсказуемую скорость и точность. Для меня на первом месте устойчивость расчёта, воспроизводимость результата и корректная физика, а не факт успешной компиляции.
Отдельное направление — приведение в порядок старых программ. У научных лабораторий и конструкторских отделов нередко есть код, которому по тридцать-сорок лет: он до сих пор даёт цифры, на которые все опираются, но принцип его работы давно забыт. Такой код я разбираю бережно: покрываю тестами, документирую, разбиваю запутанную фиксированную форму на понятные модули, подключаю к сборке и непрерывной интеграции, при этом ни на шаг не отступая от заложенной математики. Когда нужна производительность, распараллеливаю расчёт средствами OpenMP и MPI, оптимизирую работу с памятью и векторизацию, снимаю честный профиль, чтобы видеть настоящие узкие места. При необходимости соединяю Fortran-ядро с Python или C ради удобных обвязок и визуализации.
Если решатель работает слишком долго, модель требует развития или старую расчётную программу нужно продлить ещё на десятилетие — обращайтесь. Я говорю о компромиссах без тумана, оставляю каждый шаг проверяемым и передаю код, который ваши сотрудники смогут вести самостоятельно.
— Разработка на современном Fortran (F77 — 2008/2018), модули и аккуратные интерфейсы
— Высоконагруженные и параллельные вычисления на OpenMP и MPI
— Численные методы: линейная алгебра, решатели ОДУ и УрЧП, интегрирование, оптимизация
— Моделирование и симуляции для физики, инженерии и прикладной математики
— Восстановление наследуемого кода: рефакторинг, тесты, сборка, документация
— Профилирование скорости, векторизация и настройка работы с памятью
— Интеграция Fortran с Python и C для утилит и визуализации
Отдельное направление — приведение в порядок старых программ. У научных лабораторий и конструкторских отделов нередко есть код, которому по тридцать-сорок лет: он до сих пор даёт цифры, на которые все опираются, но принцип его работы давно забыт. Такой код я разбираю бережно: покрываю тестами, документирую, разбиваю запутанную фиксированную форму на понятные модули, подключаю к сборке и непрерывной интеграции, при этом ни на шаг не отступая от заложенной математики. Когда нужна производительность, распараллеливаю расчёт средствами OpenMP и MPI, оптимизирую работу с памятью и векторизацию, снимаю честный профиль, чтобы видеть настоящие узкие места. При необходимости соединяю Fortran-ядро с Python или C ради удобных обвязок и визуализации.
Если решатель работает слишком долго, модель требует развития или старую расчётную программу нужно продлить ещё на десятилетие — обращайтесь. Я говорю о компромиссах без тумана, оставляю каждый шаг проверяемым и передаю код, который ваши сотрудники смогут вести самостоятельно.
— Разработка на современном Fortran (F77 — 2008/2018), модули и аккуратные интерфейсы
— Высоконагруженные и параллельные вычисления на OpenMP и MPI
— Численные методы: линейная алгебра, решатели ОДУ и УрЧП, интегрирование, оптимизация
— Моделирование и симуляции для физики, инженерии и прикладной математики
— Восстановление наследуемого кода: рефакторинг, тесты, сборка, документация
— Профилирование скорости, векторизация и настройка работы с памятью
— Интеграция Fortran с Python и C для утилит и визуализации