DeepMind membuka kod S6, perpustakaan dengan pelaksanaan pengkompil JIT untuk CPython

DeepMind, yang terkenal dengan perkembangannya dalam bidang kecerdasan buatan, telah membuka kod sumber projek S6, yang membangunkan pengkompil JIT untuk bahasa Python. Projek ini menarik kerana ia direka bentuk sebagai pustaka sambungan yang disepadukan dengan CPython standard, memastikan keserasian penuh dengan CPython dan tidak memerlukan pengubahsuaian kod penterjemah. Projek ini telah dibangunkan sejak 2019, tetapi malangnya ia telah dihentikan dan tidak lagi dibangunkan. Memandangkan perkembangan yang dibuat mungkin berguna untuk menambah baik Python, ia telah memutuskan untuk membuka sumber kod. Kod pengkompil JIT ditulis dalam C++ dan berdasarkan CPython 3.7. dan sumber terbuka di bawah lesen Apache 2.0.

Dari segi tugas yang boleh diselesaikannya, S6 untuk Python membandingkan dengan enjin V8 untuk JavaScript. Perpustakaan menggantikan pengendali penterjemah bytecode sedia ada ceval.c dengan pelaksanaannya sendiri yang menggunakan kompilasi JIT untuk mempercepatkan pelaksanaan. S6 menyemak sama ada fungsi semasa telah disusun dan, jika ya, melaksanakan kod yang disusun, dan jika tidak, menjalankan fungsi dalam mod tafsiran bytecode, serupa dengan penterjemah CPython. Semasa tafsiran, bilangan arahan yang dilaksanakan dan panggilan yang dikaitkan dengan fungsi yang sedang diproses dikira. Selepas mencapai pencapaian tertentu, proses kompilasi dimulakan untuk mempercepatkan kod yang kerap dilaksanakan. Penyusunan dijalankan ke dalam perwakilan strongjit perantaraan, yang, selepas pengoptimuman, ditukar kepada arahan mesin sistem sasaran menggunakan perpustakaan asmjit.

Bergantung pada sifat beban kerja, S6 dalam keadaan optimum menunjukkan peningkatan dalam kelajuan pelaksanaan ujian sehingga 9.5 kali berbanding CPython biasa. Apabila menjalankan 100 lelaran suite ujian Richards, kelajuan 7x diperhatikan, dan apabila menjalankan ujian Raytrace, yang melibatkan sejumlah besar pengiraan matematik, kelajuan 3-4.5x diperhatikan.

Antara tugas yang sukar dioptimumkan menggunakan S6 adalah projek yang menggunakan API C, seperti NumPy, serta operasi yang berkaitan dengan keperluan untuk menyemak jenis sejumlah besar nilai. Prestasi rendah juga diperhatikan untuk panggilan tunggal fungsi intensif sumber kerana penggunaan pelaksanaan S6 sendiri yang tidak dioptimumkan bagi penterjemah Python (pembangunan belum mencapai tahap mengoptimumkan mod tafsiran). Sebagai contoh, dalam ujian Unpack Sequence, yang membongkar set besar tatasusunan/tuple, dengan satu panggilan terdapat kelembapan sehingga 5 kali dan dengan panggilan kitaran prestasi adalah 0.97 daripada CPython.

Sumber: opennet.ru

Tambah komen