Senin, 25 April 2011

Cara Kerja VGA ( GPU ) Modern

Graphics card kini bukanlah sekadar perangkat untuk bermain game di PC, tetapi juga sanggup mengolah video rosulusi tinggi, melakukan kalkulasi matematis rumit, dan menjalankan aplikasi 3D dengan kualitas video. Kemampuan graphics card terbaru yang diusung nVidia dan ATI (kini dimiliki AMD) cukup mengundang decak kagum. 
GPU terbaru nVidia, GT200, ditemui pada graphics card Geforce GTX 260 atau Geforce GTX 280. Adapun ATI, mengandalkan chip RV770 yang diimplan pada graphics card seri Radeon HD 4850 dan Radeon HD 4870. 
Pada artikel ini kita berniat menggali lebih dalam perihal kedua graphics chip terbaru ini dan menjelaskan apa yang dimaksud dengan istilah-istilah, seperti Shader, ROPs dan texture unit. Tidak itu saja, kita pun mencoba memaparkan bagaimana graphics carad bisa tangguh dibandingkan CPU pada proses kalkulasi tertentu.
Dasar : Struktur Graphics Card
Sebuah graphics card modern umumnya terdiri dari lima komponen, yaitu system interface, memori, graphics prosesor (GPU), frame buffer dan RAMDAC (Random Accsess Memory Digital / Analog Converter). System interface berkaitan langsung dengan motherboard. Saat ini, standarnya adalah PCI-Express, Raw data dimuat ke dalam graphics memory, yang berfungsi sebagai graphics objek dan texture memory. Umumnya, berkapasitas antara 256 MB dan 1.024 MB. Selanjutnya dara tersebut dibaca oleh Graphics Prosessor Unit (GPU) utuk melakukan kalkulasi terhadap semua posisi (koordinat), gerakan dan permukaan objek dari seuatu 3D scane. Hasilnya diperuntukkan untuk output gambar. Gambar yang telah selesai selanjutnya dikirim ke frame buffer. Dari sana, gambar dikirim lagi ke RAMDAC yang akan mengubah informasi digital menjadi output gambar analog untuk ditampilkan ke monitor VGA atau menajdi output digital untuk ditampilkan melalui interface DVI,HDMI, atau DisplayPort.
Graphics Pipeline:  Aliran Data 
Menjadi Gambar
Komponen-komponen dalam graphics card umumnya berfungsi pelengkap. Komponen terpenting pada graphics card hanyalah “otaknya”, yaitu graphics chip (GPU). Saat GPU menerima raw data,serangkaian proses panjang dimulai dan diakhiri dengan memunculkan gambar di monitor. Graphics Pipeline, yaitu channelling agar data dalam card sampai pada frame buffer, umumnya hampir sama pada semua graphics card yang ada saat ini.
Seluruh proses tersebut diulang untuk setiap gambar (frame). Agar dapat menghasilkan gerakan yang cepat, paling tidak diperlukan 25 frame per detik, sedangkan pada game PC diperlukan kecepatan 60 frame per detik agar tampilan lebih realistis. Bias dikatakan, GPU merupakan salah satu komponen yang “tersibuk” dalam PC.
Setelah data dikirim ke GPU melalui interface, langkah pertama proses pipeline-nya adalah mempersiapkan kalkulasi (pre-calculation) dan mengubah data dengan menggunakan sebuah pre-processor (setup Engine atau Input Assembler). Pre-processor ini mendeteksi jenis data, apakah berkaitan dengan vector,gambar,dank ode program, dan mempersiapkan raw data sehingga dapat diproses oleh modul yang tepat. Disini, ditentukan apakah raw data diproses oleh sebuah Vertex Shader,Geometry Shader,Pixel Shader, atau sebuah texture unit.
Setiap objek 3D terdiri atas berbagai triangle. Vertex Shader (Vertices adalah titik-titik sudut sebuah polygon) disuplai dengan koordinat-koordinat ini. segitiga-segitiga ini kemudian membentuk sebuah dunia 3D berdasarkan koordinat tersebut yang diselaraskan, di-scaling, atau di-distorsi sesuai dengan arah pandangan mata. Area pandangan yang diasumsikan ini disebut sebagai frustum. Setelah scane tersebut terbentuk,dilakukan pemeriksaan apakah sebuah objek harus terlihat atau tidak, berada di area frustum, dan apakah seluruh atau sebagian ditutupi oleh objek-objek.
Elemen yang tidak terlihat akan disingkirkan dari scane untuk menghindari proses kalkulasi yang tidak diperlukan. Proses ini disebut Frustum Culling. Apabila ditemukan sebuah objek terlalu jauh untuk dapat terlihat atau terlalu dekat menghadap ( membelakangi) penonton ( secara teoritis), maka proses ekuivalennya disebut sebagai clipping.
Proses Vertex Shader  yang terakhir adalah lighting. Disini, 3D scane akan diterangi oleh sumber cahaya ke dalam lingkungan (ruang) tersebut. Tanpa langkah ini, 3D scane terlihat gelap. Vertex Shader  hanya dapat memanipulasi objek, namun tidak dapat menghasilkan    elemen geometri baru, seperti titik, garis, dan segitiga. Bersamaan dengan hadirnya DirecX 10 pada November 2006 lalu, kini dikenal juga Geometry Shader. Geometry Shader dapat membuat bentuk geometri baru, sehingga, suatu pohon-pohon misalnya, dapat terlihat tumbuh atau hidup. Geometry Shader aktif setelah pembentukan 3D scane.
Apabila gambar yang akan dilihat penonton (viewer) sudah terbentuk dalam grid model dengan lighting source-nya,berarti prosesnya telah membuat sebuah foto dari scane tersebut dalam gambar 2D (dua dimensi) untuk ditampilkan di monitor. Proses ini dinamakan rastering atau rendering. Setiap titik sebuah objek 3D, yang selama ini hanya disimpan sebagai vector, akan diubah menjadi sebuah pixel. Langkah selanjutnya yang “menguras tenaga” adalah shading (shadowing) yang dilakukan oleh Pixel Shader. Pixel Shader akan memproses warna dan atribut yang diperlukan, seperti trasnparasi, pemantulan atau struktur dari masing-masing oixel. Hasilnya, objek 3D akan mendapat pewarnaan. 
Prinsipnya, sekarang gambar sudah jadi. Proses yang diperlukan hanyalah penyempurnaan malalui berbagai filter agar scane terlihat lebih realistis. Untuk itu tekstur, yaotu Bitmaps (gambar) yang sudah jadi, akan, akan diproyeksikan menjadi sebuah objek 3D (Texture Mapping). Dengan cara ini, dengan mudah dihasilkan gambar-gambar yang terlihat seperti foto minus fleksibelitas sebuah objek 3D. jadi pohon-pohon yang dibentuk oleh tekstur dapat terlihat bagus dari depan, namun terlihat datar saja dari samping. Anisotrophic filtering, yang juga ditem patkan dalam tekstur units, berfungsi agar teksture yang sudah terdistorsi secara perspektif dapat ditampilkan secara tajam dari kejahuan.
Setelah proses mapping pada texture unit selesai, frame akan diproses pada ROP unit (Raster Operation Processor). Pada ATI, unit ini disebut Element Render Back-End. Pada tahap restering, gambar terlihat lebih bagus. Misalnya, tepi-tepi yang miring ditampilkan menurut pixel sehingga terlihat seperti anak tangga. Namun masih tersedia fungsi Anti Aliasing, yang akan mendeteksi efek tepi tangga tersebut dalam gambar dan kemudian menghaluskannya.
Gambar yang sudah lengkap selanjutnya ditulis ke frame buffer dan berakhirlah proses graphics pipeline. Perbedaan teknis apa saja yang ditawarkan kedua produsen ini ,yakni dari nVidia dan ATI ?

