Перейти до вмісту

Fortran

Матеріал з K2 ERP Wiki

Він цікавий для:


end program main
== Functions ==

Приклад:

Modern Fortran

p%mass = 3.0

Приклад:

  • чисельні методи;
  • матриці й масиви;
  • фізичні моделі;
  • інженерні симуляції;
  • лінійна алгебра;
  • диференціальні рівняння;
  • обчислення на суперкомп’ютерах;
  • довгі цикли;
  • оптимізація компілятором;
  • стабільність коду протягом десятиліть.; Окремо варто відзначити Julia, R і інших мов.; end do

У modern Fortran allocatable arrays часто безпечніші й зручніші за старі manual memory patterns.; # Відокремлювати чисельне ядро від I/O.;== Derived types ==

Pure procedures

end program main

character(len=20) :: name

a(3) = 30.0 Приклад:

Це краще відповідає layout пам’яті.;

implicit none

Дивіться додатково

Використання:

real :: x

module math_utils

Мета модернізації — не переписати все, а зробити код безпечнішим для змін.; офіційно затверджений Fortran-lang Learn section збирає modern canonical way of doing things in Fortran і радить сучасний підхід до вивчення.; Під час роботи з Fortran варто:


Багато мов, включно з Python/NumPy/SciPy, опосередковано використовують бібліотеки, написані на Fortran або сумісні з Fortran ABI.; Сценарії:

 y = x * x

* компільованих чисельних ядер;
* HPC;
* довготривалих simulation codes;
* інтеграції з supercomputers;
* бібліотек, які мають працювати оперативно й довго.;<ref>https://fortranwiki.org/fortran/show/GFortran</ref>
== Subroutines ==
Компіляція через gfortran:
== Fortran і MATLAB ==
end do
<div style="background:#fff0f0;border-left:6px solid #eb5757;padding:14px 18px;margin:16px 0;border-radius:8px;">

Такий підхід надає можливість поєднати зручність Python і швидкість Fortran.; # Документувати units, assumptions і input data.; use iso_fortran_env, only: real64

 y = x * x

Fortran розвивався через багато стандартів:

* Fortran library + Python wrapper;
* NumPy/SciPy integration;
* f2py;
* C ABI wrapper;
* performance-critical kernels;
* scientific workflows.; # Використовувати bounds checking у debug.; function square(x) result(y)

Обмеження:

Але Fortran-код можна інтегрувати в API через:

* висока продуктивність;
* масиви й матриці;
* mature optimizing compilers;
* HPC;
* BLAS/LAPACK ecosystem;
* OpenMP/MPI;
* coarrays;
* modern Fortran features;
* legacy scientific code;
* стабільність;
* decades of validated libraries.; a = square(a)
'''LAPACK''' — Linear Algebra PACKage.;== GFortran ==

<div style="background:#eef6ff;border-left:6px solid #2f80ed;padding:14px 18px;margin:16px 0;border-radius:8px;">

* OpenMP offload;
* OpenACC;
* CUDA Fortran у NVIDIA ecosystem;
* vendor-specific compilers;
* library calls;
* mixed-language kernels.; * '''Derived type''' — користувацький тип даних.; implicit none

Сценарії:

Fortran особливо корисний для:

Fortran часто застосовується в:

Але основну бізнес-логіку ERP не варто писати на Fortran.; real :: y

[[Категорія:Пояснення термінів]]
Приклад ідеї:

Elemental procedure має змогу застосовуватися до scalar і array.;== Профілювання ==

Приклад:

 c = a + b

== do loops ==

Це відрізняє Fortran від C, Python і багатьох інших мов.;<pre>

<pre>

== Коли Fortran особливо корисний ==

* NetCDF;
* HDF5.; interface norm

Modules допомагають організувати код і створюють explicit interfaces.; -g

do i = 1, n

real(real64) :: x

Науковий Fortran-код має бути відтворюваним.;== Intel Fortran Compiler ==
<pre>

Vectorization надає можливість CPU виконувати одну операцію над кількома даними.; * '''fpm''' — Fortran Package Manager.;

Legacy modernization

print *, square(3.0)

program hello

real :: x [*]

Пояснення термінів

