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.

# Memahami Biaya Komputasi

Membedah biaya program sebagai waktu, memori, dan energi melalui empat level keputusan, lengkap dengan demo penghitungan biaya yang deterministik.

Buka →
# Profiling

Menemukan bagian program yang paling menyita waktu memakai profiler manual, gprof, dan pola pengukuran chrono.

Buka →
# Compiler Optimization

Memahami apa yang benar-benar dikerjakan compiler optimizer, mengapa semantik program tidak boleh berubah, dan kapan constexpr menjadi optimizer manual.

Buka →
# Optimization Levels

Menakar perbedaan perilaku, ukuran, dan jebakan tiap level optimasi GCC: dari -O0 untuk debugging sampai -Ofast yang mengubah aritmetika.

Buka →
# Cache Locality

Membaca biaya akses memori melalui hierarki cache dan cache line 64 byte, dengan perbandingan traversal baris versus kolom pada matriks.

Buka →
# Memory Layout

Membongkar tata letak byte objek C++: stack versus heap, padding dan alignment antar member, serta false sharing pada program multithread.

Buka →
# Data-oriented Design

Merancang tata letak data mengikuti pola akses hot loop, dengan perbandingan konkret array of struct versus struct of array.

Buka →
# Move Semantics untuk Performa

Membuktikan 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 Memori

Menghitung biaya alokasi heap di dalam loop, memanfaatkan Small String Optimization, memakai ulang buffer, dan mengenal arena allocator sebagai cara mengelompokkan alokasi.

Buka →
# Benchmarking

Mengukur kecepatan secara jujur: mencegah dead-code elimination dengan idiom doNotOptimize, disiplin pemanasan dan pengulangan, harness mini berbasis chrono, dan pengenalan Google Benchmark.

Buka →
# Branch Prediction

Biaya 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: Pengantar

Satu 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 Optimization

Kapan optimasi layak dilakukan: kutipan Knuth dalam konteks yang sehat, keterbacaan sebagai fitur, keputusan berbasis profil, checklist praktis, dan penutup section Performa dan Optimasi.

Buka →