AMD Asynchronous Shader, Sebuah Teknologi “Rahasia” dari AMD

Asynchronous Shaders

Pada Game Developers Conference (GDC) yang diselenggarakan pada bulan Maret 2015 yang lalu, AMD menyinggung soal teknologi “rahasia”-nya yaitu Asynchronous Shaders.

Graphics Processing Unit (GPU) berevolusi dari VGA Card dari sebuah kartu tambahan pada komputer untuk menggambar di layar menjadi sesuatu yang mempunyai kepintaran sendiri. GPU atau terkadang disebut juga Visual Processing Unit (VPU) lahir pada tahun 1999 dengan ditanamkannya sebuah prosesor yang sanggup untuk melakukan trik-trik pada gambar sekaligus menampilkannya pada layar. GPU sendiri tidak harus berupa sebuah kartu, tetapi bisa berupa Core yang ditanamkan pada Central Processing Unit (CPU) seperti pada Accelerated Processing Unit (APU) dari AMD.

Setelah sekian lama waktu berlalu, tidak hanya kecepatan proses pada GPU ini yang berkembang, tapi jumlah trik-trik yang bisa dilakukannya. Misalnya GPU dapat membantu tugas CPU, GPU dapat mengubah format video, GPU dapat mengolah suara, dan lain sebagainya. Tapi kita simpan topik ini untuk pembahasan di lain kesempatan.

Salah satu “rahasia” yang ditanamkan pada GPU AMD sejak AMD mengubah arsitekturnya menjadi Graphics Core Next (GCN) adalah Asynchronous Compute Engine (ACE). ACE ini sudah ada sejak seri AMD Radeon 79xx lahir. AMD Radeon 79xx mempunyai 2 ACE dan AMD menambahkannya hingga 8 ACE pada AMD Radeon R9 290 dan R9 290x.

LiquidVR SDK Sample Demo

Pada demo yang menggunakan sampel dari LiquidVR Software Development Kit (SDK), AMD menunjukkan dengan Asynchronous Shaders, kecepatan dari gambar yang tampil/Frame Per Second (FPS) dapat meningkat hingga 46% dengan hardware yang sama. Ini merupakan kabar gembira bukan hanya untuk mereka yang suka dengan FPS tinggi, Oculus sebagai pelopor pengembangan Virtual Reality (VR) mengatakan untuk pengalaman yang seindah asli dalam dunia VR dibutuhkan resolusi minimal 1.440p dan FPS minimum 75-90. Kalau FPS turun dibawah rekomendasi, maka pengguna akan mulai merasa tidak nyaman, sakit kepala, dan sebagainya.

AMD GPU Layout

ACE berlokasi diantara Graphics Command Processor (GCP) dan Shaders. Jika diibaratkan seperti sebuah perusahaan, GCP ini adalah Big Boss yang mengambil pesanan dari pelanggan (CPU) dan memerintahkan semua bagian di perusahaan (GPU) untuk mengerjakan pesanan itu tanpa terlalu banyak detil tentang tugas tersebut. ACE bagaikan Manager yang hanya punya kuasa kepada bawahannya (shaders) dan bertugas untuk mengatur karyawan agar mengerjakan pesanan dengan maksimal. Shaders bertugas untuk mengolah gambar dan special-effects-nya, mengkalkulasi efek pencahayaan, mengkalkulasi efek fisika dalam game, dan lain sebagainya.

GPU Pipeline DirectX 11

DirectX 11 dan sebelumnya sangat berantakan dan kemampuan multi-thread-nya sudah rusak dari sejak awal diluncurkan, bukan hanya pada GPU semata, namun pada CPU juga. Banyak yang merekomendasikan CPU dengan Single/Dual Core karena perbedaannya tidak jauh dengan Quad Core/Hexa Core/Octa Core, oleh sebab itu walaupun ACE ini sudah hadir bertahun-tahun silam masih saja belum bisa dimanfaatkan. Namun AMD tetap meningkatkan jumlah ACE dari 2 buah pada AMD Radeon 7970 menjadi 8 buah pada AMD Radeon R9 290x karena AMD percaya bahwa suatu hari kelak ACE akan berguna. Ini menjadi kenyataan dengan hadirnya Low-Level API baru seperti Mantle, Vulkan, dan DirectX 12 yang dikembangkan AMD bersama Microsoft untuk menghadirkan Asynchronous Shader.

