Làm thế nào để CPU và GPU tương tác trong việc hiển thị đồ họa máy tính?


58

Tại đây, bạn có thể thấy ảnh chụp màn hình của một chương trình C ++ nhỏ có tên Triangle.exe với hình tam giác xoay dựa trên API OpenGL.

nhập mô tả hình ảnh ở đây

Phải thừa nhận một ví dụ rất cơ bản nhưng tôi nghĩ nó có thể áp dụng cho các hoạt động card đồ họa khác.

Tôi chỉ tò mò và muốn biết toàn bộ quá trình từ khi nhấp đúp vào Triangle.exe trong Windows XP cho đến khi tôi có thể thấy hình tam giác xoay trên màn hình. Điều gì xảy ra, làm thế nào CPU (lần đầu tiên xử lý .exe) và GPU (cuối cùng xuất ra hình tam giác trên màn hình) tương tác như thế nào?

Tôi đoán liên quan đến việc hiển thị tam giác xoay này chủ yếu là phần cứng / phần mềm sau đây:

Phần cứng

  • Ổ cứng
  • Bộ nhớ hệ thống (RAM)
  • CPU
  • Bộ nhớ video
  • GPU
  • Màn hình LCD

Phần mềm

  • Hệ điều hành
  • API DirectX / OpenGL
  • Trình điều khiển Nvidia

Bất cứ ai có thể giải thích quá trình, có thể với một số loại biểu đồ cho minh họa?

Nó không phải là một lời giải thích phức tạp bao gồm từng bước (đoán rằng sẽ vượt ra ngoài phạm vi), nhưng một lời giải thích mà một anh chàng IT trung cấp có thể làm theo.

Tôi khá chắc chắn rằng nhiều người thậm chí tự gọi mình là chuyên gia CNTT không thể mô tả chính xác quy trình này.


Tình trạng khó xử của bạn sẽ chấm dứt nếu bạn chỉ có thể coi GPU là một phần mở rộng của CPU!
KawaiKx

Câu trả lời:


55

Tôi quyết định viết một chút về khía cạnh lập trình và cách các thành phần nói chuyện với nhau. Có lẽ nó sẽ làm sáng tỏ một số khu vực nhất định.

Sự trình bày

Điều gì làm cho thậm chí có hình ảnh duy nhất, mà bạn đã đăng trong câu hỏi của bạn, được vẽ trên màn hình?

Có nhiều cách để vẽ một hình tam giác trên màn hình. Để đơn giản, giả sử không có bộ đệm đỉnh được sử dụng. (Bộ đệm đỉnh là một vùng bộ nhớ nơi bạn lưu trữ tọa độ.) Giả sử chương trình chỉ đơn giản là nói với đường ống xử lý đồ họa về mọi đỉnh đơn (một đỉnh chỉ là tọa độ trong không gian) liên tiếp.

Nhưng , trước khi chúng ta có thể vẽ bất cứ thứ gì, trước tiên chúng ta phải chạy một số giàn giáo. Chúng ta sẽ thấy lý do sau:

// Clear The Screen And The Depth Buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Reset The Current Modelview Matrix
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity();

// Drawing Using Triangles
glBegin(GL_TRIANGLES);

  // Red
  glColor3f(1.0f,0.0f,0.0f);
  // Top Of Triangle (Front)
  glVertex3f( 0.0f, 1.0f, 0.0f);

  // Green
  glColor3f(0.0f,1.0f,0.0f);
  // Left Of Triangle (Front)
  glVertex3f(-1.0f,-1.0f, 1.0f);

  // Blue
  glColor3f(0.0f,0.0f,1.0f);
  // Right Of Triangle (Front)
  glVertex3f( 1.0f,-1.0f, 1.0f);

// Done Drawing
glEnd();

Vậy điều đó đã làm gì?

Khi bạn viết chương trình muốn sử dụng card đồ họa, bạn thường sẽ chọn một số loại giao diện cho trình điều khiển. Một số giao diện nổi tiếng với trình điều khiển là:

  • OpenGL
  • Direct3D
  • CUDA

Trong ví dụ này, chúng tôi sẽ gắn bó với OpenGL. Bây giờ, giao diện của bạn với trình điều khiển là thứ cung cấp cho bạn tất cả các công cụ bạn cần để làm cho chương trình của bạn nói chuyện với card đồ họa (hoặc trình điều khiển, sau đó nói chuyện với thẻ).

