Làm thế nào để hướng dẫn trình điều khiển thiết bị lập trình GPU?


9

Nói rằng tôi đang sử dụng máy tính, bất kỳ máy tính hiện đại điển hình nào nhiều hay ít. Trình điều khiển thiết bị chịu trách nhiệm cho tất cả mọi thứ tôi thấy trên màn hình của mình, bao gồm cả quyền khi tôi nhập màn hình này được cập nhật (tất nhiên, đây là trong phạm vi của một hệ điều hành, như Windows).

Chúng ta hãy đưa nó xuống mức độ mà phần cứng không quan tâm nếu có kernel hay không, và chỉ cần thực hiện các hướng dẫn.

Về cơ bản, làm thế nào để GPU "biết" chính xác làm thế nào để làm mọi thứ? Trình điều khiển về cơ bản có thể kiểm soát mọi chức năng cấp độ mạch nhỏ, nội tại hoặc phần cứng có thể hoặc cần thiết để tính toán dữ liệu nhị phân để hiển thị bằng các hướng dẫn đặc biệt mà trình điều khiển cung cấp không?

Nếu vậy, GPU có sử dụng ngôn ngữ "đặc biệt" hoặc "lắp ráp" để hiểu các hướng dẫn được gửi tới nó giống như CPU ​​không?

Tôi có quá nhiều lỗ hổng trong kiến ​​thức của mình và có "bí ẩn" khó chịu đằng sau GPU và truy cập chúng trực tiếp qua phần cứng.

Ví dụ, GPU và CPU phải có khả năng kết nối bằng cách nào đó, vì vậy có thể truy cập GPU thông qua lắp ráp CPU và thực hiện các bus dữ liệu / địa chỉ chính xác. Không có cách nào nhà cung cấp thiết bị có thể làm cho không thể truy cập GPU bên ngoài trình điều khiển, bởi vì trình điều khiển cũng được biên dịch mã và GPU, như một mạch lập trình, phải hoạt động với các lệnh nhị phân.

Tôi đã hỏi những loại câu hỏi này và chúng bị xóa một cách dữ dội nhanh chóng mà không có câu trả lời tại sao trên nhiều trang web, vậy bí mật / bí mật lớn ở đây là gì? Đó là một phần cứng trên bo mạch chủ được truy cập như bất kỳ phần mềm nào khác.

Vì vậy, thực sự ... giả sử đây là một câu hỏi "ok" ở đây liên quan đến phần mềm và phần cứng, bất kỳ ai cũng có thể truy cập trực tiếp vào GPU mà không cần các tệp cụ thể của nhà cung cấp, vì các tệp này không phải là phép thuật.

Vậy làm thế nào các GPU được "lập trình" từ quan điểm phần cứng trực tiếp, kim loại ở mức độ cụ thể của phần cứng?


Một câu hỏi "OK" có vẻ như theo ý kiến ​​của tôi (mặc dù đã bị xáo trộn và có thể cần một cuốn sách để trả lời - đó không phải là một định dạng tốt, vì vậy trước tiên hãy xem trung tâm trợ giúp và các trang tham quan để làm quen với loại câu hỏi bạn có thể hỏi ở đây) .
Doktoro Reichard

Tôi không đọc trung tâm trợ giúp.

Có phiền nếu tôi hỏi tại sao không?
Doktoro Reichard

Bởi vì thời gian tốt hơn có thể được dành để suy ngẫm, cố gắng giải quyết và trả lời câu hỏi "OK" của tôi khi nó đứng.

Và như tôi đã nói, để trả lời đúng câu hỏi này, có lẽ bạn sẽ cần một cuốn sách ... câu trả lời dài thường không phải là câu trả lời hay.
Doktoro Reichard

Câu trả lời:


8

Về cơ bản, làm thế nào để GPU "biết" chính xác làm thế nào để làm mọi thứ? Trình điều khiển về cơ bản có thể kiểm soát mọi chức năng cấp độ mạch nhỏ, nội tại hoặc phần cứng có thể hoặc cần thiết để tính toán dữ liệu nhị phân để hiển thị bằng các hướng dẫn đặc biệt mà trình điều khiển cung cấp không?

Không, thiết bị có các IC riêng điều khiển tất cả các khía cạnh cấp độ phần cứng của chức năng của thiết bị và chúng giao tiếp với bộ xử lý trung tâm điều phối các khía cạnh trên thiết bị cũng như cung cấp giao diện lập trình cấp cao hơn có thể được sử dụng để truy cập, đọc từ, ghi vào và điều khiển thiết bị.

