4 miliar pernyataan if
- Saat sedang menelusuri media sosial baru-baru ini, saya menemukan tangkapan layar ini di dalam kereta.
- Kode ini adalah contoh sempurna dari trade-off waktu-memori.
- Saya ingin mengimplementasikannya dalam C untuk meningkatkan performa.
Struktur kode
- Saya menulis kode dalam C untuk menentukan bilangan genap dan ganjil.
- Saya mengompilasinya dengan optimisasi dinonaktifkan.
- Program bekerja normal untuk angka 0 sampai 10, tetapi bermasalah untuk angka di atas itu.
Meta-programming
- Saya menggunakan Python untuk melakukan meta-programming pada pernyataan if.
- Saya menghasilkan program untuk menentukan bilangan genap dan ganjil untuk integer 8-bit.
Ekstensi 16-bit
- Saya memperluas program dengan cara yang sama untuk integer 16-bit.
- Saya menghasilkan file C sekitar 130 ribu baris lalu mengompilasinya.
Tantangan 32-bit
- Saya mencoba memperluas program untuk integer 32-bit.
- Saya menghasilkan file C berukuran 330GB, tetapi kompiler gagal karena kehabisan ruang heap.
- Karena keterbatasan format Portable Executable, file di atas 4GB tidak dapat diproses.
Menulis kode mesin secara langsung
- Saya menulis langsung fungsi
IsEven dalam bahasa assembly x86-64.
- Saya menggunakan Python untuk mengompilasi kode mesin secara manual.
Pembuatan file eksekusi
- Saya membuat file berukuran 40GB untuk menentukan bilangan genap dan ganjil untuk semua integer 32-bit.
- File tersebut dipetakan ke memori dan kode dijalankan menggunakan function pointer.
Perbaikan bug terakhir
- Saya mengganti ke fungsi
strtoul untuk menyelesaikan masalah parsing unsigned integer.
- Program ini sangat cepat dan mengembalikan hasil dalam waktu kurang dari 10 detik bahkan untuk angka yang sangat besar.
Pendapat GN⁺
- Pentingnya: Tulisan ini membantu memahami konsep dasar pemrograman, yaitu trade-off waktu-memori. Ini juga menjadi contoh yang baik tentang bagaimana kode yang tidak dioptimalkan memengaruhi performa nyata.
- Menariknya: Proses mengeksplorasi secara eksperimental perbedaan performa antarbahasa pemrograman dan batasan kompiler sangat menarik. Khususnya, upaya meningkatkan performa sambil membandingkan Python dan C terasa menyenangkan.
- Pelajaran: Tulisan ini menunjukkan bahwa untuk menyelesaikan masalah yang kompleks, pendekatan yang tampak tidak efisien kadang justru bisa berguna. Ini juga menekankan pentingnya mencari solusi kreatif dalam ilmu komputer.
1 komentar
Opini Hacker News
Ringkasan komentar pertama:
Ringkasan komentar kedua:
for loopsederhana alih-alih pendekatan kompleks melalui pembuatan kode.Ringkasan komentar ketiga:
is-evendanis-odd.npm installakan mengunduh paket berukuran 40GB.Ringkasan komentar keempat:
Ringkasan komentar kelima:
Ringkasan komentar keenam:
Ringkasan komentar ketujuh:
Ringkasan komentar kedelapan:
Ringkasan komentar kesembilan:
libdivide.Ringkasan komentar kesepuluh: