Pengenalan
- Selamat datang di pelajaran bahasa assembly FFmpeg. Pelajaran ini memberikan dasar tentang bagaimana bahasa assembly ditulis di FFmpeg.
Pengetahuan yang Dibutuhkan
- Diperlukan pengetahuan tentang bahasa C, terutama pointer.
- Diperlukan pengetahuan matematika tingkat sekolah menengah atas (skalar dan vektor, penjumlahan, perkalian, dan sebagainya).
Apa itu bahasa assembly?
- Bahasa assembly adalah bahasa pemrograman untuk menulis kode yang secara langsung berkorespondensi dengan instruksi yang diproses CPU.
- Sebagian besar kode assembly FFmpeg adalah SIMD (Single Instruction Multiple Data), yang juga disebut pemrograman vektor.
- SIMD cocok untuk memproses banyak data yang disimpan secara berurutan di memori, seperti gambar, video, dan audio.
Mengapa menulis dalam bahasa assembly?
- Untuk mempercepat pemrosesan multimedia. Dengan menulis dalam kode assembly, peningkatan kecepatan lebih dari 10 kali bisa diperoleh.
- Di FFmpeg, kode assembly ditulis langsung tanpa menggunakan intrinsic. Intrinsic biasanya 10-15% lebih lambat daripada assembly yang ditulis manual.
Jenis bahasa assembly
- Pelajaran ini berfokus pada bahasa assembly x86 64-bit. Ini juga dikenal sebagai amd64 dan juga berjalan pada CPU Intel.
- Ada dua sintaks assembly x86, yaitu AT&T dan Intel, dan yang akan digunakan adalah sintaks Intel.
Materi pendukung
- Pemrograman assembly FFmpeg berfokus pada pemrosesan gambar berperforma tinggi dan memiliki pendekatan yang unik.
- Diagram dari buku "The Art of 64-bit assembly" bisa membantu.
Register
- Register adalah area di CPU tempat data diproses. CPU tidak memanipulasi memori secara langsung; data dimuat ke register untuk diproses lalu ditulis kembali ke memori.
Register tujuan umum
- Register tujuan umum (GPR) dapat berisi data atau alamat memori. Dalam kode assembly FFmpeg, GPR terutama berperan sebagai pijakan.
Register vektor
- Register vektor (SIMD) berisi beberapa elemen data. Ada berbagai jenis register vektor.
- Sebagian besar perhitungan kompresi dan dekompresi video berbasis bilangan bulat.
Menyertakan x86inc.asm
- x86inc.asm adalah lapisan abstraksi ringan yang digunakan di FFmpeg, x264, dan dav1d untuk memudahkan pekerjaan programmer assembly.
Kode assembly skalar sederhana
- Menjelaskan bagaimana kode assembly skalar bekerja melalui contoh kode.
Memahami fungsi vektor dasar
- Melalui contoh fungsi SIMD pertama, dijelaskan arti setiap baris.
- Operasi vektor dilakukan menggunakan instruksi seperti
movu, paddb.
- Fungsi memodifikasi data argumen dan tidak mengembalikan nilai.
1 komentar
Komentar Hacker News
Ada materi lain untuk topik yang sama, yaitu kasus FFmpeg dan dav1d
Saya pikir menggunakan intrinsic lebih bernilai daripada menulis assembly, tetapi membacanya sangat berguna
Saya rasa panduan ini sangat luar biasa
Saya penasaran apakah ada "kesenangan" dalam belajar atau mengimplementasikan assembly
Sufiks "q" menunjukkan ukuran pointer, dan pada sistem 64-bit nilainya 8
Pujian untuk referensi K&R
Kekurangan penggunaan assembly adalah kodenya bergantung pada arsitektur
Penolakan terhadap inline assembly terasa membingungkan
Materi ini sempurna
Saya penasaran apakah pernyataan bahwa assembly 10 kali lebih cepat daripada C masih benar