Nếu vậy, GPU có sử dụng ngôn ngữ "đặc biệt" hoặc "lắp ráp" để hiểu các hướng dẫn được gửi tới nó giống như CPU ​​không?

Có và không. Giống như hầu hết các thiết bị, thẻ video sử dụng các tiêu chuẩn để đơn giản hóa các vấn đề. Họ sử dụng các tiêu chuẩn như VESA để truy cập các chức năng thông thường như video thời gian khởi động hoặc CUDA để truy cập các chức năng lập trình GPU. Ngoài ra, các chương trình có thể truy cập trực tiếp vào các chức năng không theo tiêu chuẩn hoặc phụ thuộc vào thiết bị bằng mã máy (thường được biên dịch C cho trình biên dịch) kết hợp với các tài liệu lập trình của thiết bị (có sẵn từ trang web của bộ điều hợp).

Tôi có quá nhiều lỗ hổng trong kiến ​​thức của mình và có "bí ẩn" khó chịu đằng sau GPU và truy cập chúng trực tiếp qua phần cứng.

Trình điều khiển truy cập trực tiếp vào thiết bị, đó là lý do tại sao họ có quyền truy cập đặc biệt (các chương trình cấp người dùng thông thường không được phép truy cập trực tiếp vào phần cứng trong Vista + vì lý do bảo mật và ổn định). Truy cập thiết bị bằng các cổng, DMA ( Truy cập bộ nhớ trực tiếp ) và ánh xạ bộ nhớ .

Ví dụ, GPU và CPU phải có khả năng kết nối bằng cách nào đó, vì vậy có thể truy cập GPU thông qua lắp ráp CPU và thực hiện các bus dữ liệu / địa chỉ chính xác. Không có cách nào nhà cung cấp thiết bị có thể làm cho không thể truy cập GPU bên ngoài trình điều khiển, bởi vì trình điều khiển cũng được biên dịch mã và GPU, như một mạch lập trình, phải hoạt động với các lệnh nhị phân.

Trình điều khiển có thể đọc và ghi thiết bị với các hướng dẫn CPU thông thường bằng cách truy cập các cổng được ánh xạ bộ nhớ và như vậy. Là một ví dụ dễ hiểu, bạn có thể đặt một ký tự trên màn hình ở chế độ văn bản bằng cách viết vào bộ nhớ trong bộ nhớ địa chỉ B8000. Địa chỉ này không phải là RAM, mà đúng hơn, nó được ánh xạ để tương ứng với bộ nhớ của card màn hình, do đó, ghi vào nó sẽ ghi lên màn hình. Tương tự như vậy, bạn có thể viết màn hình bằng cách đặt ký tự bạn muốn viết vào ALsổ đăng ký, 0x09vào AHsổ đăng ký và sau đó gọi ngắt BIOS 0x10. Các chức năng nâng cao hơn không khác nhau; bạn có thể đọc và ghi bộ nhớ của bộ điều hợp, gọi các chức năng trên chip của nó, v.v. bằng cách sử dụng bất cứ thứ gì inetrface mà thiết bị phơi bày và tài liệu.

Vì vậy, thực sự ... giả sử đây là một câu hỏi "ok" ở đây liên quan đến phần mềm và phần cứng, bất kỳ ai cũng có thể truy cập trực tiếp vào GPU mà không cần các tệp cụ thể của nhà cung cấp, vì các tệp này không phải là phép thuật.

Chỉ dành cho các tính năng tuân thủ các tiêu chuẩn, nhưng mọi thứ khác (nghĩa là những thứ cao cấp hơn), bạn sẽ cần tham khảo tài liệu lập trình của nhà sản xuất.

Vậy làm thế nào các GPU được "lập trình" từ quan điểm phần cứng trực tiếp, kim loại ở mức độ cụ thể của phần cứng?

