Follow me on Twitter RSS FEED

GPGPU

Posted in


Tujuan umum komputasi pada graphics processing unit (GPGPU, juga disebut sebagai GPGP dan ke yang lebih rendah tingkat GP ²) adalah teknik menggunakan GPU , yang biasanya menangani perhitungan hanya untuk grafis komputer , untuk melakukan perhitungan dalam aplikasi tradisional ditangani oleh CPU . Hal ini dimungkinkan dengan penambahan tahap Programmable dan aritmatika presisi yang lebih tinggi kepada jaringan pipa rendering , yang memungkinkan pengembang software untuk menggunakan pemrosesan stream pada data non-grafis.

[sunting ]
perbaikan GPU

fungsi GPU telah, secara tradisional, sangat terbatas. Bahkan, selama bertahun-tahun GPU hanya digunakan untuk mempercepat bagian-bagian tertentu dari pipa grafis. Beberapa perbaikan yang diperlukan sebelum GPGPU menjadi layak.

[sunting ]
programabilitas

Programmable vertex dan shader fragmen yang ditambahkan ke pipa grafis untuk memungkinkan programmer permainan untuk menghasilkan lebih realistis bahkan efek. Vertex shader memungkinkan programmer untuk mengubah-titik atribut per, seperti posisi, warna, tekstur koordinat, dan vektor normal . Fragmen shaders digunakan untuk menghitung warna sebuahfragmen , atau per-pixel. shader fragmen Programmable memungkinkan programmer untuk pengganti, misalnya, model pencahayaan selain yang disediakan secara default oleh kartu grafis, biasanya sederhana Gouraud naungan . Shaders telah memungkinkan grafis programmer untuk menciptakan efek lensa, pemetaan perpindahan , dan kedalaman lapangan.
The programabilitas dari pipa telah cenderung terus menurut Microsoft DirectX spesifikasi [rujukan ], dengan DirectX8 memperkenalkan Shader Model 1.1, Pixel Shader Model DirectX8.1 1.2, 1.3 dan 1.4, dan DirectX9 mendefinisikan Shader Model 2.x dan 3.0. Setiap model shader meningkatkan fleksibilitas model pemrograman dan kemampuan, memastikan perangkat keras sesuai berikut sesuai. Spesifikasi memperkenalkan DirectX10 Shader Model 4.0 yang menyatukan spesifikasi pemrograman untuk vertex, geometri ("Geometry shaders" yang baru untuk DirectX10) dan pengolahan fragmen memungkinkan untuk lebih cocok untuk hardware unified shader, sehingga memberikan kolam komputasi tunggal sumber daya diprogram.[samar-samar]

[sunting ]
Jenis Data

Pra-DirectX9 kartu grafis hanya didukung paletted atau jenis warna yang tidak terpisahkan [samar-samar ]. Berbagai format yang tersedia, masing-masing mengandung unsur merah, elemen hijau, dan biru elemen [rujukan ]. Kadang-kadang nilai alpha tambahan yang ditambahkan, akan digunakan untuk transparansi. format yang umum adalah:
  • 8 bit per pixel - Palet modus [jelas ], dimana nilai masing-masing adalah suatu indeks dalam tabel dengan nilai warna nyata ditentukan dalam salah satu format lain. Mungkin 2 bit untuk warna merah, 3 bit untuk hijau, dan 3 bit untuk biru.
  • 16 bit per pixel - Biasanya dialokasikan sebagai 5 bit untuk warna merah, 6 bit untuk hijau, dan 5 bit untuk biru.
  • 24 bit per pixel - 8 bit untuk masing-masing merah, hijau, dan biru
  • 32 bit per pixel - 8 bit untuk masing-masing merah, hijau, biru, dan alpha
