คำแนะนำเกี่ยวกับไดรเวอร์อุปกรณ์จะเขียนโปรแกรม GPU อย่างไร


9

สมมติว่าฉันกำลังใช้คอมพิวเตอร์คอมพิวเตอร์สมัยใหม่ทั่วไปไม่มากก็น้อย ไดรเวอร์อุปกรณ์รับผิดชอบทุกอย่างที่ฉันเห็นบนหน้าจอของฉันรวมถึงทันทีที่ฉันพิมพ์หน้าจอนี้ได้รับการอัปเดต (แน่นอนอยู่ภายในขอบเขตของระบบปฏิบัติการเช่น Windows)

ให้เราลงไปถึงระดับที่ฮาร์ดแวร์ไม่สนใจว่ามีเคอร์เนลหรือไม่และเพียงแค่ใช้คำแนะนำ

โดยพื้นฐานแล้ว GPU รู้ได้อย่างไรว่าจะทำทุกอย่างได้อย่างไร คนขับสามารถควบคุมฟังก์ชั่นระดับวงจรภายในฮาร์ดแวร์หรือภายในจิ๋วทุกอย่างที่เป็นไปได้หรือจำเป็นหรือไม่ในการคำนวณข้อมูลไบนารี่สำหรับการแสดงผลโดยใช้คำแนะนำพิเศษที่คนขับให้

ถ้าเป็นเช่นนั้น GPU ใช้ภาษา "พิเศษ" หรือ "ชุดประกอบ" เพื่อทำความเข้าใจคำแนะนำที่ส่งไปให้เหมือนกับซีพียูหรือไม่?

ฉันมีช่องว่างมากเกินไปในความรู้ของฉันและมี "ความลึกลับ" อันไม่พึงประสงค์นี้อยู่เบื้องหลัง GPU และเข้าถึงพวกเขาโดยตรงผ่านฮาร์ดแวร์

ตัวอย่างเช่น GPU และ CPU จะต้องสามารถเชื่อมต่อได้ดังนั้นจึงเป็นไปได้ที่จะเข้าถึง GPU ผ่านชุดประกอบ CPU และใช้งานบัส / ที่อยู่ที่ถูกต้อง ไม่มีทางที่ผู้จำหน่ายอุปกรณ์สามารถเข้าถึง GPU นอกไดรเวอร์ได้เนื่องจากไดรเวอร์นั้นยังรวบรวมรหัสและ GPU ซึ่งเป็นวงจรที่ตั้งโปรแกรมได้จะต้องทำงานกับคำสั่งไบนารี

ฉันได้ถามคำถามประเภทนี้และพวกเขาถูกลบออกอย่างรุนแรงอย่างรวดเร็วโดยไม่มีคำตอบว่าทำไมในหลาย ๆ ไซต์ดังนั้นสิ่งลึกลับ / ความลับที่ยิ่งใหญ่ที่นี่คืออะไร มันเป็นชิ้นส่วนของฮาร์ดแวร์บนเมนบอร์ดที่เข้าถึงได้เหมือนกัน

ดังนั้น ... สมมติว่านี่เป็นคำถาม "โอเค" ที่นี่เกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ทุกคนสามารถเข้าถึง GPU ได้โดยตรงโดยไม่ต้องใช้ไฟล์เฉพาะของผู้ขายเพราะไฟล์ไม่ได้วิเศษ

ดังนั้น GPU จึง "ตั้งโปรแกรม" จากมุมมองของฮาร์ดแวร์โลหะเปลือยโดยตรงในระดับเฉพาะของฮาร์ดแวร์อย่างไร


ดูเหมือนว่าคำถาม "ตกลง" ในความคิดของฉัน (แม้ว่าจะซับซ้อนและอาจต้องการหนังสือตอบ - ซึ่งไม่ใช่รูปแบบที่ดีดังนั้นก่อนอื่นให้ดูศูนย์ช่วยเหลือและหน้าทัวร์เพื่อทำความคุ้นเคยกับคำถามประเภทใดที่คุณสามารถถามได้ที่นี่) .
Doktoro Reichard

ฉันไม่ได้อ่านศูนย์ช่วยเหลือ

ใจถ้าฉันถามว่าทำไมไม่
Doktoro Reichard