Thông qua nhiều lớp:

  1. Các thành phần trạng thái rắn như bóng bán dẫn và như vậy
  2. ASIC cấp thấp
  3. Bộ xử lý trên bo mạch và chipset
  4. Giao diện lập trình cấp thấp (lắp ráp)
  5. Giao diện lập trình cấp cao hơn (DirectX, OpenGL)
  6. Ngôn ngữ lập trình cấp cao (C ++, C #, Python, v.v.)

1
lưu ý về 'kim loại trần'; trong trường hợp bạn nghe thấy hầu hết các nhà phát triển trò chơi, họ phàn nàn rằng họ phải sử dụng các bản tóm tắt cấp cao như DirectX / OpenGL thay vì viết mã biên dịch vào langague của máy. xem tại đây để biết thông tin về langague trình biên dịch được sử dụng bởi GPU FERMI của Nvidia code.google.com/p/asfermi lưu ý rằng ngay cả CUDA cũng nằm trên một langague cấp cao (PTX) được biên dịch thành mã máy, vì vậy các chương trình bạn có thể lập trình trong CUDA không giống như đầu ra được biên dịch.
Frank Thomas

Này, bạn có thể có một gợi ý cuốn sách hay phù hợp với một sinh viên đại học bao gồm những điều bạn đã nói trong bài này không? Tôi không quan tâm đến việc từng làm việc trong lập trình GPU, nhưng những lỗ hổng trong cách hiểu của tôi về cách tất cả hoạt động thật là bực bội.
lanza

2

Tôi không hẳn là một thiên tài về kiến ​​trúc máy tính, nhưng tôi sẽ cố gắng xử lý câu hỏi của bạn theo điểm, theo sự hiểu biết tốt nhất của tôi.


Trình điều khiển thiết bị chịu trách nhiệm cho tất cả mọi thứ tôi thấy trên màn hình của mình, bao gồm cả quyền khi tôi nhập màn hình này được cập nhật (tất nhiên, đây là trong phạm vi của một hệ điều hành, như Windows).

Đó là sự thật, chủ yếu là do tương tác trực tiếp với GPU không dễ thực hiện. Do đó, việc phát triển các khung đồ họa như DirectX và OpenGL.

Định nghĩa tiện dụng này từ Wikipedia giải thích điều này chi tiết hơn:

Trình điều khiển thiết bị đơn giản hóa việc lập trình bằng cách đóng vai trò là người dịch giữa thiết bị phần cứng và các ứng dụng hoặc hệ điều hành sử dụng nó. Các lập trình viên có thể viết mã ứng dụng cấp cao hơn một cách độc lập với bất kỳ phần cứng cụ thể nào mà người dùng cuối đang sử dụng.


Về cơ bản, làm thế nào để GPU "biết" chính xác làm thế nào để làm mọi thứ? Trình điều khiển về cơ bản có thể kiểm soát mọi chức năng cấp độ mạch nhỏ, nội tại hoặc phần cứng có thể hoặc cần thiết để tính toán dữ liệu nhị phân để hiển thị bằng các hướng dẫn đặc biệt mà trình điều khiển cung cấp không?

GPU là bộ vi xử lý. Như vậy, họ xử lý. Họ xử lý dữ liệu được cung cấp từ CPU (tức là vị trí của các phần tử) để hiển thị đúng. Họ "biết" cách làm mọi thứ vì chúng được sản xuất theo cách đó một nhóm lớn người đã đồng ý về các cách thích hợp để gửi dữ liệu đến và từ GPU.

Hãy nghĩ về trình điều khiển hiển thị như một bộ đệm hoặc proxy. Hãy tưởng tượng bạn là một cửa sổ chương trình và người dùng sẽ đưa bạn lên. Bạn yêu cầu GPU làm mới màn hình. Nhưng khi GPU nói Klingon và bạn nói Vulcan , trình điều khiển sẽ nhận lệnh của bạn, dịch nó sang GPU, lần lượt thực hiện những gì bạn đã ra lệnh.

Nếu vậy, GPU có sử dụng ngôn ngữ "đặc biệt" hoặc "lắp ráp" để hiểu các hướng dẫn được gửi tới nó giống như CPU ​​không?


Từ Wikipedia :

Ngôn ngữ lắp ráp ARB là ngôn ngữ tạo bóng ở mức độ thấp, có thể được mô tả là ngôn ngữ lắp ráp. Nó được tạo bởi Hội đồng Đánh giá Kiến trúc OpenGL (ARB) để chuẩn hóa các hướng dẫn GPU kiểm soát đường ống đồ họa phần cứng.

Có ví dụ này và hãy nhớ rằng các nhà sản xuất riêng lẻ (NVIDIA, ATI) có bộ hướng dẫn riêng.

Ngoài ra, tồn tại OpenCL và nhiều cách khác, theo một cách nào đó, trực tiếp lập trình các hướng dẫn cho GPU.

Tất cả điều này sẽ trả lời câu hỏi của bạn, ở một mức độ nào đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.