Pure procedure не має side effects, які порушують чистоту обчислень.; # Використовувати modules.; Fortran досі сильний для production HPC і перевірених чисельних бібліотек.; * HDF5 — формат і бібліотеки для ієрархічних наукових даних.; * Intel Fortran Compiler — Fortran-компілятор Intel oneAPI.; !;

type :: particle

  • compiler version;
  • compiler flags;
  • math libraries;
  • BLAS/LAPACK implementation;
  • input data;
  • random seeds;
  • platform;
  • number of MPI ranks;
  • OpenMP threads;
  • floating-point settings;
  • code commit;
  • dependencies.; pure function add(a, b) result(c)
  • out-of-bounds array access;
  • uninitialized variables;
  • integer overflow;
  • unsafe input files;
  • legacy I/O;
  • unchecked assumptions;
  • memory corruption;
  • unsafe C interoperability;
  • build system risks;
  • supply chain dependencies;
  • running untrusted scientific code.; * HPC — High Performance Computing.; real :: y
function square(x) result(y)

type(particle) :: p

a = a * factor

Не кожен Fortran-код автономно стане швидким на GPU.; Julia позиціонується як modern high-level мова для high-performance scientific computing.;


* не mainstream для web/backend;
* менший ринковий сегмент розробників;
* багато legacy-коду потребує модернізації;
* tooling менш зручний, ніж у Python/JavaScript/C#;
* package ecosystem історично слабший;
* складна інтеграційні функціональні можливості з modern app layers без wrappers;
* для нечисельних задач часто є собою кращі мови.;<code>do concurrent</code> описує цикл, ітерації якого можуть виконуватися незалежно.;== implicit none ==

a = 0.0

Fortran у бізнесі корисний, якщо є собою:

'''Modern Fortran''' — це стиль Fortran після Fortran 90, який використовує сучасні функціональні можливості мови:

* наукові моделі;
* інженерні симуляції;
* чисельні бібліотеки;
* legacy scientific code;
* high-performance kernels;
* climate/weather models;
* financial numerical models;
* industrial simulation;
* integration with HPC.;<pre>

[[Категорія:HPC]]

 implicit none

!$omp parallel do
Для production performance ці flags не завжди підходять, але для debug дуже корисні.; Офіційна сторінка GNU Fortran зазначає, що проєкт підтримує роботу функціональні можливості останніх стандартів до Fortran 2018 і має initial support of some features of Fortran 2023.; * '''Column-major order''' — порядок зберігання багатовимірних масивів у Fortran.; * '''Coarray''' — механізм паралельного програмування у Fortran.; complex :: z

* modules;
* explicit interfaces;
* array syntax;
* allocatable arrays;
* derived types;
* generic interfaces;
* elemental functions;
* pure procedures;
* coarrays;
* do concurrent;
* interoperability with C;
* object-oriented features;
* better type safety;
* free-form source.; # Не використовувати Fortran там, де він не дає переважні аспекти.; a(i) = a(i) + 1.0

* fixed-form source;
* COMMON blocks;
* GOTO;
* implicit typing;
* глобальний стан;
* старі I/O patterns;
* відсутність modules;
* масиви з фіксованими розмірами;
* складність тестування.; як ілюстрація, у Fortran часто краще:

Вибір компілятора залежить від:

real, allocatable :: a(:)

Але Fortran має змогу бути корисний для:

* використовувати прості loops;
* уникати aliasing;
* правильно організовувати memory access;
* використовувати <code>do concurrent</code>, де доречно;
* перевіряти compiler vectorization reports.;== Fortran і AI ==

* gprof;
* perf;
* Intel VTune;
* NVIDIA Nsight;
* HPC profilers;
* compiler reports;
* timing instrumentation;
* MPI profiling tools.;== Безпека ==

fpm — важлива частина modern Fortran ecosystem, бо історично Fortran довго не мав єдиного зручного package manager.; Fortran зберігає багатовимірні масиви в column-major order.;<pre>

Це надає можливість:

Python часто використовують як високорівневий інтерфейс, а Fortran — як швидке чисельне ядро.; Підходи:

BLAS містить базові операції лінійної алгебри: Приклад modern Fortran: p%y = 2.0 істотно стежити за layout пам’яті й порядком індексів.; Fortran краще для: Це має змогу призвести до помилок через опечатки.; * OpenMP — API для shared-memory parallelism.;== Тестування Fortran-коду ==

