ELEKTRO INDONESIA Edisi ke Sepuluh, November 1997
Pesatnya perkembangan aplikasi multimedia memaksa Intel menambahkan57 buah instruksi khusus untuk mempercepat kalkulasi matematis yang lazim dilakukan pada pemrosesan sinyal audio, grafik 2D dan 3D, video, sintesis dan pengenalan suara serta komunikasi data. Instruksi-instruksi yang kemudian dikenal sebagai MMX itu, dengan menggunakan algoritma-algoritma terpilih, mampu memperbaiki unjuk kerja antara 50%-100% pada pelaksanaan pemrosesan sinyal-sinyal multimedia tersebut.
Implementasi pertama instruksi MMX ini adalah pada prosesor generasi Pentium yang dikenal dengan kode nama P55C. Tahap berikutnya, instruksi MMX juga diimplementasikan pada prosesor generasi Pentium Pro, yang kemudian disebut sebagai Pentium II. Di masa yang akan datang, tampaknya Intel akan mengimplementasi-kan MMX pada semua prosesor buatannya dan dengan demikian berakhirlah era prosesor non-MMX.
MMX dirancang untuk tidak berpengaruh maupun mempengaruhi sistem operasi sehingga kompatibel dengan sistem operasi yang selama ini digunakan komputer berbasis prosesor x86. Program aplikasi dapat memanfaatkan kecanggihan instruksi MMX dengan dua cara: pertama, memanggil driver yang mengaktifkan instruksi MMX (MMX-enabled driver) misalnya graphic driver,atau menambahkan instruksi MMX pada rutin-rutin yang mengolah sinyal multimedia.
Dalam upaya untuk mengimplementasikan instruksi MMX, Intel menghindari diperlukannya mode operasi khusus yang akan mempersulit pemrograman atau menambahkan bagian yang dapat mengubah total arsitektur x86. Hasilnya,instruksi MMX dapat dieksekusi pada sembarang mode operasi prosesor.
Dari sisi pemrogram, pada prosesor MMX terdapat 8 buah register MMX baru (MM0-MM7) beserta instruksi-instruksi yang beroperasi dengan register tersebut. Register-register ini dipetakan ke register floating-pointyang telah ada sebelumnya (FP0-FP7). Ketika sistem operasi atau aplikasimultitasking mengeksekusi instruksi FSAVE, isi register MM0-MM7 disimpan ke dalam FP0-FP7 jika instruksi MMX sedang digunakan.
Salah satu kelemahan serius adalah bahwa program tidak dapat menggunakan instruksi MMX dan instruksi floating-point pada satu rutin yang sama karena kedua jenis instruksi menggunakan kelompok register yang sama. Penggunaan instruksi MMX dan floating-point dalam satu rutin memang jarang dilakukan karena kebanyakan program tidak memanfaatkan instruksifloating-point sama sekali. Program yang memanfaatkan instruksi floating-point menggunakannya untuk menghasilkan data sedangkan MMX pada umumnya digunakan dalam rutin yang lain untuk menampilkan data.
Tanpa melakukan pemilihan mode operasi, tidak ada cara yang jelas untuk mencegah agar instruksi floating-point tidak merusak data instruksi MMX, atau sebaliknya. Untuk mecegah hal itu terjadi, Intel membuat semacamjebakan. Bila data diisikan dari memorike dalam register MM, prosesor akan menandai semua register FP (floating-point)sebagai sibuk sehingga instruksi FPberikutnya akan 'terjebak'. Pada akhir rutin MMX, pemrogram harus menyisipkan instruksi EMMS untuk memulihkan register agar dapat digunakan oleh instruksiFP.
Tabel 1. Tambahan instruksi multimedia Intel MMX meliputi 57 opcodebaru. Dalam kurung menunjukkan pilihan yang hanya dapat dipilih salah satu(B=byte, W=word, D=double word, Q=quad word)
Kelompok | Mnemonic | Opcode*) | Deskripsi |
Transfer Data, Pack, Unpack | MDV[D,Q] PACKUSWB PACKSS[WB,DW] PUNPCKH [BW,WD,DQ] P UNPCKL [BW,WD,DQ] | 6E/7E ; 6F/7F 67 63, 6B 53, 59, 5A 60, 61, 62 | Move [double,quad] to/from MM register Pack words into bytes with unsigned saturation Pack [words into byte, double into words] with unsigned saturation Unpack (interleave) high-order [bytes, words, doubles] from MMX register Unpack (interleave) low-order [bytes, words, doubles] from MMX register |
Arithmetic | PADD[B,W,D] PADDS[B,W] PADDUS[B,W] PSUB[B,W,D] PSUBS[B,W] PSUBUS[B,W]PMULHW PMULLW PMADDW | FC, FD, FE EC, ED DC, DD F8, F9, FA E8, E9 D8. D9 E5 D5 F5 | Packed add on [byte, word, double] Satu rating add on [byte, word] Unsigned saturating add on [byte,word] Packed subtraction on [byte,word,double] Saturating subtraction on [byte,word] Unsigned saturating subtraction on [byte,word] Multiply packed words to get high bit of product Multiply packed words to get low bit of product Multiply packed words add parts of products |
Shift | PSLL[W,D,Q] PSRL[W,D,Q] PSRA[W,D] | F1/71, F2/72, F3/73**) D1/71, D2/72, D3/73**) E1/71, E2/72**) | Packed shift left logical [word, double, quad] Packed shift right logical [word, double, quad] Packed shift right arithmetic [word, double] |
Logical | PAND PANDN POR PXOR | DB DF EB EF | Bitwise logical AND Bitwise logical AND NOT Bitwise logical OR Bitwise logical XOR |
Compare | PCMPEQ[B,W,D] PCMPGT[B,W,D] | 74, 75, 76 64, 65, 66 | Packed compare if equal [byte,word, double] Packed compare if greater than [byte, word, double] |
Misc. | EMSS | 77 | Empty MMX state |
Keterangan:
8) Semua opcode diawali dengan OF, diikuti oleh byte tambahan yang ditunjukkan pada tabel ini. **) Opcode dengan 71, 72, dan 73 sebagaibyte kedua diakhiri dengan byte ketiga: Dr (PSRL), Er (PSRA), atau Fr (PSLL),di mana 'r' adalah operand pertama
Instruksi MMX yang ditambahkan pada prosesor x86 menggunakan teknik eksekusi SIMD. Meskipun menggunakan register MMX 64-bit, instruksi-instruksiini dapat beroperasi dengan 8-byte, 4-word, atau dua double-word sekaligus. Sehubungan dengan instruksi MMX ini ditambahkan 3 tipe data baru pada prosesor x86, yakni: packed byte, packed word, dan packed double-word(pada prosesor Intel, satu word adalah 16-bit dan satu double-wordadalah 32-bit). Tipe-tipe data ini sudah cukup memadai untuk operasi-operasi multimedia karena kebanyakan algoritmanya bekerja dengan ukuran data yang kecil. Data audio, misalnya, pada umumnya disimpan dalam sampel berukuran8-, 12-, atau 16-bit; sampel lebih presisi dari ini tidak ada bedanya bagi telinga kebanyakan orang. Video direpresentasikan dalam pixel, yang umumnya dikodekan sebagai triplet RGB (red, green, blue). Masing-masing unsur dari ketiga warna tersebut dapat disimpan dalam 4, 6, atau 8-bit. Penyimpanan dalam 8-bit dapat memberikan 16 juta kemungkinan warna, terlalu banyak untuk dapat dibedakan dengan baik oleh manusia normal.
============================| Register MMX (64-bit) || Packed Double-Word || Packed Word || Packed Byte |============================
Gambar 1. Instruksi MMX memerlukan 3 tipe data baru: packed byte, packedword, dan packed double-word
Sebagian besar mnemonic instruksi MMX ini dimulai dengan 'P'(packed), misalnya PADD berarti packed add. Semua opcodediawali dengan 0F, seperti instruksi-instruksi yang ada pada Pentium untuklong jump, dan set byte. Byte kedua pada instruksi MMX menggunakan kode yang semula merupakan reserved value (dicadangkan untuk generasi prosesor berikutnya). Dua (atau lebih) byte berikutnya merupakandua operan (operand) yang sistem pengkodeannya sama dengan instruksi-instruksi proseosr x86 lainnya, kecuali bahwa targetnya adalah register MMX bukan register integer (misalnya EAX).
Instruksi semisal MOVD dan MOVQ digunakan untuk memindahkan data daridan ke memori dengan mode pengalamatan yang sama seperti instruksi MOV biasa. Instruksi-instruksi tersebut juga dapat memindahkan data dari saturegister MM ke register MM yang lain. instruksi MOVD bahkan dapat bertukar data dengan register integer. Demikian juga, PADD melakukan operasi dariregister ke register atau dari memori ke register seperti instruksi ADD,kecuali bahwa instruksi PADD tidak memiliki mode untuk operasi dari registerke memori.
Pada umumnya, byte atau word data tersimpan pada lokasi berurut dalam memori sehingga dapat dioperasikan oleh instruksi-instruksi MMX. Meskipun demikian, jika data disimpan sebagai nilai 32-bit, data tersebutmungkin perlu disusun ulang dalam format paket. Instruksi PACKxxDW membaca dua data double-word dari memori dan menggabungkannya dengan dua data double-word dari register sehingga menghasilkan empat paketdata 16-bit (word).
Jika data semula melampaui nilai maksimum 16-bit, data tersebut dikatakan jenuh (saturated); data yang terlalu kecil digolongkan ke dalamnilai terkecil yang masih mungkin, sedangkan data yang terlalu besar digolongkan ke dalam nilai terbesar yang masih mungkin. Ada dua pilihan untuk melakukan perhitungan atas data jenuh, yakni terhadap data bertanda (signed)atau data tak bertanda (unsigned), bergantung pada ekspresi data tersebut dari sumbernya. Demikian juga, instruksi PACKxxWB digunakan untuk mengubah paket data word ke paket data byte.
Bila data telah terpaket, kalkulasi dijalankan secara paralel. Setiap kalkulasi MMX menggabungkan dua operand 64-bit dan menghasilkan 64-bit,sehingga instruksi byte-terpaket menghitung 8 hasil operasi secara paralel.Instruksi word-terpaket menghasilkan 4 hasil operasi sedangkan instruksi yang beroperasi pada double-word terpaket menghasilkan dua hasil operasi. Karena kebanyakan instruksi prosesor x86 hanya menghasilkan satu hasil operasi pada setiap saat, maka kemampuan kalkulasi paralel merupakan kuncidari perbaikan unjuk kerja prosesor MMX.
Unjuk kerja meningkat lebih tinggi pada Pentium P55C karena rancangannya yang lebih baik. Pada Pentium sebelumnya, meskipun menggunakan arsitektur superskalar dua-jalan, pada eksekusi floating-point hanya dapat menjalankan satu instruksi setiap saat dan tidak bisa digabungkan dengan instruksi integer. Pada rancangan Pentium P55C, dimungkinkan memasangkan instruksiMMX dan instruksi integer atau bahkan memasangkan instruksi MMX denganinstruksi MMX lainnya asalkan berbeda unit fungsinya. Jadi P55C dapat melakukan kalkulasi sampai menghasilkan 16 bilangan (masing-masing 1 byte)setiap siklus.
Sebagai contoh, misalnya gambar 2 berikut ini:
MM0 A B C D + + + + MM1 E F G H --------------------MM0 A+E B+F C+G D+H
Gambar 2. Instruksi Penjumlahan Paralel (Parallel Add) melakukan penjumlahan 4 data 16-bit secara simultan.
Instruksi PADDW (packed add word) melakukan penjumlahan paralel atas masing-masing word pada operand sumber (pada gambar3 adalah MM0) dengan word pada operand tujuan (pada gambar 3 adalah MM1)dan menyimpan hasilnya pada tempat yang ditentukan (pada gambar 3 adalahMM0). Lebihan (carry) dari hasil penjumlahan 16-bit itu diabaikan. Bendera status (misalnya: carry, overflow, zero, dan sebagainya)juga tidak terpengaruh oleh operasi MMX.
Baik instruksi penjumlahan maupun pengurangan dapat dilakukan pada databyte-terpaket, word, atau (pada beberapa kasus) double-word. Akhiran B, W, atau D ditambahkan pada mnemonic instruksi untuk menunjukkantipe datanya. Operasi-operasi logika (AND, AND-NOT, dan OR), karena beroperasipada tingkat bit, tidak memerlukan akhiran penunjuk tipe data tersebut. Operasi-operasi logika seperti itu beroperasi dengan cara yang sama dengan instruksi logika pada prosesor-prosesor sebelumnya, kecuali bahwa operasinya berlangsung pada register MMX.
Instruksi penjumlahan dan pengurangan pada prosesor MMX memiliki tiga variasi. Pilihan default-nya adalah operasi aritmetika sederhana atau yang disebut aritmetika tak-jenuh (nonsaturating arithmetic). Dua pilihan lainnya merupakan operasi aritmetika jenuh (saturating arithmetic),di mana overflow yang dihasilkan dibatasi sampai nilai maksimumsaja sedangkan underflow yang dihasilkan dibatasi pada nilai minimumnya. Akhiran S menunjukkan bahwa instruksi tersebut untuk aritmetika jenuh bertanda(signed), yakni bit paling berarti (most significant bit)merupakan bit tanda.
Variasi ketiga adalah aritmetika jenuh tak bertanda (unsigned satu rating arithmetic) yang biasanya dipakai untuk operasi pixel. Pada operasipixel, bila dua intensitas dijumlahkan, misalnya, hasilnya tidak pernahlebih putih dari warna putih atau tidak bisa lebih hitam dari warna hitam. Operasi aritmetika jenuh secara otomatis melakukan operasi seperti itudan ini menghindarkan perlunya pemeriksaan overflow atau underflowseperti pada instruksi aritmetika konvensional.
Operasi aritmetika tak jenuh dapat dilakukan pada data byte, word, ataupun double-word, sedangkan operasi aritmetika jenuh tidak dapat beroperasi pada data 32-bit. Pemrogram harus berhati-hati menggunakan operasi aritmetika tak jenuh untuk nilai-nilai yang dapat menyebabka terjadinya overflowkarena ooerasi ini tidak memiliki jebakan (trap) untuk kondisi overflow. Instruksi penjumlahan dan pengurangan tak jenuh yang umumnya digunakan adalah versi 32-bit sebagai kompensasi dari tidak adanya instruksi aritmetika jenuh 32-bit.
Perkalian sederhana dilakukan oleh prosesor MMX dengan instruksi PMULHW dan PMULLW. Instruksi ini beroperasi hanya pada data 16-bit. Karena hasil perkalian bisa jadi dua kali dari lebar data operand-nya, PMULHW hanya menyimpan word orde-tinggi hasil operasinya dalam register tujuan. Dalam banyak dituasi, hasil operasi 16 bit ini memberikan ketelitian yang cukup.
Untuk operasi yang memerlukan ketelitian 32-bit, separuh dari hasil operasi diberikan oleh PMULLW. Hasil dari dua instruksi tersebut kemudian digabungkan dengan menggunakan instruksi PUNPCKWD. Instruksi-instruksi tersebut memungkinkan dilakukannya 4 perkalian dalam 6 siklus pada prosesor P55C dibandingkan dengan 10 siklus pada prosesor Pentium non-MMX.
Salah satu instruksi khusus lain yang dapat dilakukan pada prosesor MMX adalah instruksi packed multiply-add. Pada instruksi ini, tipedata hasil operasi berbeda dengan tipe data sumbernya.
MM0 A B C D x x x x MM1 E F G H ----------------------------MM1 (AxE)+(BxF) (CxG)+(DxH)
Gambar 3. Instruksi packed multiply-add (PMADDWD MM0,MM1) menjumlahkan dua pasang perkalian dengan satu instruksi.
Gambar 3 di atas menggambarkan pelaksanaan instruksi PMADDWD yang mengalikan dua pasang data 16-bit kemudian menjumlahkan tiap pasang dan menghasilkan dua data 32-bit. Instruksi itu dieksekusi hanya dalam tiga siklus (pada prosesor P55C) dan di-pipeline secara penuh.
Instruksi multiply-add sangat penting dalam algoritma pengolahan sinyal audio dan video, misalnya FFT atau transformasi Fourier cepat (FastFourier Transform). Prosedur FFT memerlukan pengalian dua vektor dan mengakumulasi jumlah-dari-hasilkali (sum of product). Dengan menggunakan instruksi PMADDWD, prosesor P55C dapat mengalikan dan mengakumulasi masukan empat vektor setiap siklus dan membebaskan alur-pipa instruksi kedua (secondpipe) untuk operasi pengisian (load), penyimpanan (store), kalkulasi indeks,dan percabangan. Tanpa memperhitungkan adanya alur-pipa kedua, unjuk kerja untuk operasi floating-point pada prosesor P55C lebih tinggi 8 kali lipat dibanding Pentium non-MMX (yang tidak memiliki instruksi multiply-add untuk bilangan floating-point).
Salah satu kekurangan Pentium MMX (P55C) adalah tidak adanya instruksi multiply atau multiply-add untuk operand 32-bit. Alasannya, untuk mengimplementasikan sirkit multiplier 32-bit diperlukan luas keping silikon empat kali lipat dibandingkan dengan multiplier 16-bit. Lagipula, karena operasi perkalian data 32-bit dapat dilakukan dengan menggunakan instruksi perkalian integer standar, maka implementasi multiplier 32-bitkurang berguna.
Perkalian integer beroperasi pada register integer, bukanregister MMX, dan tidak dapat melakukan kalkulasi paralel seperti unitMMX.Lebih jauh lagi, tidak ada intruksi multiply-add untuk bilanganinteger pada prosesor x86. Karena ketelitian 16-bit tidak mencukupi untuk kebanyakan algoritma kalkulasi geometris 3D dan audio yang kompleks, maka sesungguhnya tidak adanya instruksi multiply-add 32-bit cukup bermasalah.Rutin-rutin untuk kalkulasi geometris 3D dan sinyal audio kompleks tidak dapat memanfaatkan kelebihan teknologi MMX ini.
Teknologi MMX juga mengimplementasikan intruksi pembandingan paralel yang banyak bermanfaat untuk manipulasi video. Instruksi PCMPEQW misalnya, melakukan dua pembandingan word-terpaket. Pada tiap-tiap field,hasilnya akan ditulis sebagai 0 bila yang dibandingkan tidak sama (kondisifalse) dan akan ditulis sebagai 1 bila yang dibandingkan adalah data yang sama (kondisi true) seperti dijelaskan pada gambar 5.
MM0 20 68 44 37 == == == == MM1 20 31 23 37 ___________________________ MM0 11 00 00 11 true false false true
Gambar 5. Instruksi pembandingan packed compare-if-equal membandingkan word-terpaket dan membangkitkan keluaran Boolean terpaket, di mana semua 0 berarti kondisi false dan semua 1 berarti kondisi true.
Instruksi pembandingan tersebut sangat bermanfaat untuk melakukan penggabungandua citra pada suatu tampilan. Misalnya diinginkan menggabungkan citra seorang pembaca berita dengan latar belakang panorama suatu kota. Citra pembaca berita yang diambil dengan latar belakang layar biru digabungkan dengan citra panorama kota sedemikian rupa sehingga setiap pixel warnabiru pada citra pertama diganti dengan pixel pada citra kedua. Teknik video yang lazim disebut chroma keying ini, cocok dilakukan dengan instruksi pembandingan packed compare-if-equal.
Perancangan program dengan memanfaatkan fasilitas yang diberikan teknologi MMX merupakan pengalaman baru bagi kebanyakan perancang program aplikasi untuk prosesor x86. Karena itulah, Intel, dan beberapa pihak ketiga menyediakan berbagai alat bantu pengembangan aplikasi berbasis MMX. Kompilator dandebugger yang mendukung teknologi MMX telah disediakan antara lain: Visual C++ dari Microsoft, Watcom C++ dari Powersoft, dan Soft Ice dari Nu Mega Technologies. Selain itu, Intel menyediakan juga pustaka pengolah sinyal (Intel Signal Processing Library) dengan teknologi MMX yang memungkinkan implementasi fungsi pemrosesan sinyal dilakukan langsung pada prosesor berteknologi MMX tanpa memerlukan DSP (Digital Signal Processor).Intel juga menyediakan Recognition Primitive Library bagi perancang perangkat lunak untuk pengenalan percakapan dan pengenalan karakter yang berisi fungsi-fungsi generik dengan memanfaatkan fasilitas yang ada pada teknologi MMX.
Selain menulis ulang seluruh rutin yang dapat memanfaatkan fasilitas teknologi MMX, perancang program juga dapat memanfaatkan driver pengaktif MMX (MMX-enabled driver). Cara ini memungkinkan aplikasi secara otomatis memanfaatkan perangkat keras pemercepat operasi pendekode grafik3D, suara, dan MPEG jika perangkat tersebut terpasang.
Masalah yang timbul adalah bagaimana mengelola dua versi aplikasi, yakni yang berbasis MMX dan yang tidak, pada satu program aplikasi. Integrasi dua versi program dalam satu paket program aplikasi ini akan diperlukan untuk menjamin kompati-belitas program aplikasi dengan prosesor non-MMX. Program dapat memeriksa terlebih dulu bit 23 dari CPUID untuk menentukan apakah prosesor yang dipakai mengimplementasikan teknologi MMX atau tidak.
Implementasi teknologi MMX dapat dikatakan merupakan era baru bagi prosesorx86. Intel berencana untuk mengimplementasikan teknologi MMX ini pada semua arsitektur prosesor yang dibuatnya mulai pertengahan tahun 1998. Langkahini, mau tidak mau, harus diikuti oleh pembuat prosesor x86 lain bila ingin produknya tetap kompatibel dengan Intel.
Prosesor yang merupakan clone pertama dari generasi MMX ini adalah prosesor K6 yang dibuat oleh AMD berdasarkan arsitektur prosesor Nx686. ProsesorK6 kompatibel secara perangkat lunak dengan prosesor berteknologi MMX dari Intel. Produsen lain yang menyatakan siap membuat prosesor berteknologi MMX adalah Cyrix dan Centaur Technology.
Saat ini Intel telah memasarkan Pentium II, yakni prosesor berteknologiMMX yang menggunakan arsitektur Pentium Pro, yakni dari generasi yang lebih baru dibanding prosesor Pentium. Dengan produknya ini Intel satu langkah di depan pesaing-pesaingnya yang masing membuat prosesor MMX sebagai pesaing Pentium MMX. Pada Pentium II, Intel juga merancang soket baru yang secara perangkat keras tidak kompatibel lagi dengan kemasan prosesor generasi sebelumnya. Banyak pengamat menilai, langkah-langkah brilian Intel ini akan menjadikannya tetap berada di baris terdepan dalam pengembangan prosesorx86 sekaligus berkemampuan mendikte pasaran.
oleh: Hari Wibawanto
Artikel lain:
Mengapa Prosesor Pentium® II Pilihan terbaik untuk PC Anda?