Giao diện này chắc chắn sẽ cung cấp cho bạn một số công cụ nhất định . Các công cụ này có hình dạng của API mà bạn có thể gọi từ chương trình của mình.

API đó là những gì chúng ta thấy đang được sử dụng trong ví dụ trên. Hãy xem xét kỹ hơn.

Giàn giáo

Trước khi bạn thực sự có thể thực hiện bất kỳ bản vẽ thực tế nào, bạn sẽ phải thực hiện thiết lập . Bạn phải xác định chế độ xem của mình (khu vực sẽ thực sự được hiển thị), phối cảnh của bạn ( máy ảnh vào thế giới của bạn), bạn sẽ sử dụng loại khử răng cưa nào (để làm phẳng hình tam giác của bạn) ...

Nhưng chúng tôi sẽ không nhìn vào bất kỳ điều đó. Chúng tôi sẽ chỉ xem qua những thứ bạn sẽ phải làm mọi khung hình . Như:

Xóa màn hình

Các đường ống đồ họa sẽ không xóa màn hình cho bạn mọi khung hình. Bạn sẽ phải nói với nó. Tại sao? Đây là lý do tại sao:

nhập mô tả hình ảnh ở đây

Nếu bạn không xóa màn hình, bạn sẽ chỉ cần vẽ lên mọi khung hình. Đó là lý do tại sao chúng tôi gọi glClearvới GL_COLOR_BUFFER_BITbộ. Các bit khác ( GL_DEPTH_BUFFER_BIT) báo cho OpenGL để xóa bộ đệm độ sâu . Bộ đệm này được sử dụng để xác định các pixel ở phía trước (hoặc phía sau) các pixel khác.

Biến đổi

nhập mô tả hình ảnh ở đây
Nguồn hình ảnh

Biến đổi là phần mà chúng ta lấy tất cả các tọa độ đầu vào (các đỉnh của tam giác) và áp dụng ma trận ModelView của chúng ta. Đây là ma trận giải thích cách mô hình của chúng tôi (các đỉnh) được xoay, thu nhỏ và dịch (di chuyển).

Tiếp theo, chúng tôi áp dụng ma trận Chiếu của chúng tôi. Điều này di chuyển tất cả các tọa độ để chúng đối mặt với máy ảnh của chúng tôi một cách chính xác.

Bây giờ chúng tôi biến đổi một lần nữa, với ma trận Viewport của chúng tôi. Chúng tôi làm điều này để mở rộng mô hình của chúng tôi theo kích thước của màn hình của chúng tôi. Bây giờ chúng ta có một tập hợp các đỉnh đã sẵn sàng để được hiển thị!

Chúng ta sẽ quay lại để biến đổi một chút sau.

Đang vẽ

Để vẽ một hình tam giác, chúng ta chỉ cần nói với OpenGL để bắt đầu một danh sách các hình tam giác mới bằng cách gọi glBeginvới GL_TRIANGLEShằng số.
Ngoài ra còn có các hình thức khác bạn có thể vẽ. Giống như một dải tam giác hoặc một quạt tam giác . Đây chủ yếu là tối ưu hóa, vì chúng yêu cầu ít giao tiếp giữa CPU và GPU để vẽ cùng một số lượng tam giác.

Sau đó, chúng tôi có thể cung cấp một danh sách gồm 3 đỉnh sẽ tạo thành mỗi tam giác. Mỗi tam giác sử dụng 3 tọa độ (như chúng ta đang ở trong không gian 3D). Ngoài ra, tôi cũng cung cấp một màu cho mỗi đỉnh, bằng cách gọi glColor3f trước khi gọi glVertex3f.

Độ bóng giữa 3 đỉnh (3 góc của tam giác) được tính toán bằng OpenGL tự động . Nó sẽ nội suy màu trên toàn bộ mặt của đa giác.

Sự tương tác

Bây giờ, khi bạn nhấp vào cửa sổ. Ứng dụng chỉ phải chụp thông báo cửa sổ báo hiệu nhấp chuột. Sau đó, bạn có thể chạy bất kỳ hành động trong chương trình của bạn mà bạn muốn.

Điều này trở nên khó khăn hơn rất nhiều khi bạn muốn bắt đầu tương tác với cảnh 3D của mình.