Типові помилки у Fortran

Приклад:

  • NVIDIA HPC SDK Fortran;
  • NAG Fortran Compiler;
  • LLVM Flang;
  • LFortran;
  • Cray Fortran;
  • IBM XL Fortran historically;
  • vendor compilers для HPC systems.; Приклад:

Це краще, ніж покладатися на неявні типи.; без ускладнень “Fortran” має змогу означати як сучасний код, так і старий Fortran 77.; Для звичайних web, CRM, ERP або mobile задач Fortran майже ніколи не є собою першим вибором.; a(i) = a(i) + 1.0

Web/API layer → Python/Go/C#/Java service → Fortran numerical library


BLAS реалізації часто дуже оптимізовані під hardware.; # Замінити COMMON blocks на modules.; Free form виглядає як нормальний сучасний код:
</div>
|-
| '''Fortran''' || масиви, чисельні обчислення, legacy scientific libraries, HPC kernels
|-
| '''C/C++''' || системне програмування, performance control, templates, hardware-level code, broader ecosystem
|}

[[Категорія:Scientific Computing]]

Legacy Fortran-код не обов’язково поганий.; # Модернізувати legacy code поступово.; program main

* HPC;
* scientific computing;
* numerical methods;
* array-heavy computations;
* climate modeling;
* CFD;
* physics simulations;
* linear algebra;
* legacy scientific libraries;
* code that must run fast for decades;
* supercomputing;
* Fortran libraries behind Python/R/Julia.;== Reproducibility ==

Приклад generic interface:

<pre>

  • unit tests;
  • regression tests;
  • golden tests;
  • numerical tolerance tests;
  • integration tests;
  • comparison with reference data;
  • property-based checks for numerical invariants;
  • compiler matrix;
  • CI on multiple platforms.; Особливість

Fortran історично створювався для задач, де важливі:

Вона вимикає implicit typing.; * BLAS — Basic Linear Algebra Subprograms.; Використання:

Це дає компілятору більше інформації для оптимізації й паралелізації.; Класичний цикл: Приклад:

Fortran за замовчуванням індексує масиви з 1.; Без цього результат має змогу відрізнятися на іншій машині.;

Allocatable arrays

implicit none

intent показує, як parameter застосовується:

Modern Fortran сильно відрізняється від старого fixed-form Fortran 77.; * do concurrent — цикл із незалежними ітераціями.; # Створити Python/C API wrapper, якщо потрібно.;[1]

Для performance істотно правильно організовувати loops.; Performance потрібно вимірювати.; * iso_fortran_env — стандартний module для portable constants і kinds.; # Завжди писати implicit none.; Потрібні tolerances.; Приклад:

end interface norm

MPI + Fortran — класична комбінація для HPC.; end do

Coarrays дозволяють працювати з images — паралельними виконаннями програми.; a(1:10) = 0.0

Тоді можна викликати:

Allocatable arrays дозволяють виділяти пам’ять під час виконання.; Для наукових кодів важлива не лише cyber security, а й correctness: неправильний результат має змогу бути серйозною проблемою.;[2]

  • окреме чисельне ядро для складних розрахунків;
  • інтеграційні функціональні можливості з legacy scientific/engineering code;
  • оптимізаційна модель;
  • прогнозна модель;
  • обробка великих чисельних масивів;
  • backend-бібліотека, яку викликає інша мова;
  • розрахунковий компонент для інженерного бізнес-процесу.; # Відокремити I/O від чисельного ядра.;== OpenMP ==
end program hello
'''Для документації:''' краще писати “modern Fortran” або конкретний стандарт: Fortran 2008, Fortran 2018, Fortran 2023.; Modules — основа modern Fortran.; Interfaces потрібні для generic procedures, explicit interfaces і interop.;<pre>

end function add