Sebelum hadirnya Asynchronous Shader, semua tugas shader dikerjakan berurutan sesuai dengan datangnya tugas. Walaupun ada tugas yang lebih gampang dan tidak menggunakan bagian yang sama dalam shader, tetap saja burung yang datang duluan yang mendapat cacingnya. Misalnya untuk contoh sederhana: CPU memberi tugas “gambarkan gelombang pada air sewaktu batu jatuh ke dalamnya” lebih dulu lalu tugas “hitunglah jumlah gelombang pada air sewaktu batu jatuh ke dalamnya” datang belakangan, secara manusiawi, pasti kita akan menghitung dulu jumlah gelombang pada air baru menggambarnya, tapi karena shader tidak punya akal seperti manusia, maka shader akan mengerjakan sesuai urutan tugas yang datang walaupun tidak masuk akal. Hal seperti ini sudah dicoba diperbaiki dengan Pre-Emption, yaitu menjadwalkan tugas yang lebih penting untuk dikerjakan lebih dahulu dan yang kurang penting dikerjakan belakangan, namun Pre-Emption sendiri tidak memaksimalkan penggunaan shader, karena tetap saja tugas dikerjakan 1 per 1 padahal untuk menggambar dan menghitung, shader menggunakan bagian yang berbeda yang tidak harus saling menunggu satu sama lain.

GPU Pipeline DirectX 12

Asynchronous Shader menjadikan shader pada GPU AMD Radeon bekerja secara pararel. GPU memang mempunyai ratusan bahkan ribuan Stream Processors didalamnya dan bekerja secara pararel, tetapi pararel yang dihadirkan oleh Asynchronous Shader adalah pararel dalam mengerjakan tugas yang menggunakan bagian yang berbeda dalam GPU.

API Overhead Feature Test

Pada pengujian Application Program Interface (API) awal yang dilakukan dengan bantuan software 3D Mark API Overhead Feature Test yang baru-baru ini dirilis oleh 3D Mark, terlihat bahwa betapa buruknya kinerja DirectX 11. DirectX 11 bekerja lebih baik pada single-thread daripada multi-thread. Thread adalah sub bagian dari sebuah process. Sebuah process misalnya sewaktu web browser berjalan, ada banyak thread didalamnya seperti: thread untuk memuat gambar, thread untuk mengolah tampilan, dll. Multi-thread berguna agar sewaktu web browser tersebut memuat gambar, dia tidak harus menunggu gambar tersebut selesai di muat, dan bisa menampilkan isi lainnya yang sudah terdownload. Tidak masuk akal memang jika multi-thread ini menurunkan kemampuan komputer, malah harusnya sebaliknya, tapi inilah yang terjadi pada DirectX 11. Trik seperti inilah yang dikerjakan oleh Asynchronous Shaders.

Berkat kekacauan inilah AMD dan developer game berinisiatif untuk dihadirkannya API baru. API bagaikan fondasi atau rangka dari program. Dengan adanya API, developer tidak harus mengulang membuat program yang sama dalam setiap game. API berbeda dengan game engine walaupun fungsinya mirip, API jauh lebih mendasar dan lebih mentah daripada game engine. API baru yang dibuat dari awal oleh AMD dan benar-benar baru dari yang sebelumnya pernah ada bernama Mantle. Hanya berkat sebuah API baru tanpa perubahan apapun kepada hardware dapat meningkatkan Draw Calls hingga 1.600% atau 16x lipat dari DirectX 11. Kesuksesan Mantle ini pun digabungkan oleh AMD dan Microsoft ke dalam DirectX 12.

Games-With-Asynchronous-Shaders

Ada beberapa game yang sudah menggunakan teknologi Asynchronous Shader. 3 game pada PlayStation 4 yaitu: Battlefield 4, InFAMOUS Second Son, dan The Tomorrow Children, dan sebuah game di Personal Computer (PC) yaitu: Thief (harus menggunakan Mantle untuk dapat memanfaatkan Asynchronous Shader). Untuk XBox One, walaupun menggunakan CPU dan GPU dari AMD, saat ini belum bisa memanfaatkan Asynchronous Shader, karena masih menggunakan DirectX 11, mudah-mudahan dengan hadirnya DirectX 12 di XBox One nantinya akan memanfaatkan kemampuan Asynchronous Shader. XBox One memilih untuk menggunakan GPU dengan 2 ACE didalamnya, sementara PlayStation 4 yang sama-sama menggunakan hardware dari AMD memilih untuk menggunakan GPU dengan 8 ACE.

Semoga artikel ini bermanfaat *Cheers*