Trước tiên, bạn phải biết rõ pixel mà người dùng đã nhấp vào cửa sổ. Sau đó, tính đến viễn cảnh của bạn , bạn có thể tính toán hướng của tia, từ điểm chuột nhấp vào cảnh của bạn. Sau đó, bạn có thể tính toán nếu có bất kỳ đối tượng nào trong cảnh của bạn giao nhau với tia đó . Bây giờ bạn biết nếu người dùng nhấp vào một đối tượng.

Vì vậy, làm thế nào để bạn làm cho nó xoay?

Biến đổi

Tôi biết hai loại biến đổi thường được áp dụng:

  • Chuyển đổi dựa trên ma trận
  • Chuyển đổi dựa trên xương

Sự khác biệt là xương ảnh hưởng đến các đỉnh đơn . Ma trận luôn ảnh hưởng đến tất cả các đỉnh được vẽ theo cùng một cách. Hãy xem xét một ví dụ.

Thí dụ

Trước đó, chúng tôi đã tải ma trận danh tính trước khi vẽ tam giác của chúng tôi. Ma trận danh tính là một ma trận đơn giản không cung cấp sự biến đổi nào cả. Vì vậy, bất cứ điều gì tôi vẽ, chỉ bị ảnh hưởng bởi quan điểm của tôi. Vì vậy, tam giác sẽ không được quay ở tất cả.

Nếu tôi muốn xoay nó ngay bây giờ, tôi có thể tự mình làm toán (trên CPU) và chỉ cần gọi glVertex3fvới các tọa độ khác (được xoay). Hoặc tôi có thể để GPU làm tất cả công việc, bằng cách gọi glRotateftrước khi vẽ:

// Rotate The Triangle On The Y axis
glRotatef(amount,0.0f,1.0f,0.0f);               

amounttất nhiên, chỉ là một giá trị cố định. Nếu bạn muốn tạo hiệu ứng , bạn sẽ phải theo dõi amountvà tăng nó lên từng khung hình.

Vì vậy, chờ đợi, những gì đã xảy ra với tất cả các ma trận nói chuyện trước đó?

Trong ví dụ đơn giản này, chúng ta không cần phải quan tâm đến ma trận. Chúng tôi chỉ đơn giản gọi glRotatefvà nó sẽ chăm sóc tất cả những thứ đó cho chúng tôi.

glRotatetạo ra một vòng quay angleđộ quanh vectơ xyz. Ma trận hiện tại (xem glMatrixMode ) được nhân với ma trận xoay với sản phẩm thay thế ma trận hiện tại, như thể glMultMatrix được gọi với ma trận sau làm đối số của nó:

x 2 ⁡ 1 - c + cx ⁢ y ⁡ 1 - c - z ⁢ sx ⁢ z ⁡ 1 - c + y ⁢ s 0 y ⁢ x ⁡ 1 - c + z ⁢ sy 2 ⁡ 1 - c + cy ⁢ z 1 - c - x ⁢ s 0 x ⁢ z ⁡ 1 - c - y ⁢ sy ⁢ z ⁡ 1 - c + x ⁢ sz 2 ⁡ 1 - c + c 0 0 0 0 1

Vâng, cảm ơn vì điều đó!

Phần kết luận

Điều rõ ràng là, có rất nhiều cuộc nói chuyện với OpenGL. Nhưng nó không cho chúng ta biết điều gì. Giao tiếp ở đâu?

Điều duy nhất mà OpenGL nói với chúng ta trong ví dụ này là khi nó hoàn thành . Mỗi hoạt động sẽ mất một khoảng thời gian nhất định. Một số hoạt động mất rất nhiều thời gian, những người khác là rất nhanh chóng.

Gửi một đỉnh cho GPU sẽ rất nhanh, tôi thậm chí sẽ không biết cách thể hiện nó. Gửi hàng ngàn đỉnh từ CPU đến GPU, mỗi khung hình, rất có thể, không có vấn đề gì cả.

Việc xóa màn hình có thể mất một phần nghìn giây hoặc tệ hơn (lưu ý, bạn thường chỉ có khoảng 16 mili giây để vẽ mỗi khung hình), tùy thuộc vào tầm nhìn của bạn lớn như thế nào. Để xóa nó, OpenGL phải vẽ từng pixel theo màu bạn muốn xóa, đó có thể là hàng triệu pixel.

Ngoài ra, chúng tôi chỉ có thể hỏi OpenGL về các khả năng của bộ điều hợp đồ họa của chúng tôi (độ phân giải tối đa, khử răng cưa tối đa, độ sâu màu tối đa, ...).