* потрібен web backend;
* потрібна ERP-бізнес-логіка;
* потрібен mobile app;
* потрібен GUI;
* потрібна AI ecosystem;
* потрібен великий ринковий сегмент generalist developers;
* задача не є собою чисельною;
* команда не має Fortran/HPC досвіду;
* потрібна швидка інтеграційні функціональні можливості з modern SaaS;
* достатньо Python/NumPy або MATLAB.;{{SEO|title=Fortran — мова для HPC, наукових обчислень, чисельних методів, масивів, модулів, BLAS/LAPACK і modern scientific computing|description=Fortran — Wiki-стаття про мову програмування Fortran для високопродуктивних наукових, інженерних і чисельних обчислень. Розглянуто modern Fortran, Fortran 2023, gfortran, Intel Fortran Compiler, HPC, масиви, modules, subroutines, functions, derived types, allocatable arrays, do concurrent, coarrays, OpenMP, MPI, BLAS, LAPACK, NetCDF, HDF5, legacy Fortran, Fortran 77, Fortran 90/95/2003/2008/2018/2023, тестування, fpm, C/Python interoperability, продуктивність, обмеження, безпеку та практичне використання Fortran у науці, інженерії, кліматичному моделюванні, фізиці, CFD і чисельному ПЗ.|keywords=Fortran, modern Fortran, Fortran 2023, Fortran 2018, Fortran 2008, Fortran 90, Fortran 77, gfortran, GNU Fortran, Intel Fortran Compiler, Fortran HPC, high performance computing, scientific computing, numerical computing, BLAS, LAPACK, OpenMP Fortran, MPI Fortran, coarrays, do concurrent, Fortran modules, derived types, allocatable arrays, fpm Fortran, Fortran Package Manager, NetCDF Fortran, HDF5 Fortran, legacy Fortran, scientific programming, чисельні методи, наукові обчислення, інженерні розрахунки|alternativeTo=повільні чисельні скрипти без компіляції; ручна реалізація лінійної алгебри; HPC-код без масивів; переписування перевірених наукових бібліотек без потреби; чисельні ядра без оптимізуючих компіляторів; legacy-науковий код без модернізації; Python-код без native numerical backend; C-код без зручної роботи з масивами}}
Fortran має базові типи:
Типові ознаки старого Fortran:
Fortran не асоціюється з web-security, але безпека все одно важлива.; * gdb;
* lldb;
* compiler checks;
* bounds checking;
* sanitizer support у деяких toolchains;
* Intel tools;
* HPC debuggers;
* logging;
* assertions.; Nested loops часто використовуються в чисельних кодах.; real, intent(in) :: x

завдяки наявності <code>iso_fortran_env</code>користувачі можуть писати більш portable код.; allocate(a(1000))

== Масиви ==

* не писати <code>implicit none</code>;
* використовувати старий fixed-form стиль для нового коду;
* не перевіряти array bounds;
* порівнювати real numbers через точну рівність;
* не фіксувати compiler flags;
* не писати tests для чисельних routines;
* змішувати I/O і computation;
* створювати зайві temporary arrays;
* неправильно організовувати loop order;
* ігнорувати column-major layout;
* переписувати перевірений legacy code без тестів;
* не документувати units і assumptions;
* не перевіряти portability між компіляторами.; * '''implicit none''' — директива, що вимикає implicit typing.; * '''Function''' — процедура, що повертає значення.; real, intent(inout) :: a(:)
== Актуальний стандарт ==

Погано:

Одна з найважливіших практик Fortran:

Хороші практики

fpm build

Fortran і R

Slicing робить код коротшим і ближчим до математичного запису.;== Простий приклад ==

real :: y

OpenMP часто застосовують, коли потрібно з Fortran для shared-memory parallelism.; # Використовувати BLAS/LAPACK замість ручної лінійної алгебри.;== Джерела ==

OpenMP популярний у HPC-коді, бо надає можливість поступово паралелізувати loops.; Проста аналогія: Fortran — це не мова для красивих web-сторінок.;== Fortran і C/C++ ==

  • кліматичні інформаційні дані;
  • геофізика;
  • великі масиви;
  • simulation outputs;
  • scientific datasets;
  • parallel I/O.; Так Fortran робить обчислення, а API-шар відповідає за HTTP, auth, logging і deployment.; use iso_c_binding

MATLAB має змогу бути front-end для прототипу, а Fortran — backend для performance-critical ядра.;== LAPACK ==

matrix(:, 1) = 1.0