Untuk fungsi tetap awal atau grafis programabilitas terbatas (yaitu sampai dengan dan termasuk GPU sesuai DirectX8.1) ini sudah cukup karena ini juga merupakan representasi yang digunakan dalam display. Representasi ini tidak memiliki keterbatasan tertentu, namun. Dengan grafis yang cukup pengolahan daya bahkan grafis programmer ingin menggunakan format yang lebih baik, seperti floating point format data, untuk mendapatkan efek seperti rentang dinamis tinggi pencitraan . Banyak aplikasi GPGPU memerlukan akurasi titik mengambang, yang datang dengan kartu grafis sesuai dengan spesifikasi DirectX9.
DirectX9 Shader Model 2.x menyarankan dukungan dua tipe presisi: dan parsial penuh presisi. dukungan presisi Kendali baik bisa FP32 dan FP24 (floating point 24-bit per komponen) atau lebih, sedangkan presisi parsial FP16. ATI R300 seri GPU didukung FP24 presisi hanya dalam pipa fragmen Programmable (meskipun FP32 didukung dalam titik prosesor ) sedangkanNvidia 's NV30 mendukung kedua seri FP16 dan FP32; vendor lain seperti S3 Graphics dan XGI mendukung format campuran sampai dengan FP24.
Shader Model 3.0 mengubah spesifikasi, peningkatan persyaratan presisi penuh minimal dukungan FP32 dalam pipa fragmen. ATI Shader Model 3.0 compliant R5xx generasi ( seri Radeon X1000 ) mendukung hanya FP32 seluruh pipa sementara Nvidia NV4x dan G7x seri terus mendukung kedua presisi penuh FP32 dan presisi FP16 parsial. Meskipun tidak diatur oleh Shader 3.0, ATI dan Model kedua Nvidia GPU Shader Model 3.0 memperkenalkan dukungan untuk target render FP16 blendable, mudah memfasilitasi dukungan untuk High Dynamic Range Rendering. [rujukan]
Pelaksanaan floating point di nVidia GPU sebagian besar IEEE kompatibel, namun hal ini tidak benar di semua vendor. [1]Hal ini memiliki implikasi untuk pembenaran yang dianggap penting bagi beberapa aplikasi ilmiah. Sementara nilai-nilai bit floating point-64 (float presisi ganda) yang umumnya tersedia di CPU, ini tidak didukung secara universal di GPU, beberapa arsitektur GPU pengorbanan IEEE-kepatuhan sementara yang lain kurang presisi ganda sama sekali. Ada upaya untuk meniru presisi ganda nilai floating point pada GPU, namun kecepatan tradeoff meniadakan manfaat apapun untuk pembongkaran perhitungan ke GPU di tempat pertama.[2]
Kebanyakan operasi pada GPU beroperasi dalam mode vectorized: suatu operasi dapat dilakukan pada sampai empat nilai sekaligus. Misalnya, jika satu warna yang akan dipengaruhi oleh warna lain , GPU dapat menghasilkan warna yang dihasilkan dalam operasi tunggal. Fungsi ini berguna dalam grafis karena hampir semua tipe data dasar adalah vektor (baik 2, 3, atau 4 dimensi). Contohnya termasuk vertex, warna, vektor normal, dan tekstur koordinat. Banyak aplikasi lain dapat menempatkan ini menggunakan baik, dan karena lebih tinggi kinerja mereka, instruksi vektor ( SIMD ) telah lama tersedia pada CPU.
Pada bulan November 2006 Nvidia meluncurkan CUDA , sebuah SDK dan API yang memungkinkan programmer menggunakan bahasa pemrograman C untuk kode algoritma untuk eksekusi pada seri Geforce 8 GPU. AMD menawarkan SDK serupa untuk ATI berbasis GPU dan SDK dan teknologi yang disebut Stream SDK (sebelumnya CTM, Dekat dengan Metal ), yang dirancang untuk berkompetisi secara langsung dengan Nvidia CUDA. CTM menyediakan antarmuka hardware tipis [klarifikasi diperlukan ]. AMD juga telah mengumumkan AMDFireStream lini produk (menggabungkan CPU dan GPU teknologi pada satu chip). Dibandingkan, misalnya, untuk tradisional floating point akselerator seperti bit CSX700 papan-64 dariClearSpeed yang digunakan dalam hari ini superkomputer , GPU top-end saat ini dari nVidia dan AMD menekankan presisi tunggal (32-bit) perhitungan; ganda presisi (64-bit) menjalankan perhitungan jauh lebih lambat [rujukan].

[mengedit ]
konsep pemrograman GPGPU

GPU dirancang khusus untuk grafis dan dengan demikian sangat ketat dalam hal operasional dan pemrograman. Karena sifat mereka, GPU hanya efektif mengatasi masalah yang dapat diselesaikan dengan menggunakan proses aliran dan perangkat keras hanya dapat digunakan dengan cara tertentu.