เพราะเวลาที่ดีกว่าสามารถใช้เวลาไตร่ตรองพยายามแก้ปัญหาและตอบคำถาม "ตกลง" ของฉันตามที่ตั้งไว้

และอย่างที่ฉันพูดเพื่อตอบคำถามนี้อย่างถูกต้องคุณอาจต้องการหนังสือ ... คำตอบที่ยาวมักไม่ใช่คำตอบที่ดี
Doktoro Reichard

คำตอบ:


8

โดยพื้นฐานแล้ว GPU รู้ได้อย่างไรว่าจะทำทุกอย่างได้อย่างไร คนขับสามารถควบคุมฟังก์ชั่นระดับวงจรภายในฮาร์ดแวร์หรือภายในจิ๋วทุกอย่างที่เป็นไปได้หรือจำเป็นหรือไม่ในการคำนวณข้อมูลไบนารี่สำหรับการแสดงผลโดยใช้คำแนะนำพิเศษที่คนขับให้

ไม่อุปกรณ์มีไอซีของตัวเองซึ่งควบคุมด้านฮาร์ดแวร์ระดับทั้งหมดของการทำงานของอุปกรณ์และเชื่อมต่อกับโปรเซสเซอร์กลางซึ่งประสานงานกับอุปกรณ์ต่าง ๆ รวมถึงมีอินเตอร์เฟสการเขียนโปรแกรมระดับสูงขึ้นซึ่งสามารถใช้งานได้ เพื่อเข้าถึงอ่านเขียนและควบคุมอุปกรณ์

ถ้าเป็นเช่นนั้น GPU ใช้ภาษา "พิเศษ" หรือ "ชุดประกอบ" เพื่อทำความเข้าใจคำแนะนำที่ส่งไปให้เหมือนกับซีพียูหรือไม่?

ใช่และไม่. เช่นเดียวกับอุปกรณ์ส่วนใหญ่การ์ดแสดงผลใช้มาตรฐานเพื่อลดความซับซ้อนของเรื่อง พวกเขาใช้มาตรฐานเช่นVESAเพื่อเข้าถึงฟังก์ชั่นปกติเช่นวิดีโอบูตเวลาหรือCUDAเพื่อเข้าถึงฟังก์ชั่นการเขียนโปรแกรม GPU นอกจากนี้โปรแกรมสามารถเข้าถึงฟังก์ชั่นที่ไม่ได้มาตรฐานหรือขึ้นอยู่กับอุปกรณ์โดยตรงโดยใช้รหัสเครื่อง (บ่อยครั้งที่ C คอมไพล์ไปยังแอสเซมเบลอร์) ร่วมกับเอกสารประกอบการเขียนโปรแกรมของอุปกรณ์

ฉันมีช่องว่างมากเกินไปในความรู้ของฉันและมี "ความลึกลับ" อันไม่พึงประสงค์นี้อยู่เบื้องหลัง GPU และเข้าถึงพวกเขาโดยตรงผ่านฮาร์ดแวร์

ไดรเวอร์เข้าถึงอุปกรณ์โดยตรงซึ่งเป็นสาเหตุที่พวกเขามีการเข้าถึงพิเศษ (โปรแกรมระดับผู้ใช้ทั่วไปไม่ได้รับอนุญาตให้เข้าถึงฮาร์ดแวร์โดยตรงใน Vista + เพื่อเหตุผลด้านความปลอดภัยและเสถียรภาพ) การเข้าถึงอุปกรณ์ที่ใช้พอร์ต, DMA ( เข้าถึงหน่วยความจำโดยตรง ) และหน่วยความจำการทำแผนที่

ตัวอย่างเช่น GPU และ CPU จะต้องสามารถเชื่อมต่อได้ดังนั้นจึงเป็นไปได้ที่จะเข้าถึง GPU ผ่านชุดประกอบ CPU และใช้งานบัส / ที่อยู่ที่ถูกต้อง ไม่มีทางที่ผู้จำหน่ายอุปกรณ์สามารถเข้าถึง GPU นอกไดรเวอร์ได้เนื่องจากไดรเวอร์นั้นยังรวบรวมรหัสและ GPU ซึ่งเป็นวงจรที่ตั้งโปรแกรมได้จะต้องทำงานกับคำสั่งไบนารี