Модернізація Fortran-коду — важлива задача.; # Писати tests із numerical tolerances.;<pre>

 real :: c

Для чисельних задач істотно правильно вибирати precision.; a(1) = 10.0
== Наукові сфери використання ==
Приклади реалізацій:
<div style="background:#f6ffed;border-left:6px solid #27ae60;padding:14px 18px;margin:16px 0;border-radius:8px;">

 y = x**2 + 3.0*x + 1.0
Приклад:
end function square

Приклад:

* <code>intent(in)</code>;
* <code>intent(out)</code>;
* <code>intent(inout)</code>.; Поширені помилки:

Типові команди:

* '''Fortran''' — мова програмування для чисельних і наукових обчислень.;<ref>https://fortran-lang.org/learn/os_setup/install_gfortran/</ref>

Головна ідея Fortran — результативно обчислювати.; # Використовувати <code>iso_fortran_env</code> для precision.; # Додати CI.; Мова !!; Станом на травень 2026 року актуальний стандарт мови — '''Fortran 2023'''.;[[Категорія:Numerical Computing]]
Він не веде обліковий облік, не проводить документи й не керує складом сам по собі.; GPU offload потребує окремого performance design.; WG5, робоча група, відповідальна за стандарти Fortran, зазначає, що Fortran 2023, ISO/IEC 1539:2023, є собою current standard і був опублікований у листопаді 2023 року.; end do

== Fortran і Julia ==

./main

real :: temperature

end type particle
-fcheck=all
a(2) = 20.0

== C interoperability ==

* викликати C з Fortran;
* викликати Fortran з C;
* інтегруватися з іншими мовами через C ABI;
* створювати bindings для Python.; Intel додатково має окрему сторінку завантаження Intel Fortran Compiler 2026.0.0, де зазначено functional і security updates.;== NetCDF і HDF5 ==

Порівняння:

Приклад:
'''BLAS''' — Basic Linear Algebra Subprograms.;[[Категорія:Fortran]]
У Fortran MPI застосовується для distributed-memory parallelism.; * '''NetCDF''' — формат і бібліотеки для наукових масивних даних.;== Індексація масивів ==

<pre>

 real :: x, y

* interactive workflows;
* notebooks;
* modern compiler architecture;
* educational use;
* tooling experiments.; Fortran підтримує роботу slicing.;

Добра практика: спочатку алгоритм, потім layout, потім compiler optimization, потім low-level tuning.; # Перевіряти код кількома компіляторами, якщо можливо.; Інструменти:

Але його потрібно модернізувати обережно.; Без implicit none Fortran має змогу автономно вважати змінні певного типу за першою літерою імені.;[3]

Приклад:

  • integer;
  • real;
  • complex;
  • logical;
  • character.;