GPU: Jantung Graphics Card 
Desain arsitektur GPU terbaru umumnya mengacu ke DirexX 10, yang merupakan kompilasi dari interface pemrograman untuk game-game berbasis Windows Vista  atau penerus dari vista (DirexX 11,12 dan seterusnya). Seperti yang telah dijelaskan pada bagian pipeline, desain chip sebelumnya membedakan antara shader (ALU,Arithmetic Logic Unit) yang bekerja sebagai Pixel Shader dan Vertex Shader.
DirexX 10 menetapkan sebuah model Shader baru yang disebut sebagai Unified Shader. Tergantung dari kebutuhannya. ALU dalam GPU dapat bekerja sebagai Pixel Shader, Vertex Shader  atau Geometry Shader. Saat ini, baik ATI maupun nVidia hamper semuanya memproduksi GPU yang mendukung DirexX 10. Dengan chip yang baru, efisiensi dari setiap Shader menjadi lebih baik. Agar raw data dapat dialokasikan dengan benar pada ALU yang belum terpakai, digunakan Thread Scheduler yang akan menganalisis, aliran data yang disiapkan oleh Set-up Engine, memparalelkannya dan mengalokasikan ALU untuk tugas yang sesuai.
Perbedaan antara GPU dari ATI dan nVidia terutama terletak pada struktur internalnya, yaitu arsitektur Unified Shader, yang juga disebut sebagai Stream Processors (SP). GPU dari nVidia diperkuat dengan 240 Stream Processors (SP), sedangkan AMD (ATI. ATI telah dibeli oleh AMD, maka ATI dan AMD menjadi satu perusahaan) malah mencapai 800 Stream Processors (SP). Perbedaan relative mudah diketauhi dengan melihat kemampuan dari Stream Processors ini. SP pada nVidia unidimensional dan sebagai scalar units (memproses sebuah komponen nilai merah, hijau,biru atau alpha), persiklus MADD (Multiplication and addition) untuk tugas-tugas Shading yang umum serta melakukan operasi dengan intruksi MUL (multiplikasi) untuk proses kalkulasi tambahan. Sebaliknya, Stream Processors (SP) pada ATI / AMD hanya dapat melakukan operasi dengan sebuah intruksi MADD. Agar kinerjanya sebanding,diperlukan gabungan 5 SP (untuk sebuah 5D vector unit) sehingga membentuk sebuah Shader Core dengan spectrum kinerja yang identik dengan sebuah Stream Processors pada nVidia GPU.
Namun,perbedaan keduanya tidak hanya terletak pada kemampuan masing-masing Stream Processors, melainkan juga pada alokasi dan pengelompokannya pada chip. ATI menggabungkan 5 SP dalam sebuah Shader Core. Jadi, dengan 800 SP terdapat 160 Shader Core. Pada ATI Radeon seri HD-4800,16 Shader Core membentuk sebuah SIMD (Single Intruction, Mulitple Data). Sebuah SIMD Core dapat menjalankan operasi hitung secara bersamaan untuk data dalama jumlah besar dalam sekali siklus, tetapi hanya untuk tugas identik saja. Setiap SIMD Core memiliki sebuah local memory sebesar 16 KB untuk pertukaran data yang cepat antara Stream Processors satu sama lain. Selain itu, untuk setiap Core (inti), terdapat sebuah Texture Cluster dengan 4 Texture Processor, sebuah decompressor, address unit, samples, filter unit, serta sebuah L1 Texture. Tiap Core berkomunikasi satu sama lain melaui data Request Bus dengan sebuah cache global yang berukuran 16 KB. Selain itu, chip ini menyimpan empat L2 Cache Block yang terhubung dengan memori utama dan bertukar data via Crossbar dengan SIMD Core. Aliran data yang diproses oleh Setup Engine, apakah menjadi sebuah program Vertex, Pixel atau Geometry, akan dibagi oleh Ultra Threaded Dispatch Processor (UTDP) dan akan mengoptimalkan efisiensi shader.
Stream Processors nVidia pada seri GT200 sedikit berbeda. Setiap delapan ALU membentuk sebuah Steaming Multiprocessor (SM), seperti pada ATI dengan cache 16 KB terpisah. Tiga dari 30 SM akan membentuk sebuah Texture Processing Cluster, termasuk 8 texture unit dan sebuah L1 Cache. Di sini, Cluster bekerja satu sama lain  berdasarkan MIMD (Multiple Intructions, Multiple Data). Dalam sebuah Clusters, arsitekture pada nVidia dikenal sebagai SIMT ( Single Instruction, Multiple Threads), sebuah modifikasi dari SIMD yang digunakan ATI dalam Cores mereka.
Dalam hal jumlah Stream Processors, ATI memang lebih unggul. Namun, nVidia lebih unggul dari segi Raster Operation Processor (ROPs). GT200 menawarkan 32 ROP unit, sedanhgkan ATI RV770 hanya 16 unit. Bahkan, interface memori dan built-in memori utama nVidia masih lebih baik. Dengan 512 bit, memori sebesar 1.024 MB pada sebuah GT200 menyediakan bandwidth yang lebih besar bagi GPU. Apapun ATI, hanya menyediakan bandwidth memori sebesar 256 bit dengan kapasitas memori video sebesar 512 MB. Oleh karena itu, ATI mengantisipasinya dengan pemakaian memori GDDR5 terbaru pada radeon HD 4870. memori ini menawarkan bandwidth dua kali lebih besar (4 Gbit/s  dan bukan 2 Gbit/s seperti dalam GDDR3) dengan konsumsi daya yang berkurang seperempatnya. Sementara nVidia, masih tetap mengandalkan memori GDDR3.