ไดรเวอร์สามารถอ่านและเขียนอุปกรณ์ด้วยคำสั่ง CPU ปกติโดยการเข้าถึงพอร์ตหน่วยความจำที่แมปและเช่นนั้น เป็นตัวอย่างที่เข้าใจง่ายคุณสามารถใส่ตัวอักษรบนหน้าจอในโหมดข้อความโดยการเขียนไปที่ "หน่วยความจำ" ที่อยู่ B8000 ที่อยู่นี้ไม่ใช่ RAM แต่ถูกแมปเพื่อสอดคล้องกับหน่วยความจำของการ์ดแสดงผลดังนั้นการเขียนลงในนั้นจะเขียนลงบนหน้าจอ ในทำนองเดียวกันคุณสามารถเขียนหน้าจอ tothe โดยใส่ตัวอักษรที่คุณต้องการที่จะเขียนในALสตรี0x09ในการลงทะเบียนแล้วเรียกขัดจังหวะไบออสAH 0x10ฟังก์ชั่นขั้นสูงเพิ่มเติมไม่แตกต่างกัน คุณสามารถอ่านและเขียนหน่วยความจำของอะแดปเตอร์เรียกใช้ฟังก์ชั่นบนชิปของมันและอื่น ๆ โดยใช้สิ่งที่ inetrface (s) อุปกรณ์ที่ exposes และเอกสาร

ดังนั้น ... สมมติว่านี่เป็นคำถาม "โอเค" ที่นี่เกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ทุกคนสามารถเข้าถึง GPU ได้โดยตรงโดยไม่ต้องใช้ไฟล์เฉพาะของผู้ขายเพราะไฟล์ไม่ได้วิเศษ

สำหรับคุณสมบัติที่เป็นไปตามมาตรฐานเท่านั้น แต่ทุกอย่าง (เช่นสิ่งที่สูงกว่า) คุณจะต้องศึกษาเอกสารการเขียนโปรแกรมของผู้ผลิต

ดังนั้น GPU จึง "ตั้งโปรแกรม" จากมุมมองของฮาร์ดแวร์โลหะเปลือยโดยตรงในระดับเฉพาะของฮาร์ดแวร์อย่างไร