* суперкомп’ютери; * кластери; * distributed simulations; * CFD; * climate models; * physics codes.; Fortran Wiki зазначав, що з GCC 16.1 у квітні 2026 року GFortran нативно підтримує роботу coarrays Fortran 2008 і паралельні функціональні можливості Fortran 2018 на single-node shared memory.; Це простий спосіб уникнути багатьох тихих помилок.; LAPACK використовує BLAS і надає алгоритми для: Назва '''Fortran''' походить від '''Formula Translation'''.;== Інші компілятори == Fortran історично дуже тісно пов’язаний із BLAS/LAPACK.; * '''Module''' — одиниця організації modern Fortran-коду.; # Додавати <code>intent</code> до arguments.;<div style="background:#fff7e6;border-left:6px solid #f2994a;padding:14px 18px;margin:16px 0;border-radius:8px;"> * [[MATLAB]] * [[Python]] * [[Julia]] * [[C Sharp]] * [[Go]] * [[Assembly]] * [[Haskell]] * [[F Sharp]] * [[Groovy]] * [[Розробка в K2 ERP]] * [[Тестування коду]] * [[API K2 ERP]] * [[Інтеграції K2 ERP]] * [[Deep Learning]] * [[PyTorch]] * [[Keras]] * [[MLflow]] * [[Штучний інтелект]] * [[Генеративний AI]] real, intent(in) :: factor * [https://fortran-lang.org/ Fortran-lang — офіційно затверджений сайт спільноти] * [https://fortran-lang.org/learn/ Fortran-lang — Learn] * [https://fortran-lang.org/learn/os_setup/install_gfortran/ Fortran-lang — Installing GFortran] * [https://wg5-fortran.org/ WG5 — Fortran Standards] * [https://wg5-fortran.org/f2023.html WG5 — Fortran 2023] * [https://gcc.gnu.org/fortran/ GNU Fortran] * [https://gcc.gnu.org/wiki/GFortran GCC Wiki — GFortran] * [https://fortranwiki.org/fortran/show/GFortran Fortran Wiki — GFortran] * [https://www.intel.com/content/www/us/en/developer/tools/oneapi/fortran-compiler-download.html Intel — Download Intel Fortran Compiler] * [https://www.intel.com/content/www/us/en/developer/articles/release-notes/fortran-compiler/2026.html Intel Fortran Compiler Release Notes 2026] * [https://www.intel.com/content/www/us/en/developer/articles/release-notes/oneapi-toolkit/2026.html Intel oneAPI Toolkit Release Notes 2026] * [https://netlib.org/blas/ BLAS] * [https://netlib.org/lapack/ LAPACK] * [https://www.openmp.org/ OpenMP] * [https://www.mpi-forum.org/ MPI Forum] * [https://fpm.fortran-lang.org/ Fortran Package Manager] * [https://www.unidata.ucar.edu/software/netcdf/ NetCDF] * [https://www.hdfgroup.org/solutions/hdf5/ HDF5] * [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki — Help:Formatting] * [https://www.mediawiki.org/wiki/Help:Links MediaWiki — Help:Links] == Коли Fortran має змогу бути невдалим вибором == <pre> implicit none Підходи: == Coarrays == Fortran має стандартизовану interoperability з C через <code>iso_c_binding</code>.; Приклад: <pre> Fortran можна debug-ити через: Function повертає значення.;== Free form і fixed form == fpm test [[Категорія:MPI]] Це означає, що перший індекс змінюється найшвидше.; logical :: active * платформи; * стандарту; * HPC hardware; * performance; * diagnostics; * OpenMP/MPI/offload support; * licensing; * legacy compatibility.;<pre> <pre> <pre> Приклад: real, intent(in) :: a, b Fortran має змогу використовуватися в R packages для швидких чисельних частин.; Це лабораторний двигун для великих обчислень: старий, перевірений і досі дуже швидкий.; module procedure norm_real Fortran часто використовують у задачах, які виконуються годинами, днями або тижнями на кластерах.; '''Fortran 77''' — старий стандарт, який досі часто зустрічається в legacy-науковому коді.; * vector operations; * matrix-vector multiplication; * matrix-matrix multiplication.; це одна з найстаріших мов програмування, яка досі активно застосовується; додатково реалізовано інженерних і чисельних обчислень виступає ключовою рисою високопродуктивних наукових забезпечується через '''Fortran'''.;<ref>https://gcc.gnu.org/fortran/</ref> Потрібно фіксувати: == Modules == Перед оптимізацією треба зрозуміти bottleneck.; # Розбити великі routines.; Масиви — одна з головних сильних сторін Fortran.; Derived types дозволяють писати більш структурований modern Fortran.; Вона не модна в web-розробці, але дуже сильна в HPC, фізиці, кліматичних моделях, CFD, лінійній алгебрі й старих наукових кодових базах.; * '''GFortran''' — GNU Fortran compiler у складі GCC.; операційна дія застосовується до всього масиву.; Fortran дуже сильний у HPC завдяки наявності: Встановлення GFortran описано на Fortran-lang для Windows, Linux, macOS і OpenBSD.; fpm run Pure procedures корисні для optimization, parallelism і reasoning.; # Профілювати перед оптимізацією.;== fpm == Fortran не є собою типовою мовою для web API.; * чисельних solvers; * simulation data generation; * фізичних моделей; * scientific ML; * legacy numerical kernels; * HPC preprocessing; * climate/physics simulations для AI workflows.; real, intent(in) :: x Приклад: real :: a(10) == Fortran і ERP-системи == [[Категорія:Legacy Systems]] * optimizing compilers; * array syntax; * long history in supercomputing; * BLAS/LAPACK; * MPI; * OpenMP; * coarrays; * numerical focus; * legacy scientific codes; * portability across HPC systems.;