Nhưng chúng ta cũng có thể điền vào một kết cấu với các pixel mà mỗi pixel có một màu cụ thể. Do đó, mỗi pixel chứa một giá trị và kết cấu là một "tệp" khổng lồ chứa đầy dữ liệu. Chúng ta có thể tải nó vào card đồ họa (bằng cách tạo bộ đệm kết cấu), sau đó tải một shader , nói với shader đó sử dụng kết cấu của chúng ta làm đầu vào và chạy một số phép tính cực kỳ nặng nề trên "tệp" của chúng ta.

Sau đó, chúng ta có thể "kết xuất" kết quả tính toán của mình (dưới dạng màu mới) thành một kết cấu mới.

Đó là cách bạn có thể làm cho GPU hoạt động cho bạn theo những cách khác. Tôi cho rằng CUDA thực hiện tương tự như khía cạnh đó, nhưng tôi chưa bao giờ có cơ hội làm việc với nó.

Chúng tôi thực sự chỉ chạm nhẹ vào toàn bộ chủ đề. Lập trình đồ họa 3D là một địa ngục của một con thú.

nhập mô tả hình ảnh ở đây
Nguồn hình ảnh


38

Thật khó để hiểu chính xác những gì bạn không hiểu.

GPU có một loạt các thanh ghi mà BIOS ánh xạ. Những thứ này cho phép CPU truy cập vào bộ nhớ của GPU và hướng dẫn GPU thực hiện các hoạt động. CPU cắm các giá trị vào các thanh ghi đó để ánh xạ một số bộ nhớ của GPU để CPU có thể truy cập nó. Sau đó, nó tải hướng dẫn vào bộ nhớ đó. Sau đó, nó ghi một giá trị vào một thanh ghi báo cho GPU thực hiện các hướng dẫn mà CPU được nạp vào bộ nhớ của nó.

Thông tin bao gồm phần mềm mà GPU cần chạy. Phần mềm này được đóng gói với trình điều khiển và sau đó trình điều khiển xử lý phân chia trách nhiệm giữa CPU và GPU (bằng cách chạy các phần mã của nó trên cả hai thiết bị).

Trình điều khiển sau đó quản lý một loạt "cửa sổ" vào bộ nhớ GPU mà CPU có thể đọc và ghi vào. Nói chung, mẫu truy cập liên quan đến các hướng dẫn hoặc thông tin ghi CPU vào bộ nhớ GPU được ánh xạ và sau đó hướng dẫn GPU, thông qua một thanh ghi, để thực hiện các hướng dẫn hoặc xử lý thông tin đó. Thông tin bao gồm logic shader, kết cấu, v.v.


1
Cảm ơn lời giải thích của bạn. Về cơ bản điều tôi không hiểu là cách tập lệnh CPU giao tiếp với tập lệnh GPU, nhưng rõ ràng đó là trình điều khiển thực hiện phần đó. Đó là những gì tôi muốn nói với các lớp trừu tượng.
JohnnyFromBF

2
Không có tập lệnh CPU liên quan. Trình điều khiển và thời gian chạy biên dịch CUDA, OpenGL, Direct3D, v.v. của bạn thành các chương trình / hạt nhân GPU gốc, sau đó cũng được tải lên bộ nhớ thiết bị. Bộ đệm lệnh sau đó đề cập đến những người như bất kỳ tài nguyên nào khác.
Axel Gneiting

2
Tôi không chắc chắn những chương trình bạn đang đề cập đến (chạy trên gpu và được bao gồm trong trình điều khiển). Các gpu phần lớn là phần cứng chức năng cố định và các chương trình duy nhất nó sẽ chạy là các shader, được cung cấp bởi ứng dụng, không phải trình điều khiển. Trình điều khiển chỉ biên dịch các chương trình này và sau đó tải chúng vào bộ nhớ của gpu.
Ben Richards

1
@ sidran32: Ví dụ: trong kiến ​​trúc Kepler, hạt nhân, luồng và sự kiện của nVidia được tạo bởi phần mềm chạy trên GPU, chứ không phải (thường là) CPU. Phần mềm phía GPU cũng quản lý RDMA. Tất cả phần mềm đó được trình điều khiển tải vào bộ nhớ GPU và chạy dưới dạng "hệ điều hành nhỏ" trên GPU xử lý phía GPU của cặp hợp tác CPU / GPU.
David Schwartz