[sunting ]
pengolahan Stream

GPU hanya dapat memproses vertex independen dan fragmen, tetapi dapat memproses banyak dari mereka yang secara paralel. Hal ini sangat efektif bila programmer ingin proses vertex banyak atau fragmen dengan cara yang sama. Dalam pengertian ini, GPU adalah prosesor stream - prosesor yang dapat beroperasi secara paralel dengan menjalankan satu kernel pada catatan banyak di sungai sekaligus.
Sebuah sungai hanya satu set catatan yang memerlukan perhitungan yang serupa. Streaming memberikan paralelisme data. Kernel adalah fungsi yang diterapkan pada setiap elemen dalam sungai. Dalam GPU, vertex dan fragmen adalah unsur di sungai dan vertex dan shader fragmen adalah kernel yang akan dijalankan pada mereka. Sejak elemen proses GPU independen tidak ada cara untuk telah berbagi atau data statis. Untuk setiap elemen kita hanya dapat membaca dari input, melakukan operasi di atasnya, dan menulis ke output. Hal ini diperbolehkan untuk memiliki beberapa input dan output ganda, tetapi tidak pernah sepotong memori yang baik dibaca dan ditulis [samar-samar].
Aritmatika intensitas didefinisikan sebagai jumlah operasi yang dilakukan per kata dari memori ditransfer. Penting untuk aplikasi GPGPU memiliki intensitas tinggi lain aritmetika latency akses memori akan membatasi speedup komputasi. [rujukan]
GPGPU Ideal aplikasi memiliki set data yang besar, paralelisme tinggi, dan ketergantungan antara unsur-unsur data yang minimal.

[mengedit ]
konsep pemrograman GPU

[sunting ]
sumber daya Komputasi

Ada berbagai sumber daya komputasi yang tersedia di GPU:
  • prosesor Programmable - Vertex, primitif, dan pipa fragmen memungkinkan programmer untuk melakukan kernel pada data stream
  • Rasterizer - menciptakan fragmen dan interpolates konstanta per-titik koordinat seperti tekstur dan warna
  • Tekstur Unit - antarmuka memori hanya baca
  • Framebuffer - menulis antarmuka memori hanya
Bahkan, programmer dapat pengganti tekstur menulis hanya untuk output daripada framebuffer tersebut. Ini dilakukan baik melalui Render-Untuk-Tekstur (RTT), Render-Untuk-Backbuffer-Salin-Untuk-Tekstur (RTBCTT), atau aliran yang lebih baru-out.

[sunting ]
Textures sebagai aliran

Bentuk yang paling umum untuk stream untuk mengambil di GPGPU adalah grid 2D karena ini cocok secara alami dengan model rendering dibangun ke GPU. Banyak perhitungan secara alami peta ke dalam grid: aljabar matriks, pengolahan gambar, simulasi berbasis fisik, dan sebagainya.
Karena tekstur digunakan sebagai memori, pencarian tekstur kemudian digunakan sebagai memori membaca. operasi tertentu dapat dilakukan secara otomatis oleh GPU karena hal ini.

[sunting ]
Kernel

Kernel dapat dianggap sebagai tubuh loop. Sebagai contoh, jika programmer yang beroperasi pada kotak pada CPU mereka mungkin memiliki kode yang terlihat seperti ini:
/ / Input dan output grid memiliki 10000 x 10000 atau 100.000.000 elemen.
void transform_10k_by_10k_grid ( float di [10000][10000], float keluar [10000][10000])
(
bagi ( int x = 0; x < 10000; x + + )
(
untuk ( int y = 0, y < 10000; y + + )
(
/ / Baris berikutnya dijalankan 100 juta kali keluar [x ][y ] = do_some_hard_work ( di [x ][y ] ) ;
)
)
)
Pada GPU, programmer hanya menetapkan tubuh loop sebagai kernel dan apa data ke loop lebih dengan menerapkan pengolahan geometri.
[sunting ]
kontrol Aliran
Dalam kode sekuensial adalah mungkin untuk mengendalikan aliran program dengan menggunakan-lalu-lain laporan jika dan berbagai bentuk loop. flow control struktur tersebut hanya baru-baru ini telah ditambahkan ke GPU. [3]Bersyarat menulis dapat dicapai dengan menggunakan serangkaian dibuat dengan benar dari aritmatika / operasi bit, tapi looping dan branching bersyarat tidak mungkin.
GPU terbaru memungkinkan bercabang, tetapi biasanya dengan hukuman kinerja. Percabangan umumnya harus dihindari dalam loop batin, baik dalam CPU atau kode GPU, dan berbagai teknik, seperti resolusi cabang statis, pra-komputasi, dan Z-pemusnahan [4]dapat digunakan untuk mencapai bercabang ketika dukungan hardware tidak ada.