BLAS

Fortran-компілятори часто добре векторизують чисельні loops.;
  • memory layout;
  • loop order;
  • vectorization;
  • cache locality;
  • compiler optimization flags;
  • BLAS/LAPACK usage;
  • avoiding unnecessary temporaries;
  • array slicing;
  • parallelization;
  • I/O;
  • algorithm choice.; * Fortran 2023 — актуальний стандарт ISO/IEC 1539:2023.; a = a + 1.0
HPC — High Performance Computing.;

Типи даних

LFortran

  • кліматичному моделюванні;
  • weather forecasting;
  • computational fluid dynamics;
  • finite element analysis;
  • quantum chemistry;
  • astrophysics;
  • nuclear engineering;
  • geophysics;
  • ocean modeling;
  • aerospace;
  • mechanical engineering;
  • numerical libraries.; real :: b(0:9)

Порівняння:

if (x == y) then

print *, "equal"

end if

Краще:

if (abs(x - y) < tolerance) then
 print *, "close enough"
end if

Floating-point arithmetic має похибки округлення.

Це критично для наукових обчислень.

Debugging

end do

Interfaces роблять API чистішим і типобезпечнішим.; * MPI — Message Passing Interface для distributed parallelism.; Для AI частіше використовують Python, PyTorch, JAX, TensorFlow.; -Wextra end subroutine scale_array

y = x * x

real :: matrix(100, 100)


== Fortran у бізнесі ==
contains
Fortran використовує <code>kind</code> для керування точністю.; p%x = 1.0