@DavidSchwartz Tôi đã quên mất các tác vụ tính toán GPU. Tuy nhiên, dù sao thì họ vẫn hành xử tương tự như shader. Tuy nhiên, tôi sẽ không gọi nó là "HĐH mini", vì nó không có cùng chức năng thường được liên kết với HĐH. Đây vẫn là phần mềm rất chuyên dụng, vì GPU không được thiết kế như CPU ​​(vì lý do chính đáng).
Ben Richards

13

Tôi chỉ tò mò và muốn biết toàn bộ quá trình từ khi nhấp đúp vào Triangle.exe trong Windows XP cho đến khi tôi có thể thấy hình tam giác xoay trên màn hình. Điều gì xảy ra, làm thế nào CPU (lần đầu tiên xử lý .exe) và GPU (cuối cùng xuất ra hình tam giác trên màn hình) tương tác như thế nào?

Hãy giả sử bạn thực sự biết cách thức thực thi chạy trên hệ điều hành và cách thức thực thi đó được gửi từ GPU của bạn đến màn hình, nhưng không biết về những gì đang xảy ra ở giữa. Vì vậy, hãy xem xét từ khía cạnh phần cứng và mở rộng hơn nữa về câu trả lời về khía cạnh lập trình viên ...

Giao diện giữa CPU và GPU là gì?

Sử dụng trình điều khiển , CPU có thể nói chuyện thông qua các tính năng của bo mạch chủ như PCI với card đồ họa và gửi lệnh tới nó để thực hiện một số lệnh GPU, truy cập / cập nhật bộ nhớ GPU , tải mã để thực thi trên GPU và hơn thế nữa ...

Nhưng, bạn không thể thực sự nói chuyện trực tiếp với phần cứng hoặc trình điều khiển từ mã; vì vậy, điều này sẽ phải xảy ra thông qua các API như OpenGL, Direct3D, CUDA, HLSL, Cg. Mặc dù các hướng dẫn GPU trước đây chạy và / hoặc cập nhật bộ nhớ GPU, nhưng cái sau sẽ thực sự thực thi mã trên GPU vì chúng là ngôn ngữ vật lý / đổ bóng.

Tại sao chạy mã trên GPU mà không phải trên CPU?

Mặc dù CPU rất tốt trong việc chạy các chương trình máy trạm và máy chủ hàng ngày của chúng tôi, nhưng không có nhiều suy nghĩ về tất cả những đồ họa sáng bóng mà bạn thấy trong các trò chơi ngày nay. Trước đây, có những trình kết xuất phần mềm đã thực hiện thủ thuật từ một số thứ 2D và 3D, nhưng chúng rất hạn chế. Vì vậy, đây là nơi GPU ra đời.

GPU được tối ưu hóa cho một trong những tính toán quan trọng nhất trong đồ họa, Thao tác ma trận . Mặc dù CPU phải tính toán từng phép nhân trong một thao tác ma trận từng cái một (sau này, những thứ như 3DNow!SSE đã bắt kịp), GPU có thể thực hiện tất cả các phép nhân đó cùng một lúc! Song song.

Nhưng các tính toán song song không phải là lý do duy nhất, một lý do khác là GPU gần với bộ nhớ video hơn rất nhiều so với việc phải thực hiện các chuyến đi khứ hồi qua CPU, v.v ...

Làm thế nào để các hướng dẫn GPU / bộ nhớ / mã hiển thị đồ họa?

Có một phần còn thiếu để làm cho tất cả điều này hoạt động, chúng ta cần một cái gì đó chúng ta có thể viết để sau đó chúng ta có thể đọc và gửi đến màn hình. Chúng ta có thể làm điều này bằng cách tạo ra bộ đệm khung . Bất cứ thao tác nào bạn thực hiện, cuối cùng bạn sẽ cập nhật các pixel trong bộ đệm khung; mà bên cạnh vị trí cũng giữ thông tin về màu sắc và độ sâu.

Hãy cho bạn một ví dụ mà bạn muốn vẽ một sprite máu (một hình ảnh) ở đâu đó; đầu tiên, bản thân kết cấu cây được tải vào bộ nhớ GPU, giúp bạn dễ dàng vẽ lại nó theo ý muốn. Tiếp theo, để thực sự vẽ sprite ở đâu đó, chúng ta có thể dịch sprite bằng cách sử dụng các đỉnh (đặt nó vào đúng vị trí), raster nó (biến nó từ một đối tượng 3D thành pixel) và cập nhật bộ đệm khung. Để hiểu rõ hơn, đây là biểu đồ luồng đường ống OpenGL từ Wikipedia:

