Jalur ini menuntun pembaca menguasai Fortran modern melalui sepuluh modul berurutan, dari fondasi bahasa dan array hingga interoperabilitas, paralelisme, dan praktik rekayasa perangkat lunak. Perjalanan dimulai dari pengenalan bahasa, pemasangan, dan standar, berlanjut ke prosedur, modul, dan masukan-keluaran, kemudian tipe turunan dengan pemrograman berorientasi objek, interoperabilitas dengan C serta pustaka numerik BLAS/LAPACK, dan pemrograman paralel dengan OpenMP serta coarray. Setiap topik menyajikan program yang dikompilasi dengan gfortran 14.2 beserta keluaran aslinya dan penjelasan jebakan yang lazim ditemui, sementara keseluruhan jalur ditutup proyek pamungkas berupa solver Poisson 1D yang dibangun, diuji, dan dikemas dengan fpm.
Fortran
Jalur Fortran modern dari dasar sampai proyek terapan: bahasa, array, tipe turunan, interoperabilitas C, paralelisme, hingga pengemasan.
0/0 selesai
Modul pembuka: kedudukan Fortran di dunia komputasi numerik, pemasangan rantai alat, dan konteks standar bahasa dari 77 hingga 2023.
- Apa itu Fortran?Fortran sebagai bahasa komputasi numerik yang mengutamakan array dan perannya yang bertahan di HPC.
- PemasanganMemasang gfortran dan fpm, memeriksa versi, serta menyiapkan editor untuk pekerjaan Fortran.
- Standar dalam konteksnyaPerjalanan standar Fortran 77 hingga 2023 dan alasan kode lama tetap bertahan di lingkungan produksi.
Modul dasar: unit program, tipe dan kind, ekspresi, serta alur kontrol dengan disiplin implicit none pada setiap lingkup.
- Unit program dan implicit noneBentuk unit program, aturan implicit none pada setiap lingkup, dan program pertama yang dikompilasi.
- Tipe dan kind intrinsikTipe intrinsik integer, real, logical, dan character beserta kind literal seperti real32 dan real64.
- Ekspresi dan prioritasOperator aritmetika, relasional, dan logika beserta aturan prioritas dan konversi tipe pada ekspresi.
- Alur kontrolBlok if, perulangan do dengan cycle dan exit, serta pemilihan cabang dengan select case.
Modul prosedur: fungsi dan subrutin dengan antarmuka eksplisit, deklarasi intent, modul dengan pernyataan use, serta submodul.
- Fungsi dan subrutinFungsi dan subrutin sebagai prosedur Fortran beserta semantik pass-by-reference dan antarmuka eksplisit.
- Deklarasi intentintent(in), intent(out), dan intent(inout) sebagai kontrak argumen yang ditegakkan compiler.
- Modul dan useModul sebagai unit organisasi kode, pernyataan use, antarmuka eksplisit, serta kontrol public dan private.
- SubmodulSubmodul untuk memisahkan spesifikasi modul dari implementasi prosedurnya.
Modul array: deklarasi, operasi utuh array, slicing berstride, allocatable, dan intrinsik array sebagai jantung Fortran.
- Deklarasi arrayDeklarasi array dengan batas bawah dan atas, dimensi banyak, serta urutan penyimpanan kolom utama.
- Operasi utuh arrayAritmetika per elemen, assignment array, dan fungsi elemental tanpa perulangan eksplisit.
- Slicing dan section berstrideSection array dengan triplet bawah:atas:stride yang dipakai sebagai nilai kelas satu.
- AllocatableArray dan variabel allocatable dengan alokasi tunda, pemeriksaan allocated, dan dealokasi otomatis.
- Intrinsik arrayIntrinsik array reduction dan manipulasi: sum, matmul, pack, reshape, dan merge dalam praktik.
Modul IO: list-directed, namelist, deskriptor edit format, berkas dan unit, serta rekaman terformat versus tak terformat.
- IO list-directed dan namelistMasukan dan keluaran list-directed dengan format asterisk serta kelompok data bernama melalui namelist.
- Deskriptor edit formatDeskriptor edit format seperti Iw.d, Fw.d, dan Ew.dEe beserta lebar, pengulangan, dan bentuk eksponen.
- Berkas dan unitPerilaku open, close, rewind, dan inquire pada unit IO beserta spesifikasi akses berkas.
- Rekaman terformat versus tak terformatPerbedaan rekaman terformat yang mudah dibaca dan rekaman tak terformat yang ringkas untuk data numerik.
Modul tipe turunan: agregat buatan pengguna, constructor, prosedur terikat tipe, hingga pewarisan dan polimorfisme.
- Tipe turunanTipe turunan sebagai agregat buatan pengguna untuk mengelompokkan data heterogen dalam satu nama.
- Constructor dan inisialisasiNilai bawaan komponen, constructor struktur, dan inisialisasi objek tipe turunan.
- Prosedur terikat tipeProsedur terikat tipe (type-bound procedure) sebagai metode yang dilekatkan pada tipe turunan.
- Extends dan polimorfismePewarisan dengan extends, deklarasi class, dan dispatch dinamis melalui select type.
Modul interop: iso_c_binding, prosedur bind(c), pemakaian BLAS dan LAPACK dari Fortran modern, serta kehati-hatian array lintas bahasa.
- iso_c_bindingKind interoperabel dan tipe modul intrinsik iso_c_binding untuk kesesuaian dengan C.
- Prosedur bind(c)Memanggil fungsi C dari Fortran melalui bind(c) dan meneruskan callback C ke prosedur Fortran.
- BLAS dan LAPACKMemakai dgemm dan rutin BLAS serta LAPACK dari kode Fortran modern dengan OpenBLAS.
- Array melintasi batas bahasaKekontiguan, bentuk eksplisit, dan urutan penyimpanan kolom utama saat array melintasi batas bahasa.
Modul paralel: DO CONCURRENT, direktif OpenMP, dasar dan komunikasi coarray, serta jebakan paralel seperti race condition.
- DO CONCURRENTKonstruksi DO CONCURRENT sebagai paralelisme tingkat perulangan yang ada di dalam bahasa.
- Direktif OpenMPRegion paralel, perulangan worksharing, dan reduksi dengan direktif OpenMP pada gfortran.
- Dasar-dasar coarrayImage, deklarasi coarray dengan codim, dan pernyataan sync sebagai model paralelisme SPMD bawaan bahasa.
- Komunikasi coarrayPenugasan jarak jauh antar-image dan operasi kolektif seperti co_sum pada coarray.
- Jebakan paralelRace condition, hasil not-a-number, dan false sharing beserta cara menghindarinya.
Modul praktik: proyek fpm, debugging dengan gdb, pengujian kode numerik dengan test-drive, serta profiling dan optimasi.
- Proyek fpmStruktur fpm.toml, manajemen dependensi, dan test harness bawaan pada proyek fpm.
- Debugging FortranFlag compiler untuk debug, sesi gdb pada nama Fortran, dan pemeriksaan array bounds.
- Pengujian kode numerikPengujian rutin numerik dengan test-drive dan pFUnit serta disiplin pengujian pada CI.
- Profiling dan optimasiProfil gprof dan perf, dampak flag optimasi, serta membaca hotspot pada kernel numerik.
Modul penutup: pemilihan proyek, verifikasi terhadap kebenaran solusi yang diketahui, serta dokumentasi dan pengemasan.
- Pemilihan proyekMemilih dan merancang proyek akhir: solver PDE, Monte Carlo, atau penghitung nilai eigen.
- Verifikasi terhadap kebenaranMemverifikasi program numerik terhadap solusi yang telah diketahui melalui estimasi error.
- Dokumentasi dan pengemasanMendokumentasikan dan mengemas proyek fpm dengan build yang dapat direproduksi.