Ada sesuatu yang tidak pernah saya mengerti. Bagaimana gim PC besar seperti GTA IV dapat menggunakan 50% CPU saya dan berjalan pada 60fps sedangkan demo DX dari Teapot @ 60fps yang berputar menggunakan 30% kekalahan?
Ada sesuatu yang tidak pernah saya mengerti. Bagaimana gim PC besar seperti GTA IV dapat menggunakan 50% CPU saya dan berjalan pada 60fps sedangkan demo DX dari Teapot @ 60fps yang berputar menggunakan 30% kekalahan?
Jawaban:
Secara umum, itu karena
Misalnya, satu optimasi mudah yang dapat Anda lakukan melibatkan tidak benar-benar mencoba menggambar hal-hal yang tidak dapat dilihat. Pertimbangkan pemandangan kompleks seperti lanskap kota dari Grand Theft Auto IV . Penyaji sebenarnya tidak merender semua bangunan dan struktur. Alih-alih, ini hanya menampilkan apa yang dapat dilihat kamera. Jika Anda bisa terbang ke belakang gedung-gedung yang sama, menghadap kamera asli, Anda akan melihat struktur cangkang cekung yang sudah setengah jadi. Setiap titik yang tidak dapat dilihat oleh kamera tidak dirender - karena Anda tidak dapat melihatnya, tidak perlu mencoba menunjukkannya kepada Anda.
Selain itu, instruksi yang dioptimalkan dan teknik khusus ada ketika Anda berkembang melawan perangkat keras tertentu, untuk memungkinkan speedup yang lebih baik.
Bagian lain dari pertanyaan Anda adalah mengapa demo menggunakan banyak CPU:
... sementara demo DX dari Teapot @ 60fps yang berputar menggunakan 30% kekalahan?
Demo API grafis (seperti dxdemo
) umum untuk kembali ke apa yang disebut perender perangkat lunak ketika perangkat keras Anda tidak mendukung semua fitur yang diperlukan untuk menunjukkan contoh yang bagus. Fitur-fitur ini mungkin termasuk hal-hal seperti bayangan, refleksi, penelusuran sinar, fisika, dan lain-lain.
Ini meniru fungsi perangkat keras berfitur lengkap yang tidak mungkin ada, untuk memamerkan semua fitur API. Tetapi karena perangkat keras itu sebenarnya tidak ada, itu berjalan pada CPU Anda sebagai gantinya. Itu jauh lebih tidak efisien daripada mendelegasikan ke kartu grafis - karenanya penggunaan CPU Anda tinggi.
Kesabaran, keterampilan teknis, dan daya tahan.
Poin pertama adalah bahwa Demo DX terutama merupakan alat bantu pengajaran sehingga dilakukan untuk kejelasan, bukan kecepatan eksekusi.
Ini adalah subjek yang cukup besar untuk menyingkat tetapi pengembangan game terutama tentang memahami data Anda dan jalur eksekusi Anda ke tingkat yang hampir patologis.
Game 3D sangat bagus untuk menipu mata Anda. Sebagai contoh, ada teknik yang disebut screen space ambient occlusion (SSAO) yang akan memberikan nuansa yang lebih realistis dengan membayangi bagian-bagian adegan yang dekat dengan diskontinuitas permukaan. Jika Anda melihat sudut-sudut dinding Anda, Anda akan melihat mereka tampak sedikit lebih gelap daripada bagian tengah dalam banyak kasus.
Efek yang sama dapat dicapai dengan menggunakan radiositas, yang didasarkan pada simulasi yang agak akurat. Radiositas juga akan memperhitungkan lebih banyak efek lampu memantul, dll. Tetapi ini mahal secara komputasi - ini adalah teknik penelusuran sinar.
Ini hanya satu contoh. Ada ratusan algoritma untuk grafik komputer waktu nyata dan pada dasarnya didasarkan pada perkiraan yang baik dan biasanya membuat banyak asumsi. Misalnya, penyortiran spasial harus dipilih dengan sangat hati-hati tergantung pada kecepatan, posisi khas kamera serta jumlah perubahan pada geometri pemandangan.
'Optimalisasi' ini sangat besar - Anda dapat mengimplementasikan suatu algoritma secara efisien dan membuatnya berjalan 10 kali lebih cepat, tetapi memilih algoritma yang cerdas yang menghasilkan hasil yang serupa ("curang") dapat membuat Anda beralih dari O (N ^ 4) ke O ( log (N)).
Mengoptimalkan implementasi sebenarnya adalah apa yang membuat game lebih efisien, tetapi itu hanya optimasi linier.
Eeeeek!
Saya tahu bahwa pertanyaan ini sudah lama, tetapi menarik bahwa tidak ada yang menyebutkan VSync !!! ???
Anda membandingkan penggunaan CPU game pada 60fps dengan penggunaan CPU dari demo teko di 60fps.
Bukankah sudah jelas, bahwa keduanya berjalan (lebih atau kurang) tepat pada 60fps? Itu mengarah pada jawaban ...
Kedua aplikasi berjalan dengan vsync diaktifkan! Ini berarti (dumbed-down) bahwa framerate rendering dikunci ke "interval kosong vertikal" monitor Anda. Perangkat keras grafis (dan / atau driver) hanya akan memberikan maksimum. 60fps. 60fps = 60Hz (Hz = per detik) refresh rate. Jadi, Anda mungkin menggunakan CRT yang agak tua dan berkedip atau layar LCD biasa. Pada CRT berjalan pada 100Hz Anda mungkin akan melihat framerates hingga 100Hz. VSync juga berlaku dalam cara yang mirip dengan display LCD (mereka biasanya memiliki kecepatan refresh 60Hz).
Jadi, demo teko sebenarnya dapat berjalan jauh lebih efisien! Jika menggunakan 30% waktu CPU (dibandingkan dengan 50% waktu CPU untuk GTA IV), maka mungkin menggunakan lebih sedikit waktu cpu setiap frame, dan hanya menunggu lebih lama untuk interval kosong vertikal berikutnya. Untuk membandingkan kedua aplikasi, Anda harus menonaktifkan vsync dan mengukur lagi (Anda akan mengukur fps yang jauh lebih tinggi untuk kedua aplikasi).
Kadang-kadang ok untuk menonaktifkan vsync (sebagian besar game memiliki opsi dalam pengaturannya). Terkadang Anda akan melihat "merobek artefak" ketika vsync dinonaktifkan.
Anda dapat menemukan detailnya dan mengapa itu digunakan di wikipedia: http://en.wikipedia.org/wiki/Vsync
Sementara banyak jawaban di sini memberikan indikasi yang sangat baik tentang bagaimana saya akan menjawab pertanyaan sederhana mengapa
Mungkin contoh terbaik (tentunya salah satu yang paling terkenal) adalah perangkat lunak Id. Mereka menyadari sangat awal, pada zaman Commander Keen (jauh sebelum 3D) bahwa datang dengan cara yang cerdas untuk mencapai sesuatu 1 , bahkan jika itu bergantung pada perangkat keras modern (dalam hal ini kartu grafis EGA!) Yang secara grafis lebih unggul daripada kompetisi yang akan membuat game Anda menonjol. Ini benar tetapi mereka lebih jauh menyadari bahwa, daripada harus datang dengan permainan baru dan konten sendiri mereka dapat melisensikan teknologi, sehingga mendapatkan penghasilan dari orang lain sementara mampu mengembangkan mesin generasi berikutnya dan dengan demikian melompati kompetisi lagi .
Kemampuan para programmer ini (ditambah dengan pengetahuan bisnis) adalah apa yang membuat mereka kaya.
Yang mengatakan itu belum tentu uang yang memotivasi orang semacam itu. Mungkin hanya keinginan untuk mencapai, untuk mencapai. Uang yang mereka peroleh di hari-hari awal hanya berarti bahwa mereka sekarang memiliki waktu untuk mencurahkan apa yang mereka nikmati. Dan sementara banyak yang memiliki minat luar hampir semua masih program dan mencoba mencari cara untuk melakukan lebih baik daripada iterasi terakhir.
Sederhananya orang yang menulis demo teko kemungkinan memiliki satu atau lebih masalah berikut:
Yang terakhir mungkin terdengar keras 2 tetapi jelas ada beberapa yang lebih baik daripada yang lain, kurva lonceng kadang-kadang memiliki ujung yang ekstrem dan mereka cenderung tertarik pada ujung ekstrem yang sesuai dari apa yang dilakukan dengan keterampilan itu.
Tujuan yang lebih kecil yang kemungkinan besar menjadi alasan utama. Target dari demo teko adalah hanya itu, sebuah demo. Tapi bukan demo dari skill programmer 3 . Ini akan menjadi demo dari satu sisi kecil dari OS (besar), dalam hal ini rendering DX.
Bagi mereka yang melihat demo itu tidak akan mater itu digunakan lebih banyak CPU daripada yang diperlukan selama itu terlihat cukup baik. Tidak akan ada insentif untuk menghilangkan limbah ketika tidak akan ada penerima manfaat. Sebagai perbandingan, sebuah game akan senang memiliki siklus cadangan untuk AI yang lebih baik, suara yang lebih baik, lebih banyak poligon, lebih banyak efek.
Karena beberapa alasan
EDIT: Untuk memberikan beberapa angka
2,8 Ghz Athlon-64 dengan NV-6800 GPU. Hasilnya adalah:
Terkadang sebuah adegan mungkin memiliki lebih banyak kejadian daripada yang terlihat. Sebagai contoh, teko berputar dengan ribuan titik, pemetaan lingkungan, pemetaan benjolan, dan pixel shaders kompleks lainnya yang diberikan secara bersamaan berjumlah total banyak pemrosesan. Seringkali demo teko ini dimaksudkan untuk memamerkan semacam efek khusus. Mereka juga mungkin tidak selalu memanfaatkan GPU ketika kinerja absolut bukanlah tujuannya.
Dalam gim Anda mungkin melihat efek yang serupa tetapi biasanya dilakukan dengan cara yang dikompromikan dalam upaya untuk memaksimalkan frame rate. Optimalisasi ini mencakup semua yang Anda lihat dalam game. Masalahnya menjadi, "Bagaimana kita bisa membuat adegan paling spektakuler dan realistis dengan kekuatan pemrosesan paling sedikit?" Itulah yang membuat programmer game beberapa pengoptimal terbaik di sekitar.
Dengan semua jawaban yang memenuhi syarat dan baik yang diberikan, salah satu yang masih hilang adalah: Penghitung penggunaan CPU Windows tidak terlalu dapat diandalkan. Saya kira demo teko sederhana ini hanya memanggil fungsi rendering di loop idle-nya, memblokir buffer swap.
Sekarang penghitung pemanfaatan CPU Windows hanya melihat berapa banyak waktu CPU dihabiskan dalam setiap proses, tetapi tidak bagaimana waktu CPU ini digunakan. Coba tambahkan a
Sleep(0);
tepat setelah kembali dari fungsi rendering, dan bandingkan.
Selain itu, ada banyak trik dari sudut pandang artistik untuk menghemat daya komputasi. Dalam banyak gim, terutama yang lebih tua, bayangan dihitung sebelumnya dan "dipanggang" tepat di tekstur peta. Banyak kali, para seniman mencoba menggunakan pesawat (dua segitiga) untuk mewakili hal-hal seperti pohon dan efek khusus ketika sebagian besar terlihat sama. Kabut dalam gim adalah cara mudah untuk menghindari render objek yang jauh, dan seringkali, gim akan memiliki banyak resolusi dari setiap objek untuk pandangan jauh, tengah, dan dekat.
Inti dari jawaban apa pun seharusnya adalah ini - Transformasi yang dilakukan mesin 3D sebagian besar ditentukan dalam penambahan dan perkalian (aljabar linier) (tanpa cabang atau lompatan), operasi menggambar suatu bingkai tunggal sering ditentukan dengan cara yang banyak pekerjaan add-mul seperti itu dapat dilakukan secara paralel. Inti GPU adalah add-mul's yang sangat bagus, dan mereka memiliki puluhan atau ratusan inti add-mull.
CPU dibiarkan melakukan hal-hal sederhana - seperti AI dan logika game lainnya.
Bagaimana gim PC besar seperti GTA IV dapat menggunakan 50% CPU saya dan berjalan pada 60fps sedangkan demo DX dari Teapot @ 60fps yang berputar menggunakan 30% kekalahan?
Sementara GTA sangat mungkin lebih efisien daripada demo DX, mengukur efisiensi CPU dengan cara ini pada dasarnya rusak. Efisiensi dapat didefinisikan misalnya dengan berapa banyak pekerjaan yang Anda lakukan per waktu tertentu. Contoh tandingan sederhana: menelurkan satu utas per CPU logis dan biarkan loop infinite sederhana berjalan di atasnya. Anda akan mendapatkan penggunaan CPU 100%, tetapi tidak efisien, karena tidak ada pekerjaan yang bermanfaat dilakukan.
Ini juga mengarah pada sebuah jawaban: bagaimana sebuah game bisa efisien? Saat memprogram "game besar yang hebat", upaya besar didedikasikan untuk mengoptimalkan game di semua aspek (yang saat ini biasanya juga mencakup optimasi multi-core). Sedangkan untuk demo DX, intinya tidak berjalan cepat, melainkan menunjukkan konsep.
Saya pikir Anda harus melihat pemanfaatan GPU daripada CPU ... Saya bertaruh kartu grafis jauh lebih sibuk di GTA IV daripada di sampel Teapot (seharusnya praktis tidak digunakan).
Mungkin Anda bisa menggunakan monitor seperti ini untuk memeriksa:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
Juga framerate adalah sesuatu yang perlu dipertimbangkan, mungkin sampel teko berjalan dengan kecepatan penuh (mungkin 1000fps) dan sebagian besar permainan terbatas pada frekuensi refresh monitor (sekitar 60fps).
Lihatlah jawabannya di vsync; itulah sebabnya mereka menjalankan frame rate yang sama.
Kedua, CPU ketinggalan memimpin dalam sebuah game. Penjelasan yang disederhanakan adalah bahwa loop game utama hanya loop infinite:
while(1) {
update();
render();
}
Bahkan jika gim Anda (atau dalam hal ini, teko) tidak melakukan banyak hal, Anda masih memakan CPU di loop Anda.
50% cpu di GTA adalah "lebih produktif" daripada 30% dalam demo, karena lebih dari itu kemungkinannya tidak melakukan banyak hal sama sekali; tetapi GTA memperbarui banyak detail. Bahkan menambahkan "Tidur (10)" ke demo mungkin akan menurunkan CPU sebesar satu ton.
Terakhir lihat penggunaan GPU. Demo mungkin mengambil <1% pada kartu video modern sementara GTA mungkin akan menjadi mayoritas saat bermain game.
Singkatnya, tolok ukur dan pengukuran Anda tidak akurat.
Demo teko DX tidak menggunakan 30% dari CPU melakukan pekerjaan yang bermanfaat. Ini sibuk menunggu karena tidak ada lagi yang bisa dilakukan.
Dari apa yang saya ketahui tentang seri Unreal beberapa konvensi rusak seperti enkapsulasi. Kode dikompilasi menjadi bytecode atau langsung ke kode mesin tergantung pada gim. Juga, objek dirender dan dikemas dalam bentuk jerat dan hal-hal seperti tekstur, pencahayaan dan bayangan dihitung sebelumnya sedangkan animasi 3d murni mengharuskan ini untuk waktu nyata ini. Ketika permainan benar-benar berjalan ada juga beberapa optimasi seperti hanya menampilkan bagian-bagian yang terlihat dari suatu objek dan menampilkan detail tekstur hanya ketika menutup. Akhirnya, ada kemungkinan bahwa video game dirancang untuk mendapatkan yang terbaik dari suatu platform pada waktu tertentu (mis: Intelx86 MMX / SSE, DirectX, ...).
Saya pikir ada bagian penting dari jawaban yang hilang di sini. Sebagian besar jawaban memberi tahu Anda "Ketahui data Anda". Faktanya adalah bahwa Anda harus, dengan cara yang sama dan dengan tingkat kepentingan yang sama, juga tahu Anda:
TETAPI , di atas semua itu, dengan komputer modern saat ini, Anda tidak akan pernah bisa memutar video 1080p sungguhan di >> 30ftp (gambar 1080p tunggal dalam 64bit membutuhkan waktu 15.000 Ko / 14.9 MB). Alasan untuk itu adalah karena pengambilan sampel / presisi. Sebuah gim video tidak akan pernah menggunakan presisi ganda (64 bit) untuk piksel, gambar, data, dll ..., melainkan menggunakan presisi khusus yang lebih rendah (~ 4-8 bit) dan kadang-kadang kurang presisi yang diperbesar dengan teknik interpolasi untuk memungkinkan perhitungan yang masuk akal waktu.
Ada teknik lain juga seperti Memotong data (baik dengan standar OpenGL dan implementasi perangkat lunak), kompresi data, dll. Perlu diingat, bahwa GPU saat ini dapat> 300 kali lebih cepat dari CPU saat ini dalam hal kemampuan perangkat keras. Namun, programmer yang baik mungkin mendapatkan faktor 10-20x, kecuali masalah Anda sepenuhnya dioptimalkan dan sepenuhnya dapat diparalelkan (terutama tugas yang dapat diparalelkan).
Berdasarkan pengalaman, saya dapat memberi tahu Anda bahwa pengoptimalan seperti kurva eksponensial. Untuk mencapai kinerja optimal, waktu yang dibutuhkan mungkin sangat penting.
Jadi untuk kembali ke teko, Anda harus melihat bagaimana geometri diwakili, disampel dan dengan presisi apa yang dilihat di GTA 5, dalam hal geometri / tekstur dan yang paling penting, detailnya (presisi, pengambilan sampel, dll.)