8 poin oleh GN⁺ 2024-01-10 | 1 komentar | Bagikan ke WhatsApp

Kompilator JIT Ditambahkan ke Python 3.13

  • Pengembang inti CPython, Brandt Bucher, mengajukan pull request untuk menambahkan kompilator JIT ke branch Python 3.13.
  • Perubahan ini akan menjadi salah satu perubahan terbesar pada interpreter CPython sejak interpreter adaptif terspesialisasi yang ditambahkan di Python 3.11.

Apa itu JIT?

  • Kompilasi JIT (Just in Time) berarti kompilasi dilakukan saat kode dijalankan untuk pertama kalinya.
  • Kompilator JIT adalah kompilator yang menghasilkan machine code, berlawanan dengan kompilator AOT (Ahead of Time).
  • Kode Python terlebih dahulu dikompilasi menjadi bytecode, dan bytecode ini tidak memiliki arti langsung bagi CPU serta dijalankan melalui loop interpreter bytecode khusus.

Apa itu copy-and-patch JIT?

  • copy-and-patch JIT adalah konsep yang diusulkan pada 2021, dirancang sebagai algoritma cepat untuk runtime bahasa dinamis.
  • copy-and-patch JIT adalah gagasan menyalin instruksi untuk setiap opcode lalu mengisi (menambal/patch) argumen bytecode.

Kelebihan dan kekurangan copy-and-patch JIT

  • Sementara kompilator JIT "penuh" mengompilasi bytecode tingkat tinggi menjadi instruksi tingkat rendah pada intermediate language (IL), copy-and-patch JIT melakukannya dari bytecode ke machine code menggunakan sekumpulan template.
  • copy-and-patch JIT tidak perlu menjalankan arsitektur kompilator JIT yang kompleks di dalam runtime Python, dan cukup memasang tool JIT LLVM pada mesin yang mengompilasi CPython dari source.

Bagaimana JIT ini bekerja?

  • Dengan memperluas API yang baru ditambahkan di Python 3.13, optimizer yang dapat dipasang (pluggable) dapat ditemukan saat runtime.
  • JIT baru ini adalah optimizer opsional untuk arsitektur baru tersebut.
  • Saat mengompilasi CPython dari source, memberikan flag --enable-experimental-jit akan menghasilkan template machine code untuk bytecode Python.

Apakah JIT ini lebih cepat?

  • Benchmark awal menunjukkan peningkatan performa sekitar 2-9%.
  • JIT ini menjadi landasan bagi serangkaian optimasi yang dapat secara signifikan meningkatkan performa Python.

Opini GN⁺

  • Kompilator JIT yang ditambahkan ke Python 3.13 merupakan perubahan penting untuk meningkatkan kecepatan eksekusi Python, terutama dapat meningkatkan efisiensi untuk pekerjaan yang berulang.
  • copy-and-patch JIT menawarkan pendekatan inovatif untuk meningkatkan performa tanpa perlu mengintegrasikan arsitektur JIT yang kompleks ke runtime Python pengguna.
  • Teknologi ini diperkirakan akan memicu diskusi menarik di komunitas Python dan membuka jalan baru bagi optimasi performa Python.

1 komentar

 
GN⁺ 2024-01-10
Komentar Hacker News
  • Peningkatan performa 2-9% antar versi perangkat lunak terasa menarik. Perbaikan kecil seperti ini kadang dianggap mengecewakan, tetapi saya lebih suka jika peningkatan itu terus menumpuk sehingga setiap versi menjadi lebih cepat daripada versi sebelumnya.
  • Menarik melihat teknik 'copy-and-patch' dari Haoran Xu dan Fredrik Kjolstad mendapat perhatian. Saya pertama kali mengetahuinya lewat posting blog proyek remake LuaJIT milik Xu. Rasanya sangat cerdas bagaimana teknik yang sudah ada didaur ulang untuk menciptakan sesuatu yang baru. Posting blog tersebut juga direkomendasikan untuk siapa pun yang ingin belajar tentang implementasi bahasa. Xu juga menjelaskan bahwa alasan pembaruan blognya terlambat adalah karena pengerjaan ulang di balik layar.
  • Brandt mempresentasikan topik ini pada sprint pengembang inti CPython tahun lalu.
  • Terlepas dari upaya di PyPy, Jython, GraalPy, dan IronPython, penambahan JIT ke CPython dianggap sebagai perkembangan penting bagi ekosistem Python. Terutama evolusinya setelah versi 3.13 sangat dinantikan.
  • Saya memakai Python untuk hampir semua hal selain pengembangan web, jadi jika performanya meningkat, itu sangat positif. Ekosistem Python sudah bergerak dari permintaan stateless seperti CGI atau mod_php ke proses yang berjalan lama. Apakah ini berarti harus melakukan restart setiap kali mengubah aplikasi web lokal? Sebagian pengembang memakai cara untuk me-restart aplikasi secara otomatis saat file disimpan.
  • Saya ingat CPython dirancang untuk menjaga codebase tetap sangat sederhana, sementara optimisasi ditangani oleh implementasi lain.
  • Artikel tersebut memperkenalkan JIT 'copy-and-patch' seolah sesuatu yang baru, tetapi saya ingat QuickBASIC di DOS memakai pendekatan serupa. QuickBASIC menambal blok assembly templat di dalam memori dan menghasilkan kode assembly yang sangat buruk.
  • Kemajuan performa Python selama dua tahun terakhir sungguh mengejutkan. Tim inti menjadikan peningkatan performa sebagai tujuan yang serius dan berhasil menghadirkan perbaikan yang terlihat jelas.
  • Saya berharap ada pendanaan yang diinvestasikan ke PyPy. Namun, pada program kecil PyPy tidak terlalu unggul karena waktu startup yang kurang baik. Selain itu, pada program besar bisa muncul masalah kompatibilitas yang rumit. Jika JIT milik CPython lebih andal atau punya waktu startup yang lebih cepat, itu bisa menyelesaikan sebagian masalah tersebut.
  • Pesan PR di repositori GitHub Python yang memparodikan 'Malam sebelum Natal' cukup jenaka.