Bagaimana CPU berkomunikasi dengan GPU sebelum driver dimuat? [duplikat]

24

Seperti yang saya pahami, GPU memiliki set instruksi mereka sendiri, yang instruksinya dihasilkan oleh driver grafis. Instruksi GPU kemudian dikirim ke GPU. Jadi, bagaimana cara kerja komunikasi grafis sebelum driver dimuat? Apakah ada beberapa instruksi dasar yang harus diterapkan GPU sebagai minimum untuk memastikan bahwa komputer dapat melakukan tugas-tugas tampilan dasar?

VortixDev
sumber

Jawaban:

34

"Apakah ada beberapa instruksi dasar ...?" Ya persis. Semua GPU diharuskan untuk mengimplementasikan salah satu dari beberapa antarmuka sederhana - mereka terlalu primitif untuk disebut "set instruksi" - yang mana firmware platform ("BIOS" atau "UEFI") dan driver yang disertakan dengan OS tahu cara berbicara dengan . Pilihan biasa "antarmuka sederhana" hari ini adalah "VGA" ("Video Graphics Array"), antarmuka tingkat register yang awalnya ditentukan untuk kartu video standar itu. (Sekarang berusia 30 tahun ke atas!)

Misalnya, jika Pengelola Perangkat pada sistem Windows ID kartu grafis sebagai "Microsoft Basic Video Adapter", OS tidak dapat menemukan driver spesifik untuk kartu dan sebaliknya telah memuat driver yang kompatibel dengan VGA.

Nah, secara teknis, Windows selalu memuat driver itu (sehingga dapat menampilkan misalnya layar progress boot), kemudian (cukup terlambat boot) mengidentifikasi dan memuat driver "nyata" untuk kartu grafis Anda.

Standar VGA hanya mendukung beberapa mode grafis beresolusi rendah dan mode teks, dan tidak melibatkan apa yang saya sebut "menjalankan program" atau bahkan "instruksi" pada GPU. Intinya, firmware sistem atau "driver video dasar" hanya memasukkannya ke mode yang diinginkan dan kemudian menulis bit ke bitmap; bit dalam bitmap secara langsung sesuai dengan piksel pada layar. Setiap aritmatika yang harus dilakukan untuk menggambar garis atau kurva dilakukan dalam CPU. Yang merupakan cara tingkat sangat rendah dan lambat untuk membuat barang muncul di layar. Tapi itu cukup untuk tampilan dari, dan interaksi sederhana dengan, firmware, untuk instalasi OS dan layar boot-progres awal, dll.

Wikipedia: Video Graphics Array

Jamie Hanrahan
sumber
1
Situasi penuhnya rumit. Kartu "VGA" pertama memang terbatas. Untuk waktu yang lama Windows NT membutuhkan dukungan untuk 800x600, tetapi ya, hanya 16 warna. Itu terlihat sangat mengerikan! Lihat artikel Wikipedia yang saya tautkan.
Jamie Hanrahan
9
Windows lebih mungkin menggunakan VESA BIOS Extentions (VBE) untuk adaptor dasarnya. VBE cukup banyak didukung dan memungkinkan untuk warna 16-24 bit dan hingga 1600x1200 piksel.
8bittree
3
Ini bukan ekstensi VESA BIOS, karena Windows tidak meminta kode BIOS / UEFI untuk apa pun setelah tahap bootstrap yang paling awal selesai.
Jamie Hanrahan
2
Saya telah melihat beberapa komputer, termasuk laptop saya, di mana "titik-titik berputar" layar boot Windows memulai resolusi sangat rendah (320x200, saya akan mengatakan, mode 256-warna VGA) dan kemudian dengan cepat beralih ke resolusi yang lebih tinggi.
Artelius
1
Bahkan 800x600 pada 16 warna berada di luar kemampuan VGA. VGA maksimal pada 640x480 16 warna. Namun, produsen chip grafis melampaui ini dan akan menambahkan "SuperVGA" alias mode SVGA yang akan meningkatkan warna dan resolusi, sementara juga memiliki mode eksklusif mereka sendiri. VESA datang untuk cara standar untuk mengakses mode-mode berpemilik tersebut, tetapi ini adalah sekitar waktu PC mulai didorong oleh GUI, dan dengan demikian driver merupakan pilihan yang baik. Itu juga ketika akselerasi 3D mulai ditambahkan. Jadi, sementara sebagian besar kartu menjadi VESA kompatibel, tidak ada yang membicarakannya.
trlkly
16

Saya akan mencoba menjernihkan "voodoo" di balik semua ini, dengan menjelaskan cara kerja perangkat keras lama. GPU modern tidak berfungsi seperti ini tetapi mereka meniru antarmuka CPU-ke-kartu grafis.

tl; dr

Chip / kartu grafis pada tahun 80-an dan awal 90-an harus menghasilkan output dengan sangat cepat (relatif terhadap kecepatan clock) sehingga mereka tidak menjalankan instruksi, tetapi lebih memilih memperbaiki sirkuit. Mereka hanya menyedot data dari RAM ketika mereka pergi, jadi CPU hanya perlu membuang data dalam RAM di tempat yang tepat, dan chip grafis akan mengambilnya dan melemparkannya di layar. CPU juga dapat mengatur berbagai variabel konfigurasi pada chip grafis.

