Optimasi tanpa pengukuran hanya tebakan. Kita mulai dari profiling dan biaya komputasi, memahami compiler optimization dan optimization levels, lalu menyentuh cache locality, data-oriented design, hingga benchmarking yang terukur.
Membedah biaya program sebagai waktu, memori, dan energi melalui empat level keputusan, lengkap dengan demo penghitungan biaya yang deterministik.
Buka → # ProfilingMenemukan bagian program yang paling menyita waktu memakai profiler manual, gprof, dan pola pengukuran chrono.
Buka → # Compiler OptimizationMemahami apa yang benar-benar dikerjakan compiler optimizer, mengapa semantik program tidak boleh berubah, dan kapan constexpr menjadi optimizer manual.
Buka → # Optimization LevelsMenakar perbedaan perilaku, ukuran, dan jebakan tiap level optimasi GCC: dari -O0 untuk debugging sampai -Ofast yang mengubah aritmetika.
Buka → # Cache LocalityMembaca biaya akses memori melalui hierarki cache dan cache line 64 byte, dengan perbandingan traversal baris versus kolom pada matriks.
Buka → # Memory LayoutMembongkar tata letak byte objek C++: stack versus heap, padding dan alignment antar member, serta false sharing pada program multithread.
Buka → # Data-oriented DesignMerancang tata letak data mengikuti pola akses hot loop, dengan perbandingan konkret array of struct versus struct of array.
Buka → # Move Semantics untuk PerformaMembuktikan biaya salinan yang bisa dihindari dengan penghitung alokasi: reserve sebelum push_back, emplace_back, idiom pass by value plus move, dan membangun string secara bertahap.
Buka → # Mengurangi Alokasi MemoriMenghitung biaya alokasi heap di dalam loop, memanfaatkan Small String Optimization, memakai ulang buffer, dan mengenal arena allocator sebagai cara mengelompokkan alokasi.
Buka → # BenchmarkingMengukur kecepatan secara jujur: mencegah dead-code elimination dengan idiom doNotOptimize, disiplin pemanasan dan pengulangan, harness mini berbasis chrono, dan pengenalan Google Benchmark.
Buka → # Branch PredictionBiaya tersembunyi instruksi cabang: pipeline prosesor dan prediksi yang salah pada demo klasik array acak versus terurut, cara berpikir branchless, serta petunjuk [[likely]] dan [[unlikely]].
Buka → # SIMD: PengantarSatu instruksi memproses banyak data: konsep SIMD, auto-vectorization GCC yang bisa kita periksa dengan -fopt-info-vec, intrinsics _mm_add_ps pertama, dan kapan SIMD layak dipakai.
Buka → # Menghindari Premature OptimizationKapan optimasi layak dilakukan: kutipan Knuth dalam konteks yang sehat, keterbacaan sebagai fitur, keputusan berbasis profil, checklist praktis, dan penutup section Performa dan Optimasi.
Buka →