Đây là ý chính của toàn bộ ý tưởng đồ họa, nghiên cứu nhiều hơn là bài tập về nhà cho người đọc.


7

Để giữ cho mọi thứ đơn giản, chúng ta có thể mô tả nó như thế này. Một số địa chỉ bộ nhớ được dành riêng (bởi BIOS và / hoặc hệ điều hành) không dành cho RAM mà dành cho thẻ video. Bất kỳ dữ liệu nào được ghi ở các giá trị đó (con trỏ) sẽ vào thẻ. Vì vậy, về mặt lý thuyết, bất kỳ chương trình nào cũng có thể viết trực tiếp lên băng video chỉ bằng cách biết phạm vi địa chỉ và đây chính xác là cách nó được thực hiện trở lại trong những ngày xưa. Trong thực tế với các hệ điều hành hiện đại, điều này được quản lý bởi trình điều khiển video và / hoặc thư viện đồ họa trên cùng (DirectX, OpenGL, v.v.).


1
-1 anh ta hỏi làm thế nào một cuộc gọi API DirectX từ CPU có thể giao tiếp với GPU và câu trả lời của bạn là "nó được quản lý bởi trình điều khiển và / hoặc DirectX" ? Điều này cũng không giải thích làm thế nào mã tùy chỉnh (ala CUDA) có thể được chạy.
BlueRaja - Daniel Pflughoeft

3
hãy học đọc. Tôi đã nói bằng cách ghi vào các địa chỉ bộ nhớ cụ thể được dành riêng cho GPU thay vì RAM. Và điều này giải thích làm thế nào bạn có thể chạy mọi thứ. Một phạm vi bộ nhớ được đăng ký cho một thẻ. Tất cả mọi thứ bạn viết trong phạm vi đó đều thuộc về GPU chạy xử lý đỉnh, CUDA, bất cứ điều gì.
AZ.

5

GPU thường được điều khiển bởi bộ đệm DMA. Nghĩa là, trình điều khiển biên dịch các lệnh mà nó nhận được từ chương trình không gian người dùng thành một luồng hướng dẫn (trạng thái chuyển đổi, vẽ điều này theo cách đó, chuyển ngữ cảnh, v.v.), sau đó được sao chép vào bộ nhớ thiết bị. Sau đó, nó ra lệnh cho GPU thực hiện bộ đệm lệnh này thông qua thanh ghi PCI hoặc các phương thức tương tự.

Vì vậy, trên mỗi cuộc gọi rút thăm, điều xảy ra là trình điều khiển không gian người dùng sẽ biên dịch lệnh, sau đó gọi trình điều khiển không gian kernel thông qua một ngắt và cuối cùng người ta sẽ gửi bộ đệm lệnh vào bộ nhớ thiết bị và hướng dẫn GPU bắt đầu kết xuất.

Trên bảng điều khiển, bạn thậm chí có thể có niềm vui để tự mình làm tất cả điều đó, đặc biệt là trên PS3.


0

Tôi nghĩ rằng CPU gửi dữ liệu video tới GPU thông qua xe buýt và sau đó GPU sẽ hiển thị nó. Vì vậy, GPU nhanh hơn có thể xử lý nhiều dữ liệu hơn từ CPU. Theo cách này, một số xử lý của cpuoffload sang GPU. Do đó, bạn có được tốc độ nhanh hơn trong các trò chơi.

Nó giống như RAM nơi CPU lưu trữ các thứ để nó có thể tải và xử lý nhanh chóng. Cả hai làm cho trò chơi nhanh hơn.

Hoặc card âm thanh hoặc card mạng hoạt động theo nguyên tắc tương tự, đó là lấy dữ liệu và giảm tải một số công việc của CPU.


Điều này trùng lặp một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
DavidPostill

0

Tôi nghĩ rằng op không chắc chắn chính xác những gì cpu đang nói với card đồ họa để làm gì và tại sao các lệnh liên quan đến đồ họa (như các lệnh opengl hoặc direct3d) không được gửi trực tiếp đến GPU.

CPU chỉ cho GPU biết những gì cần kết xuất. Trước tiên, tất cả các hướng dẫn đều đi qua CPU nơi chúng được thiết lập / khởi tạo để GPU thực sự kết xuất.

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.