Bagaimana pemutaran video dilakukan di komputer? Ini jelas tidak bergantung sepenuhnya pada CPU, karena pemutaran video berlanjut ketika pengguna melakukan aktivitas lain, seperti mengetik di kolom komentar YouTube. Tugas ini tampaknya lebih rumit dalam hal streaming video, di mana data mungkin perlu ditransfer dari antarmuka jaringan ke pengontrol video / grafik.
EDIT: Saya seharusnya menjelaskan bahwa saya mengerti bahwa CPU berganti-ganti di antara banyak proses dan utas sepanjang waktu. Pertanyaan saya seharusnya lebih spesifik tentang pemutaran video. Apakah pemrosesan video dilakukan pada chipset grafis / kartu? Apakah itu biasanya menawarkan buffering? Atau dapatkah semuanya ditangani oleh CPU single-core dengan waktu luang untuk tugas-tugas lain, atau apakah saya salah berpikir bahwa CPU low-end dapat memutar video tanpa penundaan (bukan jaringan)?
sumber
Jawaban:
Kartu grafis modern berfungsi kurang lebih (agak) sama dengan cpu biasa.
Pada kartu grafis, Anda akan memiliki (kadang-kadang) beberapa prosesor, setiap prosesor akan memiliki (kadang-kadang) beberapa multiprosesor, yang masing-masing memiliki beberapa inti.
Ketika video dimuat ke dalam kartu grafis, ia akan ditranskode ke buffer output dengan alokasi inti multiprosesor tertentu. Buffer output ini umumnya adalah memori yang dapat diakses secara global, yang berarti bahwa setiap inti dari multi-prosesor dari setidaknya satu prosesor (tetapi seringkali semua) memiliki akses r / w langsung ke sana.
Biasanya satu multiprosesor terbatas pada satu set instruksi, yang berarti bahwa kartu grafis hanya dapat secara bersamaan mengoperasikan banyak "rasa" benang yang berbeda karena ada multiprosesor pada kartu. "Rasa" misalnya dapat berupa simulasi fisika, render video, render OS, atau fungsi kriptografi. Secara alami satu multiprosesor dapat menjadwalkan beberapa jenis utas untuk berjalan sebentar-sebentar, tetapi ini biasanya tidak perlu.
Mendekodekan sebuah video sering kali banyak pekerjaan, mengingat bagaimana biasanya dikompresi dan kadang-kadang dienkripsi, sehingga pembuat tampilan tidak selalu sibuk. Dengan demikian, relatif mudah untuk membuat kursor mouse yang bergerak di atas bingkai video. Namun, terkadang ini tidak cukup berhasil, dan Anda akan melihat bagaimana dalam beberapa aplikasi kursor Anda menghilang. Ini belum tentu karena aplikasi "di atas" dari os, tetapi hanya karena memonopoli bagian dari buffer output.
sumber
Ini diimplementasikan menggunakan beberapa teknik yang berbeda. Di dalam aplikasi (misalnya, browser web), program dapat mengeksekusi berbagai utas eksekusi. Satu utas dapat melakukan streaming / pemutaran video, sementara utas lain dapat menangani pengguna mengetik di kolom komentar.
Utas ini, bersama dengan banyak utas dan proses lainnya, pada gilirannya dijadwalkan oleh sistem operasi (bahkan jika Anda hanya memiliki browser web terbuka, sistem operasi memiliki banyak tugas latar belakang berjalan, seperti manajer windowing, spooler cetak, Manajer perangkat USB, dll). Ini adalah tugas penjadwal OS untuk menentukan utas mana yang dapat berjalan aktif, pada inti prosesor mana, dan untuk berapa lama. Dalam sistem tipikal, utas dapat berjalan hingga beberapa nilai ambang, misalkan 100 milidetik, sebelum penjadwal memungkinkan tugas lain dijalankan.
Peralihan tugas ini penting untuk semua sistem operasi modern (Windows, Linux, UNIX, dll), dan biasanya merupakan bagian penting dari kursus sistem operasi sarjana.
sumber
Pemutaran video tidak spesial. Tentu saja, decoding akselerasi GPU adalah umum akhir-akhir ini, yang membebaskan CPU untuk pekerjaan lain, tetapi tidak selalu demikian. Pemutaran video yang lancar dengan hanya satu CPU pasti dimungkinkan, selama ada cukup CPU yang tersedia untuk resolusi dan kompleksitas algoritma kompresi, dan melakukannya bersama dengan tugas-tugas lain adalah sama mungkin, selama ada cukup CPU untuk keduanya, dan jadwal OS dengan baik. Video 30fps adalah umum, yang memungkinkan 33ms untuk memecahkan kode setiap frame. Bahkan chip yang cukup lama dapat mengaturnya untuk MPEG-2 berkualitas SD, dan chip modern dapat mengaturnya untuk HD MPEG-4; laptop yang saya ketikkan ini membutuhkan sekitar 20% dari CPU untuk pemutaran 720p High Profile AVC.
Adapun buffering, ada jumlah terbatas yang tersedia. Minimum untuk apa pun yang tidak ingin merobek layar adalah "penyangga ganda", di mana ada dua frame dalam memori: kartu video menampilkan satu sementara perangkat lunak memperbarui yang lain, dan peran keduanya dipertukarkan selama vertikal menyegarkan. Dengan "triple buffering", ada dua bingkai layar, + 1 berikutnya dan berikutnya, yang mengurangi jumlah jitter. Pada kartu modern dengan RAM dalam jumlah besar, dimungkinkan untuk melampaui jumlah frame yang lebih besar, dengan satu-satunya kelemahan adalah latensi yang terlihat oleh pengguna dalam mencari, memulai pemutaran, dll. Dan kenyataan bahwa aplikasi lain mungkin menginginkan RAM video itu sendiri .
sumber