- Driver Linux kini tersedia untuk menjalankan aplikasi OpenGL ES 3.1 sesuai standar pada GPU keluarga M1·M2
- Driver gratis dan open-source berbasis reverse engineering dari Asahi Linux adalah satu-satunya implementasi OpenGL ES 3.1 yang lulus uji kesesuaian Khronos pada perangkat keras grafis M1·M2
- Sertifikasi dilakukan melalui kelulusan uji resmi, pengajuan ke Khronos, dan masa peninjauan 30 hari, dengan entri terdaftar untuk M1, M1 Pro/Max/Ultra, M2, dan M2 Pro/Max
- OpenGL ES 3.1 memperbarui dukungan eksperimental OpenGL ES 3.0·OpenGL 3.1 yang dirilis pada bulan Juni, serta menambahkan compute shader dan operasi atomik gambar
- M1 tidak memiliki instruksi khusus untuk operasi atomik gambar, sehingga diakali lewat perhitungan alamat; kemudian ditemukan instruksi bit interleave yang memangkas 10 instruksi menjadi 1
Sertifikasi kesesuaian OpenGL ES 3.1 untuk M1·M2
- Driver dengan sertifikasi kesesuaian OpenGL ES 3.1 untuk GPU keluarga M1·M2 kini tersedia
- Kompatibel dengan aplikasi OpenGL ES 3.1
- Dapat digunakan dengan instalasi Linux
- Pengguna Asahi Linux yang sudah ada dapat memperoleh driver terbaru lewat perintah upgrade sesuai distribusi
- Fedora:
dnf upgrade - Arch:
pacman -Syu
- Fedora:
- Driver grafis gratis dan open-source berbasis reverse engineering tersedia di asahi/mesa
- Driver ini adalah satu-satunya implementasi bersertifikasi kesesuaian OpenGL ES 3.1 di dunia untuk perangkat keras grafis keluarga M1·M2
- Telah lulus puluhan ribu pengujian untuk membuktikan akurasinya
- Diakui oleh lembaga standar industri
Prosedur Khronos dan keluarga chip yang terdaftar
- Untuk memperoleh sertifikasi kesesuaian, implementasi harus lulus conformance test suite resmi
- Test suite dirancang untuk memverifikasi semua fitur dalam spesifikasi
- Hasil pengujian diajukan ke badan standardisasi Khronos
- Jika tidak ada masalah selama masa peninjauan 30 hari, implementasi menjadi bersertifikasi kesesuaian
- Di situs web Khronos, driver berikut terdaftar sebagai implementasi bersertifikasi kesesuaian
- Pencapaian ini tidak berhenti pada OpenGL ES saja
- Ini merupakan implementasi bersertifikasi kesesuaian pertama di seluruh standar grafis untuk M1
Kesenjangan antara driver vendor dan API standar
- Driver M1 dari vendor belum memperoleh sertifikasi kesesuaian untuk API grafis standar apa pun, termasuk Vulkan, OpenGL, maupun OpenGL ES
- Pada lingkungan M1·M2 yang tidak menggunakan Linux, tidak ada jaminan bahwa aplikasi berbasis standar akan berjalan
- Dalam kasus Vulkan, MoltenVK melapiskan sebagian Vulkan di atas driver proprietari
- Driver proprietari tersebut tidak memiliki sejumlah fitur inti
- Aplikasi Vulkan yang valid bisa rusak
- Ini menjadi hambatan bagi pengembang dan pengguna yang belum memindahkan komputer M1·M2 ke Linux
- Pengembangan driver Asahi Linux bertujuan agar perangkat lunak standar dapat berjalan tanpa hack khusus M1 atau porting khusus
- Tidak puas dengan driver proprietari, API proprietari, dan penolakan terhadap implementasi standar
- Memandang implementasi standar terbuka yang sesuai spesifikasi sebagai arah yang sehat bagi ekosistem
Fitur tambahan utama di OpenGL ES 3.1
- OpenGL ES 3.1 memperbarui dukungan eksperimental OpenGL ES 3.0 dan OpenGL 3.1 yang dirilis pada bulan Juni
- Fitur tambahan utamanya adalah compute shader
- Terutama digunakan untuk mempercepat komputasi umum di dalam aplikasi grafis
- Gim 3D dapat menjalankan simulasi fisika di compute shader
- Jika hasil simulasi langsung dipakai untuk rendering, jeda akibat sinkronisasi antara GPU dan simulasi fisika CPU dapat dikurangi
- Hasilnya, gim dapat berjalan lebih cepat
Mengapa operasi atomik gambar diperlukan
- Versi OpenGL ES sebelumnya memungkinkan aplikasi membaca gambar untuk ditampilkan di layar
- ES 3.1 memungkinkan aplikasi melakukan penulisan ke gambar biasanya dari compute shader
- Ini mengurangi batasan untuk menyesuaikan algoritme pemrosesan gambar dengan pipeline 3D fixed-function
- GPU adalah arsitektur paralel masif yang menjalankan ribuan thread sekaligus
- Jika dua thread menulis ke lokasi yang sama, hasilnya bisa berbeda tergantung urutan eksekusi
- Situasi ini disebut race condition
- Akses memori atomik adalah solusi dasar untuk menangani race condition
- Perangkat keras khusus dalam subsistem memori menjamin hasil yang konsisten untuk operasi terpilih tanpa bergantung pada urutan thread
- Perangkat keras grafis modern mendukung berbagai operasi atomik seperti penjumlahan
- Ekstensi OpenGL ES OES_shader_image_atomic menambahkan operasi atomik pada piksel gambar
- Ekstensi ini wajib di ES 3.2
- Misalnya, compute shader dapat menaikkan nilai piksel
(10, 20)secara atomik
Cara implementasi operasi atomik gambar di M1
- GPU lain menyediakan instruksi khusus untuk operasi atomik gambar sehingga implementasi driver menjadi sederhana
- M1 tidak memiliki instruksi perangkat keras khusus untuk operasi atomik gambar
- Ada operasi atomik non-gambar
- Ada juga fitur gambar non-atomik
- Karena itu, alih-alih melakukan operasi atomik langsung pada piksel, alamat memori piksel dihitung lebih dulu lalu operasi atomik umum dilakukan pada alamat tersebut
- Jika gambar disusun secara linear di memori, perhitungan alamatnya sederhana
- Koordinat Y dikalikan dengan stride, yaitu jumlah byte per baris
- Koordinat X dikalikan dengan jumlah byte per piksel
- Kedua nilai dijumlahkan untuk mendapatkan offset byte dari piksel pertama
- Offset ditambahkan ke alamat piksel pertama untuk memperoleh alamat akhir
- Namun dalam praktiknya, gambar biasanya tidak disusun secara linear
- Perangkat keras grafis modern melakukan interleave koordinat X·Y untuk meningkatkan efisiensi cache
- Susunan piksel di memori tidak mengikuti baris, melainkan kurva yang mendekati spiral
Optimalisasi bit interleave dan pencarian instruksi tersembunyi
- Menginterleave koordinat X·Y dengan masking dan shifting satu bit demi satu bit tidak efisien
- Algoritme manipulasi bit yang terkenal mencampur kelompok bit untuk memparalelkan masalah
- Mengimplementasikan algoritme ini dalam kode shader meningkatkan performa
- Dalam praktiknya, hanya 7 bit terbawah atau kurang dari tiap koordinat yang di-interleave
- Koordinat X·Y dapat dimasukkan ke 16 bit bawah dan atas dari register 32 bit agar diproses sekaligus dengan instruksi 32 bit
- Jumlah instruksi dapat dikurangi setengahnya
- Instruksi gabungan shift-and-add milik GPU juga dimanfaatkan
- Dengan menggabungkan teknik-teknik ini, interleave dapat dilakukan dengan 10 instruksi assembly GPU M1
- Setelah itu, kemungkinan adanya instruksi bit interleave khusus pun diteliti
- PowerVR memiliki instruksi shuffle
shfl - Karena GPU M1 mengambil beberapa elemen dari PowerVR, kemungkinan adanya instruksi serupa ikut diperiksa
- Compiler proprietari tidak memakai instruksi tersebut saat mengompilasi shader uji, sehingga reverse engineering sulit dilakukan hanya dari pengamatan hasil kompilasi
- PowerVR memiliki instruksi shuffle
Memastikan instruksi interleave lewat dugaan dan verifikasi
- Dougall Johnson menebak kandidat berdasarkan encoding instruksi yang sudah diketahui
- Instruksi pembalikan bit memiliki field 2 bit untuk menentukan operasi dengan nilai
01- Instruksi menghitung jumlah bit yang diset memakai
10 - Instruksi mencari bit set pertama memakai
11 - Instruksi manipulasi bit kompleks yang diketahui memakai tiga nilai tersebut
- Instruksi menghitung jumlah bit yang diset memakai
- Nilai tersisa
00adalah nilai tak dikenal yang belum teramati- Jika instruksi interleave memang ada, kemungkinannya mirip dengan instruksi pembalikan bit tetapi dengan opcode
00
- Jika instruksi interleave memang ada, kemungkinannya mirip dengan instruksi pembalikan bit tetapi dengan opcode
- Tiga instruksi yang diketahui hanya memiliki satu sumber input, tetapi instruksi interleave membutuhkan dua sumber
- Instruksi GPU M1 biasanya mengenkode posisi sumber secara konsisten
- Pada instruksi aritmetika dua-sumber ada ruang kosong di tempat sumber kedua biasanya berada, dan itu diduga sebagai sumber kedua
- Verifikasi dilakukan dengan memodifikasi compiler agar operasi integer dua-sumber seperti perkalian diganti dengan encoding interleave yang diperkirakan
- Operasi itu dipakai dalam compute shader
- Shader uji memeriksa apakah instruksi tak dikenal mengembalikan hasil interleave untuk setiap kemungkinan input
- Karena instruksi menerima dua sumber 16 bit, ada sekitar 4 miliar input
- Berkat dukungan compute baru di driver, GPU M1 dapat memeriksa seluruh input dalam waktu kurang dari 1 detik
- Pada akhirnya, assembly tervectorisasi 10 instruksi digantikan dengan 1 instruksi interleave
- Pendekatan ini cepat dan juga lulus uji kesesuaian
1 komentar
Komentar Hacker News
Karena Apple bekerja sama dengan nVidia, Adobe, Autodesk, Microsoft, dan lainnya untuk format adegan OpenUSD untuk rendering/animasi/CAD/3D, saya penasaran apakah dukungan OpenGL·Vulkan akan membaik
Jika inti OpenUSD adalah “satu format file yang dirender secara konsisten di mana saja”, ada kemungkinan Apple akan menggunakannya sebagai cara untuk menarik lebih banyak perusahaan perangkat lunak 3D ke macOS
Ke depannya tampaknya ada dua jalan: Apple mengikuti standar OpenGL/Vulkan yang sudah ada dan kuat dalam pipeline produksi film·game, atau sebaliknya mendorong Metal lebih keras untuk membawa dunia ke Metal + macOS
Hati saya berharap yang pertama, tetapi firasat saya mengatakan Apple akan mengejar yang kedua dengan sekuat tenaga, dan bukan hanya Apple—nVidia, Autodesk, Adobe, dan Microsoft juga cenderung tidak menyukai standar yang tidak mereka kendalikan
iMac dan OS X awal sangat menonjolkan standar seperti USB, JPEG, MPEG, mp3, PostScript, TCP/IP bawaan, dan .rtf, dan Jobs juga menekankan hal itu
Setelah pulih dari ambang kehancuran, mereka kembali mulai melakukan “penambahan nilai”, dan iPhone pada awalnya juga ditekankan sebagai perangkat HTML, alih-alih Flash yang proprietari dan buruk atau “HTML mobile” yang belum matang
Bahkan sekarang, di area yang kekuatan pasarnya lemah, mereka mendukung standar yang tidak mereka kendalikan seperti H.264, Matter/Thread
Karena mereka menggabungkan perangkat keras dan perangkat lunak secara erat untuk menciptakan pengalaman pengguna yang mereka inginkan, dapat dipahami bahwa mereka ingin menerapkan standar yang sampai batas tertentu bisa mereka kendalikan agar pengalaman itu tidak ditentukan pihak lain
Bahkan untuk standar industri yang arahnya belum benar-benar mapan seperti USB-C, jika bergerak lebih dulu Apple dapat memengaruhi arahnya, jadi ada kalanya Apple mengadopsinya
Sebagian besar seperti Adobe, Autodesk, Blender, dan lainnya sudah mendukung backend berbeda untuk tiap sistem operasi, dan di macOS itu juga mencakup Metal
OpenGL sudah terlalu tua, memakai driver yang bagus pun hampir seperti mimpi buruk, dan bahkan menulis kode aplikasi berperforma tinggi juga sulit, jadi saya tidak terlalu menyayangkannya
Meski begitu, saya berharap mereka mendorong Vulkan daripada membuat Metal, tetapi di luar Linux, Vulkan umumnya hampir seperti warga kelas dua; walau begitu, sebagai target, ia masih warga kelas dua yang cukup layak
Dari sudut pandang dukungan game atau Steam, banyak game menyerahkan penanganan API kepada engine, dan jika sebuah tim punya kapasitas menangani API secara langsung, kemungkinan MoltenVK pun sudah cukup selama mereka tidak memakai fitur yang sangat mutakhir
Sepanjang hidup saya banyak memakai OpenGL demi lintas platform, tetapi karena global state, fungsi-fungsi yang seharusnya tidak digunakan, jebakan, header ekstensi raksasa, dan debugging yang sulit, itu benar-benar API yang buruk; Vulkan memang bertele-tele, tetapi dalam banyak hal justru lebih mudah
Namun Mac yang saya pakai sekarang terhubung ke berbagai periferal dan monitor besar hanya dengan port USB-C memakai protokol standar
Secara umum Apple tampaknya lebih menyukai standar terbuka jika standarnya sudah cukup memadai; dulu ketika USB2 belum bisa melakukan banyak hal yang dilakukan Lightning, mereka membuat Lightning, tetapi ketika USB-C muncul, mereka langsung menerimanya di Mac dan iPad, sementara di iPhone sayangnya masih menunda-nunda
Asahi dan Alyssa adalah raksasa reverse engineering, dan pekerjaan mereka nyaris sulit dipercaya
Saya kira besar kemungkinan Apple pernah mencoba merekrut mereka, atau sudah mencoba tetapi ditolak
Bisa dibilang Valve punya alasan bisnis yang lebih besar daripada Apple untuk memanfaatkan kemampuan ini
Biasanya karyawan dibayar rendah dibandingkan keuntungan yang mereka hasilkan, terutama di TI
Orang berbakat lebih baik mendirikan badan usaha dan menjual layanan dengan harga yang pantas, tetapi di beberapa negara, perusahaan-perusahaan besar melobi pemerintah untuk menutup jalan seperti ini
Trik operasi atomik itu sangat memuaskan, dan menyimpulkan instruksi swizzle dari silsilah PowerVR juga sangat mengesankan
Saya rasa para engineer Apple pun akan belajar dari sini, atau setidaknya sangat menghargai kecerdasannya
Ini mengingatkan saya pada masa lalu ketika Accolade melakukan reverse engineering perangkat keras video Sega Genesis; para engineer menjadikan dokumentasi Texas Instruments TMS9918 VDP yang tersedia publik sebagai titik awal untuk menyimpulkan VDP turunan 9918 pada Genesis (Mega Drive)
Untuk memperjelas, ini bukan sekadar driver Linux pertama yang mendapat sertifikasi kesesuaian; maknanya lebih besar
Apple sendiri pun tidak sesuai dengan OpenGL ES 3.1, jadi ini secara harfiah adalah driver OpenGL ES 3.1 pertama yang mendapat sertifikasi kesesuaian untuk seri M di sistem operasi mana pun
Karena itulah muncul permintaan untuk berdonasi kepada tim
https://asahilinux.org/support/
Kalau ada opsi seperti itu, saya ingin tahu di mana bisa melakukannya; kalau tidak ada, nanti saya akan memakai tautan itu saja
Jika sekarang mencoba men-debug aplikasi OpenGL macOS yang sudah tidak lagi direkomendasikan, masalah ini jadi sangat jelas
Karena lapisan abstraksinya tidak mengekspos status OpenGL sebenarnya dengan cara yang bisa dibaca oleh debugger OpenGL lama milik Apple
Jika tidak punya Mac lama dengan macOS lawas yang OpenGL-nya belum berjalan di atas Metal secara internal, pada dasarnya OpenGL di macOS tidak bisa di-debug dengan debugger bawaan
Debugger atau aplikasinya langsung crash
Ini tampaknya terutama membantu game, dan tidak banyak membantu deep learning
Daya tarik terbesar Mac M1 adalah kapasitas memori yang besar, dan meski mungkin kurang cocok untuk pelatihan karena tidak bisa didistribusikan ke beberapa kartu, ia bagus sebagai mesin inferensi model besar seperti Stable Diffusion dan LLaMA
SYCL adalah kerangka pemrograman tingkat tinggi yang netral vendor dari Khronos Group, tetapi dukungan aplikasinya terbatas, dan diharapkan makin membaik berkat dukungan Intel
Vulkan Compute mengakali masalah lewat compute shader, tetapi saya tidak terlalu tahu kondisi dukungan aplikasinya
SYCL dapat diimplementasikan di atas OpenCL dan ekstensi SPIR-V OpenCL, tetapi karena ketergantungan vendor yang kuat, jalur ini sebagian besar ditinggalkan kecuali oleh Intel dan Mesa; saat ini SYCL sering diimplementasikan sebagai backend untuk API masing-masing vendor GPU seperti ROCm, HIP, dan CUDA
Menerapkan pendekatan yang sama ke Metal akan sangat sulit, dan Mesa memiliki dukungan eksperimental OpenCL+SPIR-V untuk Intel dan AMDGPU sehingga secara teori bisa diperluas ke Apple Silicon, tetapi OpenCL di Apple Silicon saat ini sama sekali tidak didukung dan baru sebatas ada di roadmap
Untuk menjalankan deep learning, diperlukan backend seperti CUDA, ROCm, MPS
Melatih model PyTorch di server CUDA besar lalu menjalankan inferensi di MacBook Air relatif mudah
Namun eiln telah menulis driver Apple Neural Engine, sehingga perangkat keras khusus dapat digunakan alih-alih GPU, dan nantinya akan digabungkan ke linux-asahi
Ungkapan bahwa Asahi Lina dan dua orang mengalahkan perusahaan besar dengan dana minimal memang keren, tetapi pada kenyataannya ini lebih dekat ke Apple yang tidak peduli daripada benar-benar kalah
Apple sejak awal tidak ikut dalam perlombaan itu
Saya suka eufemisme “dua orang mengalahkan perusahaan besar dengan dana minimal”
Ini jelas memalukan bagi Apple, dan Apple tidak peduli pada standar atau kepatuhan; mereka ingin orang-orang terkurung di taman tertutup mereka sendiri
Kalau saya bukan pengembang iOS, saya sudah lama meninggalkan ekosistem Apple
Saya suka perangkat kerasnya, dan juga menyukai brand yang dulu mengedepankan kreativitas dan berpusat pada manusia seperti Apple era 80–90-an, tetapi perusahaan saat ini tampak membusuk oleh keserakahan di balik video pemasaran yang politically correct
Saat upgrade terakhir, saya mencari alternatif, tetapi untuk keluar dari Apple harus menerima kompromi tanpa akhir
Untuk pengganti iPhone, saya melihat Pixel dengan harapan Android murni dan dukungan panjang, tetapi cerita soal masalah baterai tidak ada habisnya, dan kematangan software, ekosistem aplikasi, serta stabilitas juga menjadi kendala
Sulit juga menemukan produk dengan value for money yang mendekati kualitas rakitan, baterai, dan stabilitas MacBook Air M1 model dasar
Saya juga membaca komik dan majalah di iPad, tetapi di pasar tablet saya sudah bertahun-tahun tidak tahu alternatifnya apa; Apple Watch mungkin bisa ditinggalkan, tetapi perangkat itu memang bekerja dengan baik dan aksesori pihak ketiganya melimpah
Masa ketika memasang ROM baru setiap hari sudah berlalu, dan sayangnya dalam hal stabilitas serta kemudahan penggunaan, tampaknya sulit mengalahkan Apple
Satu-satunya alasan pekerjaan semua orang aman adalah karena tidak ada yang bisa mengetahui secara tepat siapa dua orang itu
Apple membuat silicon sendiri dan membangun seluruh platformnya, jadi sulit menganggap bahwa membiarkan sistem operasi lain berjalan adalah sekadar kesalahan
Jelas mereka secara sadar membiarkan pintu terbuka untuk pengembangan pihak ketiga, jadi mengecewakan melihat suasana yang menyalahkan Apple
Misalnya, untuk mendukung implementasi Vulkan yang berkelanjutan dibutuhkan sumber daya besar dan beban pada jadwal rilis, jadi perlu alasan bisnis
“Agar tidak memalukan” kemungkinan besar tidak cukup
Argumen niat baik komunitas mungkin bisa dipakai, tetapi saya rasa Apple tidak akan mengejar simpati dari orang-orang yang menyebut mereka “perusahaan yang membusuk oleh keserakahan di balik video pemasaran yang politically correct”
Uji kesesuaiannya bukan open source, dan “conformance suite” terpisah yang ada di GitHub berbasis dEQP milik Google, bukan kumpulan pengujian internal Khronos
Implementasi tetap bisa mendapat “sertifikasi kompatibel standar” meski memiliki bug dan celah yang cukup besar
Apple hanya menjanjikan dukungan OpenGL 3.1, dan driver OpenGL untuk M1 juga ditulis ulang sebagai lapisan emulasi di atas Metal agar aplikasi lama tetap berjalan, tetapi mereka tidak akan mengimplementasikan versi OpenGL yang lebih baru, dan memang tidak perlu
Ada banyak kritik terhadap Apple dan masih banyak ruang untuk membuat API serta alat Metal menjadi lebih baik, tetapi tidak memedulikan OpenGL adalah keputusan yang cukup masuk akal dalam konteks ini
Menarik bahwa di teks asli kata ‘Apple’ tidak muncul sekali pun, hanya memakai istilah ‘produsen’ dan ‘perusahaan besar’
Kalau disengaja, saya penasaran apakah alasannya legal
Fokusnya bukan Apple, melainkan menjalankan Linux dengan benar di arsitektur M1/M2, dan kalau targetnya Microsoft, Amazon, atau Google pun mungkin akan diperlakukan dengan cara yang sama
Menonton siaran langsung yang menunjukkan proses pengembangan driver ini menyenangkan, dan ini benar-benar pekerjaan yang luar biasa
Ini salah satu pekerjaan pemrograman tingkat rendah paling menakjubkan yang pernah saya lihat