1. Pengertian SIMD
SIMD adalah kelas komputer paralel dalam taksonomi Flynn. Klarifikasi diperlukan Ini menjelaskan komputer dengan beberapa elemen pemrosesan yang melakukan operasi yang sama pada beberapa titik data secara bersamaan. Mesin semacam itu mengeksploitasi paralelisme tingkat data , tetapi bukan konkurensi : ada komputasi simultan (paralel), tetapi hanya satu proses (instruksi) pada saat tertentu. SIMD khususnya dapat diterapkan untuk tugas-tugas umum seperti mengatur kontras dalam gambar digital atau mengatur volume audio digital . Paling modernDesain CPU menyertakan instruksi SIMD untuk meningkatkan kinerja penggunaan multimedia . SIMD tidak sama dengan SIMT , yang menggunakan utas .
2. Keuntungan SIMD
Aplikasi yang dapat memanfaatkan SIMD adalah aplikasi di mana nilai yang sama ditambahkan ke (atau dikurangi dari) sejumlah besar titik data, operasi umum pada banyak aplikasi multimedia . Salah satu contohnya adalah mengubah kecerahan gambar. Setiap piksel gambar terdiri dari tiga nilai kecerahan bagian warna merah (R), hijau (G), dan biru (B). Untuk mengubah kecerahan, nilai R, G dan B dibaca dari memori, nilai ditambahkan ke (atau dikurangkan dari) nilai tersebut, dan nilai yang dihasilkan ditulis kembali ke memori.
Dengan prosesor SIMD ada dua peningkatan pada proses ini. Untuk satu data dipahami sebagai blok, dan sejumlah nilai dapat dimuat sekaligus. Alih-alih serangkaian instruksi yang mengatakan "ambil piksel ini, sekarang ambil piksel berikutnya", prosesor SIMD akan memiliki instruksi tunggal yang secara efektif mengatakan "ambil n piksel" (di mana n adalah angka yang bervariasi dari desain ke desain). Untuk berbagai alasan, ini bisa memakan waktu lebih sedikit daripada mengambil setiap piksel satu per satu, seperti pada desain CPU tradisional.
Keuntungan lainnya adalah bahwa instruksi beroperasi pada semua data yang dimuat dalam satu operasi. Dengan kata lain, jika sistem SIMD bekerja dengan memuat delapan titik data sekaligus, add
operasi yang diterapkan ke data tersebut akan terjadi pada kedelapan nilai pada saat yang bersamaan. Paralelisme ini terpisah dari paralelisme yang disediakan oleh prosesor superscalar ; delapan nilai diproses secara paralel bahkan pada prosesor non-superskalar, dan prosesor superskalar mungkin dapat melakukan beberapa operasi SIMD secara paralel.
3. Kekurangan SIMD
- Tidak semua algoritme dapat divektorisasi dengan mudah. Misalnya, tugas berat kontrol aliran seperti penguraian kode mungkin tidak dengan mudah mendapatkan keuntungan dari SIMD; namun, secara teori dimungkinkan untuk melakukan vektorisasi perbandingan dan "aliran batch" untuk menargetkan optimalitas cache maksimal, meskipun teknik ini akan memerlukan lebih banyak status perantara. Catatan: Sistem pipeline batch (contoh: GPU atau pipeline rasterization software) paling menguntungkan untuk kontrol cache saat diimplementasikan dengan intrinsik SIMD, tetapi tidak eksklusif untuk fitur SIMD. Kompleksitas lebih lanjut mungkin terlihat untuk menghindari ketergantungan dalam rangkaian seperti string kode; sedangkan independensi diperlukan untuk vektorisasi.
- File register besar yang meningkatkan konsumsi daya dan area chip yang dibutuhkan.
- Saat ini, mengimplementasikan algoritma dengan instruksi SIMD biasanya membutuhkan tenaga manusia; sebagian besar kompiler tidak menghasilkan instruksi SIMD dari program C biasa , misalnya. Vektorisasi otomatis dalam kompiler adalah area aktif penelitian ilmu komputer. (Bandingkan pemrosesan vektor .)
- Pemrograman dengan set instruksi SIMD tertentu dapat melibatkan banyak tantangan tingkat rendah.
- SIMD mungkin memiliki batasan pada penyelarasan data ; programmer yang akrab dengan satu arsitektur tertentu mungkin tidak mengharapkan ini.
- Mengumpulkan data ke register SIMD dan menyebarkannya ke lokasi tujuan yang benar itu rumit (terkadang membutuhkan operasi permute) dan bisa jadi tidak efisien.
- Instruksi khusus seperti rotasi atau penambahan tiga operan tidak tersedia di beberapa set instruksi SIMD.
- Set instruksi khusus untuk arsitektur: beberapa prosesor tidak memiliki instruksi SIMD sama sekali, jadi programmer harus menyediakan implementasi non-vektorisasi (atau implementasi vektorisasi yang berbeda) untuk mereka.
- Arsitektur yang berbeda menyediakan ukuran register yang berbeda (misalnya 64, 128, 256 dan 512 bit) dan set instruksi, yang berarti bahwa pemrogram harus menyediakan banyak implementasi kode vektor untuk beroperasi secara optimal pada CPU tertentu. Selain itu, set instruksi SIMD yang mungkin bertambah dengan setiap ukuran register baru.
- Set instruksi MMX awal berbagi file register dengan stack floating-point, yang menyebabkan inefisiensi saat mencampur floating-point dan kode MMX. Namun, SSE2 memperbaikinya.
Untuk memperbaiki masalah 1 dan 5, ekstensi vektor RISC-V dan ARM's Scalable Vector Extension menggunakan pendekatan alternatif: alih-alih memaparkan detail tingkat sub-register kepada programmer, set instruksi mengabstraksikannya sebagai beberapa "register vektor "yang menggunakan antarmuka yang sama di semua CPU dengan set instruksi ini. Perangkat keras menangani semua masalah penyelarasan dan "strip-mining" loop. Mesin dengan ukuran vektor berbeda akan dapat menjalankan kode yang sama. [6] LLVM menyebut jenis vektor ini "vscale".
Tidak ada komentar:
Posting Komentar