[sunting ]
teknik GPU

[sunting ]
Peta

Operasi peta hanya menerapkan fungsi yang diberikan (kernel) untuk setiap elemen dalam sungai. Sebuah contoh sederhana adalah mengalikan setiap nilai dalam sungai oleh kecerahan konstanta (peningkatan dari suatu gambar). Operasi peta sederhana untuk menerapkan di GPU. Pemrogram menghasilkan fragmen untuk setiap piksel pada layar dan menerapkan program fragmen untuk masing-masing. Aliran hasil ukuran yang sama disimpan dalam buffer output.

[sunting ]
Mengurangi

Beberapa perhitungan memerlukan perhitungan aliran yang lebih kecil (mungkin suatu aliran hanya 1 elemen) dari sebuah sungai yang lebih besar. Hal ini disebut pengurangan sungai. Secara umum penurunan dapat dicapai dalam beberapa langkah. Hasil dari langkah sebelumnya digunakan sebagai masukan untuk langkah saat ini dan rentang dimana operasi diterapkan berkurang hingga hanya satu elemen aliran tetap.

[sunting ]
Streaming penyaringan

Stream filtering pada dasarnya adalah pengurangan non-seragam. Penyaringan melibatkan menghapus item dari aliran berdasarkan beberapa kriteria.

[sunting ]
Scatter

Operasi yang paling alami tersebar didefinisikan pada prosesor vertex. Prosesor vertex dapat menyesuaikan posisi titik , yang memungkinkan programmer untuk kontrol di mana informasi disimpan pada grid. ekstensi lain juga mungkin, seperti mengontrol seberapa besar suatu daerah titik mempengaruhi.
Prosesor fragmen tidak dapat melakukan operasi tersebar langsung karena lokasi setiap fragmen di grid adalah tetap pada saat penciptaan fragmen dan tidak dapat diubah oleh programmer. Namun, operasi tersebar logis kadang-kadang dapat menampilkannya kembali atau dilaksanakan dengan mengumpulkan langkah tambahan. Implementasi yang menyebarkan pertama akan memancarkan kedua nilai output dan alamat output. Sebuah segera setelah operasi menggunakan perbandingan mengumpulkan alamat untuk melihat apakah peta nilai output ke slot arus keluaran.

[sunting ]
Kumpulkan

Prosesor fragmen mampu membaca tekstur dengan cara akses acak, sehingga dapat mengumpulkan informasi dari setiap sel grid, atau sel grid beberapa, seperti yang diinginkan [samar].

[sunting ]
Urutkan

Operasi semacam mengubah set unordered unsur menjadi unsur memerintahkan set. Yang paling umum implementasi di GPU menggunakan jaringan menyortir.[4]

[sunting ]
Pencarian

Operasi pencarian memungkinkan programmer untuk menemukan elemen tertentu di dalam aliran, atau mungkin menemukan tetangga elemen tertentu. GPU tidak digunakan untuk mempercepat mencari elemen individu, melainkan digunakan untuk menjalankan beberapa pencarian secara paralel. [rujukan]

[sunting ]
Struktur data

Berbagai struktur data yang dapat diwakili pada GPU:

[sunting ]
Aplikasi

Berikut adalah beberapa daerah di mana GPU telah digunakan untuk komputasi tujuan umum:

[sunting ]
Lihat pula

1 komentar:

Anonim mengatakan...

Mantap ni broh buat referensi, tenkyu berat nih

Posting Komentar

Berkomentar-lah yang sopan & santun, tidak mengandung unsur-unsur yang merugikan.