ผ่านหลายเลเยอร์:

  1. ส่วนประกอบโซลิดสเตตเช่นทรานซิสเตอร์และเช่น
  2. ASICระดับต่ำ
  3. โปรเซสเซอร์ออนบอร์ดและชิปเซ็ต
  4. อินเตอร์เฟสการเขียนโปรแกรมระดับต่ำ (ชุดประกอบ)
  5. อินเตอร์เฟสการเขียนโปรแกรมระดับสูงกว่า (DirectX, OpenGL)
  6. ภาษาโปรแกรมระดับสูง (C ++, C #, Python, ฯลฯ )

1
หมายเหตุเกี่ยวกับ 'โลหะเปลือย'; ในกรณีที่คุณได้ยินเกม dev ส่วนใหญ่พูดถึงพวกเขากำลังบ่นว่าพวกเขาต้องใช้ abstractions ระดับสูงเช่น DirectX / OpenGL มากกว่าการเขียนโค้ดที่รวบรวมกับเครื่องของตัวเอง ดูที่นี่สำหรับข้อมูลเกี่ยวกับแอสเซมเบลอร์ langague ที่ใช้โดย FERMI GPUs ของ Nvidia code.google.com/p/asfermiของ Nvidia ว่าแม้ CUDA จะอยู่บนยอด langague ระดับสูง (PTX) ที่ได้รับการรวบรวมเป็นรหัสเครื่องดังนั้น opcoodes ที่คุณเขียนโปรแกรมใน CUDA ไม่เหมือนกับเอาต์พุตที่คอมไพล์
Frank Thomas

เฮ้คุณอาจมีข้อเสนอแนะหนังสือที่ดีสำหรับนักศึกษาที่ครอบคลุมสิ่งที่คุณพูดถึงในโพสต์นี้หรือไม่? ฉันไม่สนใจที่จะทำงานในการเขียนโปรแกรม GPU แต่ช่องว่างในความเข้าใจของฉันเกี่ยวกับวิธีการทำงานทั้งหมดเป็นที่น่าผิดหวัง
lanza

2

ฉันไม่ได้เป็นอัจฉริยะในสถาปัตยกรรมคอมพิวเตอร์ แต่ฉันจะพยายามตอบคำถามของคุณตามจุดที่ดีที่สุดของความรู้ของฉัน


ไดรเวอร์อุปกรณ์รับผิดชอบทุกอย่างที่ฉันเห็นบนหน้าจอของฉันรวมถึงทันทีที่ฉันพิมพ์หน้าจอนี้ได้รับการอัปเดต (แน่นอนอยู่ภายในขอบเขตของระบบปฏิบัติการเช่น Windows)

มันเป็นความจริงส่วนใหญ่เป็นเพราะการมีปฏิสัมพันธ์โดยตรงกับ GPU ไม่ใช่เรื่องง่ายที่จะใช้ ดังนั้นการพัฒนากรอบกราฟิกเช่น DirectX และ OpenGL

คำจำกัดความที่มีประโยชน์นี้จากWikipediaอธิบายรายละเอียดนี้เพิ่มเติม

ไดรเวอร์อุปกรณ์ทำให้การเขียนโปรแกรมง่ายขึ้นโดยทำหน้าที่เป็นผู้แปลระหว่างอุปกรณ์ฮาร์ดแวร์กับแอพพลิเคชั่นหรือระบบปฏิบัติการที่ใช้ โปรแกรมเมอร์สามารถเขียนโค้ดแอปพลิเคชั่นระดับสูงขึ้นโดยไม่ขึ้นกับฮาร์ดแวร์เฉพาะที่ผู้ใช้ปลายทางใช้


โดยพื้นฐานแล้ว GPU รู้ได้อย่างไรว่าจะทำทุกอย่างได้อย่างไร คนขับสามารถควบคุมฟังก์ชั่นระดับวงจรภายในฮาร์ดแวร์หรือภายในจิ๋วทุกอย่างที่เป็นไปได้หรือจำเป็นหรือไม่ในการคำนวณข้อมูลไบนารี่สำหรับการแสดงผลโดยใช้คำแนะนำพิเศษที่คนขับให้

GPU เป็นไมโครโปรเซสเซอร์ เช่นนี้พวกเขาดำเนินการ พวกเขาประมวลผลข้อมูลที่ถูกป้อนจาก CPU (เช่นตำแหน่งขององค์ประกอบ) ไปยังจอแสดงผลที่เหมาะสม พวกเขา "รู้" ว่าจะทำอย่างไรทุกอย่างเพราะพวกเขาผลิตขึ้นมาและคนกลุ่มใหญ่ตกลงกันในวิธีที่เหมาะสมในการส่งข้อมูลไปและกลับจาก GPU

คิดว่าไดรเวอร์จอแสดงผลเป็นบัฟเฟอร์หรือพร็อกซี ลองนึกภาพคุณเป็นหน้าต่างโปรแกรมและผู้ใช้เลื่อนคุณขึ้น คุณขอให้ GPU รีเฟรชหน้าจอ แต่เมื่อ GPU พูดKlingonและคุณพูดVulcanผู้ขับขี่จะได้รับคำสั่งของคุณแปลมันเป็น GPU ที่จะทำตามที่คุณสั่ง

ถ้าเป็นเช่นนั้น GPU ใช้ภาษา "พิเศษ" หรือ "ชุดประกอบ" เพื่อทำความเข้าใจคำแนะนำที่ส่งไปให้เหมือนกับซีพียูหรือไม่?


จากWikipedia :

ภาษาแอสเซมบลี ARB เป็นภาษาแรเงาระดับต่ำซึ่งสามารถกำหนดเป็นภาษาแอสเซมบลี มันถูกสร้างขึ้นโดย OpenGL Architecture Review Board (ARB) เพื่อสร้างมาตรฐานคำสั่ง GPU ในการควบคุมระบบกราฟิกของฮาร์ดแวร์

มีตัวอย่างนี้และจำไว้ว่าผู้ผลิตรายบุคคล (NVIDIA, ATI) มีชุดคำสั่งของตนเอง

นอกจากนี้ยังมีOpenCLและวิธีอื่น ๆ อีกมากมายในการแนะนำวิธีการตั้งโปรแกรมไปยัง GPU โดยตรง

ทั้งหมดนี้ควรตอบคำถามของคุณในระดับหนึ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.