Detail:

Pada tahun 80-an, komputer rumahan memiliki chip grafis yang benar-benar "bodoh" yang memiliki beberapa perilaku tetap. Akan lebih masuk akal jika saya melalui pipa mundur.

Monitor CRT

Monitor ini membutuhkan input analog. Dengan kata lain, tegangan lebih tinggi = output yang lebih cerah. Monitor warna memiliki 3 saluran (Merah, Hijau dan Biru (atau, mis. YUV atau YIQ ) ). Tegangan ini menyesuaikan kekuatan berkas elektron. Hal-hal sederhana.

Monitor CRT secara harfiah menggunakan elektromagnet untuk membelokkan berkas elektron dari kiri ke kanan, kemudian mulai lagi sedikit lebih rendah dan belok kiri ke kanan, dan seterusnya dari atas ke bawah. Kemudian kembali ke atas dan ulangi.

DAC

Chip grafis memiliki konverter "digital to analog" ( komponen listrik yang sangat umum ). Ini mengubah nilai digital (mis. 2, 4, atau 8 bit) menjadi tegangan yang dapat disuplai ke monitor.

Memindai

Chip grafis harus "mengikuti" dengan berkas elektron, mengirimkan nilai yang tepat ke DAC sehingga dapat menghasilkan tegangan yang sesuai pada waktu yang tepat. (Jam digunakan untuk hal ini yang tidak akan saya bahas.) Tidak ada waktu untuk melaksanakan instruksi di sini. Semuanya terprogram dan mengambil sejumlah kecil siklus clock.

Mode video

Chip awal tidak terlalu cepat dan memiliki RAM terbatas. Karena itu, mereka cenderung memungkinkan pemilihan berbagai mode dan parameter konfigurasi lainnya, misalnya warna latar belakang, pemilihan font, lokasi dan ukuran kursor, pemilihan palet, dan sprite. Sebagian besar menawarkan mode "hanya karakter" resolusi tinggi, dan mode piksel demi piksel beresolusi lebih rendah.

Tiga mode VGA yang patut diperhatikan adalah:

  • 16 (ish) warna 80x25 mode teks (ini pada dasarnya seperti apa layar memuat BIOS)
  • 16 warna mode resolusi tinggi 640x480
  • 256-warna 320x200 mode warna-tinggi

Lukisan piksel

Sangat kasar, tergantung pada sistem grafis, pipeline terlihat seperti ini:

Lokasi piksel saat ini ⇒ Karakter proses / font / sprite / piksel / data konfigurasi ⇒ Nilai piksel ⇒ Palet ⇒ DAC

Ini adalah langkah ke-2 yang perlu dibaca dari beberapa lokasi RAM. Misalnya, dalam Mode Teks, karakter 1-byte akan dicari. Ini akan membentuk indeks ke dalam tabel font. Sedikit akan dilihat dari tabel ini, menunjukkan apakah piksel itu harus menjadi warna latar depan atau latar belakang. Byte ketiga akan diambil untuk mendapatkan warna foreground / background. Secara keseluruhan, 3 byte dibaca dari RAM.

Tapi "aliran" ini cukup banyak rangkaian sirkuit tetap sederhana yang diatur persis seperti, yah, aliran yang baru saja dijelaskan.

Antarmuka bus memori

CPU Intel memiliki benda peninggalan yang menjengkelkan ini yang disebut bus IO tetapi tidak penting jadi saya akan berpura-pura tidak ada di sana.

CPU mengakses RAM dengan menyiarkan permintaan READ atau WRITE, dan alamat, pada bus memori. Meskipun sebagian besar alamat yang valid mendapatkan respons dari RAM, rentang tertentu ditangani oleh perangkat sebagai gantinya. Misalnya, MEMBACA dari alamat tertentu mungkin memberi Anda informasi tentang penekanan tombol keyboard.

Dengan menulis ke bagian kanan dari "rentang grafik", Anda dapat menulis konten layar, dan juga mengatur parameter konfigurasi kartu grafis. Chip grafis "bisu" tidak menjalankan instruksi apa pun. Itu hanya terus berjalan lamban, memiliki beberapa byte yang mengalir melalui sirkuit dan menghasilkan tegangan.

Dengan VGA, sebenarnya ada RAM pada kartu grafis, karena Anda dapat mengkonfigurasi kartu grafis untuk data pra-diproses sebelum ditulis ke RAM grafis, untuk meningkatkan kinerja dalam beberapa situasi.

VESA

Kartu grafis setelah VGA menawarkan resolusi yang lebih tinggi dan kedalaman warna yang baik tetapi bekerja dengan prinsip yang sama. Banyak kartu grafis modern masih menyediakan kompatibilitas dengan ini untuk memungkinkan resolusi yang lebih tinggi selama booting. Tetapi VGA adalah yang "sangat mudah" yang bisa ditiru setiap kartu.

Artelius
sumber