MATLAB зручний для інтерактивних інженерних обчислень.; {| class="wikitable"

У контексті [[K2 ERP]] Fortran має змогу бути корисним тільки в специфічних випадках:

Сильні сторони:

Coarrays — вбудована модель паралельного програмування у Fortran.; # Використовувати modern Fortran free form.;<pre>

 end function square

a = 0.0

<pre>
== Elemental procedures ==

'''Правило №1 для modern Fortran:''' завжди пишіть <code>implicit none</code>.; * '''Modern Fortran''' — сучасний стиль Fortran після Fortran 90.; Для нового коду варто використовувати free form.; '''LFortran''' — modern interactive LLVM-based Fortran compiler project.; Окрім GFortran і Intel Fortran, існують:

<pre>

[[Категорія:OpenMP]]

GNU Fortran зазначає, що має широку підтримку стандартів до Fortran 2018 і initial support of some features of Fortran 2023.; '''fpm''' — Fortran Package Manager.; Часто це код, який десятиліттями перевірявся в наукових і промислових задачах.; * '''Floating-point tolerance''' — допустима похибка для порівняння чисел із плаваючою комою.; Fortran має змогу використовувати GPU через:
'''Intel Fortran Compiler''' — комерційний/на безоплатній основі доступний через Intel oneAPI компілятор для Fortran.;== Fortran 77 і legacy code ==

[[Категорія:Програмування]]

Fortran перевірені компілятори, legacy libraries, HPC stability
Julia high-level syntax, JIT, modern multiple dispatch, research productivity

do concurrent (i = 1:n)

NumPy/SciPy можуть використовувати BLAS/LAPACK, які мають Fortran API/ABI або походження.; # Ввести derived types.;== Precision і kind ==

do concurrent

Fortran — це спеціалізована, але дуже важлива мова для чисельних і наукових обчислень.; У багатьох AI/science workflows Fortran має змогу бути “невидимим двигуном” під високорівневим Python-кодом.; MPI — Message Passing Interface.; Багато наукового Python-стеку історично пов’язано з Fortran-бібліотеками.;


* linear systems;
* eigenvalues;
* singular value decomposition;
* least squares;
* matrix factorizations.;

Fortran не є собою головною мовою для сучасного AI research.;== Головна ідея ==

У HPC-проєктах часто є собою суміш Fortran, C, C++, Python і shell scripts.; Корисні compiler flags для GFortran можуть включати:

Fortran має bindings для роботи з цими форматами.;== Floating-point tolerance ==

Julia має змогу бути зручнішою для нових numerical experiments.;

!; Сильні сторони

Він сприяє створювати, збирати й тестувати Fortran-проєкти.; * WG5 — робоча група, відповідальна за стандарти Fortran.; Це означає, що навіть розробники Python часто непрямо користуються Fortran-світом.; * Allocatable array — масив, пам’ять для якого виділяється під час виконання.; Сценарії:

  • FORTRAN IV;
  • FORTRAN 66;
  • FORTRAN 77;
  • Fortran 90;
  • Fortran 95;
  • Fortran 2003;
  • Fortran 2008;
  • Fortran 2018;
  • Fortran 2023.;== Практичний висновок ==

У чисельних задачах часто не можна порівнювати floating-point results через точну рівність.; # Додати implicit none.;== GPU і offload ==

HPC

x = 2.0

fpm new my_project

Functions корисні для чисельних формул, але для масивів і складних output часто використовують subroutines.; # Використовувати explicit interfaces.; Fortran найкраще використовувати там, де потрібні швидкі, перевірені й довготривалі чисельні ядра: HPC, наукові бібліотеки, фізичні симуляції, інженерні моделі й legacy scientific software.; Це типовий pattern: high-level language для користувача, Fortran/C/C++ для performance.; * Legacy Fortran — старий Fortran-код, часто Fortran 77 або старіший стиль.; # Документувати assumptions.;[4]


 print *, y
 real, intent(in) :: x
Саме тут важливі performance, точність і перевірені алгоритми.; Derived type — користувацький тип даних.; * '''LAPACK''' — Linear Algebra PACKage.; # Профілювати performance перед оптимізацією.;<pre>
== Fortran і API ==

!$omp end parallel do

do i = 1, n

[[Категорія:Modern Fortran]]

== Fortran і NumPy/SciPy ==
 a(i) = a(i) + 1.0
 real :: y

== Interfaces ==

Сучасний Fortran використовує free form.; # Перевести fixed form у free form.; end function square

 use math_utils

Щоб допомогти компілятору: deallocate(a)

Fortran має змогу бути дуже швидким, але performance залежить від:

Продуктивність

Можна задавати власні межі:

GFortran — популярний open-source компілятор.;[5]

do i = 1, m

Intel oneAPI Toolkit Release Notes 2026 зазначає, що Intel Fortran Compiler 2026.0 готовий для нових процесорів і додає актуалізація, пов’язані з Fortran 2023 features, coarrays, offload code і numerical output predictability.; GFortran — GNU Fortran compiler у складі GCC.; Fortran і C/C++ часто співіснують у HPC.; * iso_c_binding — стандартний module для C interoperability.;[6]

Коротко: Fortran — це мова для швидких чисельних обчислень.; Fortran має зручний array syntax:

Fortran не є собою ERP-системою.; -Wall

module procedure norm_complex
  • OpenBLAS;
  • Intel oneMKL;
  • BLIS;
  • vendor BLAS.;

matrix(1, :) = 2.0

Vectorization

Типовий pattern:

MPI

program main elemental function square(x) result(y) Fixed form має історичні правила колонок.; Мова створювалася для того, щоб інженери, фізики й математики могли результативно записувати формули, працювати з масивами й запускати обчислення на реальному hardware.; * Subroutine — процедура без return value.; end module math_utils


 real :: mass

 a(i, j) = a(i, j) + 1.0

* C wrapper;
* Python wrapper;
* shared library;
* command-line executable;
* microservice wrapper;
* C++/Rust/Go binding;
* batch job.; # Додати tests.; integer :: count

Subroutine — процедура без return value.; subroutine scale_array(a, factor)

Але для production HPC потрібно перевіряти maturity під конкретну задачу.; Мова !!; implicit none
Ризики:
-fbacktrace
 print *, "Hello, Fortran"

gfortran main.f90 -o main

do j = 1, n

R застосовується для статистики й data analysis.; Старий Fortran часто використовував fixed form.;== Column-major order ==



Array slicing

Fortran-код потрібно тестувати так само, як будь-який production-код.;== Python і Fortran == У наукових обчисленнях часто використовують формати даних: real :: a(3) Fortran має змогу бути невдалим вибором, якщо: офіційно затверджений сайт Fortran-lang описує Fortran як high-performance parallel programming language, створену для computationally intensive applications in science and engineering.; implicit none