GPU: Melebihi CPU 
Kedua produsen tidak berfokus pada aspek 3D Graphics saja. ALu dalam GPU juga bisa diandalkan sebagai unit untuk memproses kalkulasi parallel. Pada tugas-tugas tertentu, misalnya simulasi data-data keuangan, kinerja graphics card bahkan 150 kali lebih cepat dari CPU. Kondisi ini dimungkinkan karena Shader fleksibelnya pada GPU terbaru yang dapat diprogram bebas. Dengan demikian, graphics chip-nya bisa dipakai sebagai General Purpose GPU ( GP GPU, Multi Purpose GPU).
Keuntungan performa yang diperoleh ternyata cukup besar. GT200 memiliki performa hingga 933 GFLOP (FLOP: Floating Point Operations Per Second), sedangkan RV770 bisa mencapai 1.200 GFLOP. Sebagai perbandingan, performa Core 2 Quad Q6600 hanya mencapai 21.4 GFLOP. Memang, tidak semua program dapat berjalan parallel sehingga sebuah CPU menjadi pilihan lebih baik untuk menyelesaikan tugas-tugas umum. Namun, untuk kalkulasi spesifik, misalnya simulasi, sebuah GPU bisa jauh lebih unggul dari kebannyakan CPU.
Selama ini, implementasi program yang seperti itu cukup sulit. Dengan CUDA (Compute Unified Device Architecture), nVidia menawarkan sebuah lingkungan pemrograman untuk bahasa C dqan C++. Dengan CUDA, dapat dikembangkan aplikasi dengan kemampuan kalkulasi parallel yang tinggi dan dijalankan pada GPU. ATI meluncurkan proyek yang sejenis dengan nama CTM (Close to the Metal). Namun,tanpa kenyataan dukungan pemrograman C++.
Namun, dibandingkan dengan sebuah CPU, sebuah GPU memiliki kekurangan terbesar. Floating Point (FP) number GPU hanya dapat diproses dengan akurasi satu kali, yaitu 32 bit. Proses yang rumit dengan intermediate data yang besar membutuhkan akurasi ganda, dalam hal ini 64 bit. ATI dan nVidia telah merespon tuntutan ini dan sedang berusaha agar GPU terbaru mereka juga menawarkan tingkat akurasi yang lebih untuk operasi Floating Point. Jadi, hai para produsen CPU, waspadalah dan sadarlah.!!

Tidak ada komentar:

Posting Komentar