Tại sao chúng ta vẫn sử dụng CPU thay vì GPU?


373

Dường như với tôi rằng những ngày này rất nhiều tính toán được thực hiện trên GPU. Rõ ràng đồ họa được thực hiện ở đó, nhưng sử dụng CUDA và tương tự, AI, thuật toán băm (nghĩ bitcoin) và các thuật toán khác cũng được thực hiện trên GPU. Tại sao chúng ta không thể tự mình loại bỏ CPU và sử dụng GPU? Điều gì làm cho GPU nhanh hơn nhiều so với CPU?


3
Làm thế nào để tôi biết câu trả lời nào chứa thông tin chính xác? Tôi có nên đợi cho đến khi người khác lên / xuống câu trả lời? Tôi nghĩ rằng tôi đã quá vội vàng khi chấp nhận một câu trả lời: O
ell

14
Có một số câu trả lời gần đây @ell bây giờ, không chứa "thông tin sai lệch". Họ đang dần vươn lên dẫn đầu với số phiếu tăng do cơ chế thị trường hiệu quả của StackExchange được thiết kế tuyệt vời ;-) Tôi khuyên bạn nên chờ thêm một thời gian nữa trước khi chấp nhận câu trả lời. Có vẻ như bạn rất thận trọng đang làm điều đó. Đây là một câu hỏi hay. Có thể rõ ràng, nhưng nó không phải là tất cả. Cảm ơn bạn đã hỏi nó!
Ellie Kesselman

124
Kiểu như hỏi "Nếu Boeing 747 nhanh hơn và tiết kiệm nhiên liệu hơn, tại sao chúng ta vẫn lái ô tô"?
vartec

7
Không, bởi vì đó không phải là RISC so với CISC. Đó là một trong những nguyên tắc cơ bản của khoa học máy tính, hơi ngụy trang. Đó là "Tại sao chúng ta giảm tải công việc từ bộ xử lý trung tâm lên bộ xử lý I / O?" .
JdeBP

5
@vartec: Tôi nghĩ rằng một sự tương tự tốt hơn một chút có thể là giữa xe buýt và taxi. Nếu có bốn mươi người tất cả muốn đi từ cùng một nơi đến cùng một nơi, một chiếc xe buýt sẽ hiệu quả hơn nhiều. Nếu có bốn mươi người có nguồn gốc và điểm đến mong muốn bị phân tán rộng rãi, thậm chí một chiếc taxi duy nhất có thể tốt như xe buýt, và với chi phí của xe buýt, người ta có thể có nhiều xe taxi.
supercat

Câu trả lời:


388

Câu trả lời của TL; DR: GPU có nhiều lõi xử lý hơn CPU, nhưng vì mỗi lõi GPU chạy chậm hơn đáng kể so với lõi CPU và không có các tính năng cần thiết cho các hệ điều hành hiện đại, chúng không phù hợp để thực hiện hầu hết việc xử lý hàng ngày điện toán. Chúng phù hợp nhất với các hoạt động chuyên sâu tính toán như xử lý video và mô phỏng vật lý.


GPGPU vẫn là một khái niệm tương đối mới. GPU ban đầu chỉ được sử dụng để kết xuất đồ họa; khi công nghệ tiến bộ, số lượng lớn lõi trong GPU so với CPU đã được khai thác bằng cách phát triển khả năng tính toán cho GPU để chúng có thể xử lý đồng thời nhiều luồng dữ liệu, bất kể dữ liệu đó có thể là gì. Mặc dù GPU có thể có hàng trăm hoặc thậm chí hàng nghìn bộ xử lý luồng, mỗi bộ xử lý chạy chậm hơn lõi CPU và có ít tính năng hơn (ngay cả khi chúng hoàn thành Turing và có thể được lập trình để chạy bất kỳ chương trình nào CPU có thể chạy). Các tính năng bị thiếu trong GPU bao gồm các ngắt và bộ nhớ ảo, được yêu cầu để thực hiện một hệ điều hành hiện đại.

Nói cách khác, CPU và GPU có kiến ​​trúc khác nhau đáng kể giúp chúng phù hợp hơn với các nhiệm vụ khác nhau. GPU có thể xử lý một lượng lớn dữ liệu trong nhiều luồng, thực hiện các thao tác tương đối đơn giản trên chúng, nhưng không phù hợp với xử lý nặng hoặc phức tạp trên một hoặc một vài luồng dữ liệu. CPU nhanh hơn nhiều trên cơ sở mỗi lõi (về hướng dẫn mỗi giây) và có thể thực hiện các thao tác phức tạp trên một hoặc một vài luồng dữ liệu dễ dàng hơn, nhưng không thể xử lý hiệu quả nhiều luồng đồng thời.

Do đó, GPU không phù hợp để xử lý các tác vụ không được hưởng lợi đáng kể hoặc không thể song song, bao gồm nhiều ứng dụng tiêu dùng phổ biến như bộ xử lý văn bản. Hơn nữa, GPU sử dụng kiến ​​trúc cơ bản khác nhau; người ta sẽ phải lập trình một ứng dụng dành riêng cho GPU để nó hoạt động và cần có các kỹ thuật khác nhau đáng kể để lập trình GPU. Các kỹ thuật khác nhau này bao gồm ngôn ngữ lập trình mới, sửa đổi ngôn ngữ hiện có và mô hình lập trình mới phù hợp hơn để thể hiện một tính toán như một hoạt động song song được thực hiện bởi nhiều bộ xử lý luồng. Để biết thêm thông tin về các kỹ thuật cần thiết để lập trình GPU, hãy xem các bài viết trên Wikipedia về xử lý luồngtính toán song song .

GPU hiện đại có khả năng thực hiện các hoạt động vectơ và số học dấu phẩy động, với các thẻ mới nhất có khả năng thao tác các số dấu phẩy động có độ chính xác kép. Các khung như CUDA và OpenCL cho phép các chương trình được viết cho GPU và bản chất của GPU làm cho chúng phù hợp nhất với các hoạt động song song cao, như trong điện toán khoa học, trong đó một loạt thẻ tính toán GPU chuyên dụng có thể thay thế cho một loại nhỏ tính toán cụm như trong Siêu máy tính cá nhân NVIDIA Tesla . Người tiêu dùng có GPU hiện đại có kinh nghiệm với Folding @ home có thể sử dụng chúng để đóng góp cho khách hàng GPU , có thể thực hiện mô phỏng gấp protein ở tốc độ rất cao và đóng góp nhiều công việc hơn cho dự án (hãy chắc chắn đọc Câu hỏi thường gặpđầu tiên, đặc biệt là những người liên quan đến GPU). GPU cũng có thể cho phép mô phỏng vật lý tốt hơn trong các trò chơi video bằng PhysX, tăng tốc mã hóa và giải mã video và thực hiện các tác vụ chuyên sâu tính toán khác. Đây là những loại nhiệm vụ mà GPU phù hợp nhất để thực hiện.

AMD đang tiên phong thiết kế bộ xử lý có tên là Bộ xử lý tăng tốc (APU) kết hợp các lõi CPU x86 thông thường với GPU. Cách tiếp cận này cho phép hiệu năng đồ họa vượt trội hơn rất nhiều so với các giải pháp đồ họa tích hợp bo mạch chủ (mặc dù không phù hợp với GPU rời đắt tiền hơn) và cho phép hệ thống nhỏ gọn, chi phí thấp với hiệu suất đa phương tiện tốt mà không cần GPU riêng. Các bộ xử lý mới nhất của Intel cũng cung cấp đồ họa tích hợp trên chip, mặc dù hiệu năng GPU tích hợp cạnh tranh hiện chỉ giới hạn ở một số ít chip với Intel Iris Pro Graphics. Khi công nghệ tiếp tục phát triển, chúng ta sẽ thấy mức độ hội tụ ngày càng tăng của các bộ phận riêng biệt này. Dự kiến ​​AMDmột tương lai nơi CPU và GPU là một, có khả năng làm việc liền mạch với nhau trong cùng một nhiệm vụ .

Tuy nhiên, nhiều tác vụ được thực hiện bởi các hệ điều hành và ứng dụng PC vẫn phù hợp hơn với CPU và cần nhiều công việc để tăng tốc chương trình sử dụng GPU. Do rất nhiều phần mềm hiện có sử dụng kiến ​​trúc x86 và do GPU yêu cầu các kỹ thuật lập trình khác nhau và thiếu một số tính năng quan trọng cần thiết cho hệ điều hành, nên việc chuyển đổi chung từ CPU sang GPU cho máy tính hàng ngày là rất khó khăn.


39
Giống như câu trả lời này, tôi nghĩ lý do chính là chúng ta không có ngôn ngữ lập trình luồng chính tốt để xử lý các kiến ​​trúc song song như thế này. Chúng tôi đã đấu tranh trong nhiều thập kỷ để thúc đẩy lập trình đa luồng, và mọi người vẫn đang gọi, đa luồng "ác". Mặc dù CPU và GPU đa lõi là một thực tế, và chúng ta sẽ phải đưa ra các mô hình lập trình mới để đối phó với điều này.
Soren

Đáng chú ý là Intel đã làm việc trên kiến trúc Larrabee (cách quá lâu) về cơ bản là một con chip với số lượng lớn x86 lõi trên nó.
Chris S

Câu trả lời tuyệt vời để thảo luận về lý do phần cứng và thảo luận về APU và cách họ sẽ thay đổi điều này. Tuy nhiên, @Soren cho điểm rất tốt về phía phần mềm. Trong thực tế, đó là sự kết hợp của các vấn đề phần cứng, vấn đề phần mềm và thực tế là CPU hoạt động và khi một cái gì đó được biết là hoạt động, thật khó để khiến mọi người thay thế nó.
Nich Del

3
"chúng tôi không có ngôn ngữ lập trình luồng chính tốt để xử lý các kiến ​​trúc song song như thế này." - Haskell, OCaml, Scheme, F #, Erlang, và hầu như bất kỳ ngôn ngữ lập trình chức năng nào khác đều xử lý đa luồng rất tốt. Tất cả những người tôi đề cập là chủ đạo.
BlueRaja - Daniel Pflughoeft

1
@BlueRaja - chúng tôi biết các ngôn ngữ này, định nghĩa của bạn về luồng chính phải khác với ngôn ngữ của tôi :-)
Soren

252

Điều gì làm cho GPU nhanh hơn nhiều so với CPU?

GPU không nhanh hơn CPU. CPU và GPU được thiết kế với hai mục tiêu khác nhau, với sự đánh đổi khác nhau, vì vậy chúng có đặc tính hiệu suất khác nhau . Một số tác vụ nhất định nhanh hơn trong CPU trong khi các tác vụ khác được tính nhanh hơn trong GPU. CPU vượt trội trong việc thực hiện các thao tác phức tạp đối với một tập hợp dữ liệu nhỏ, GPU vượt trội khi thực hiện các thao tác đơn giản với một tập hợp dữ liệu lớn.

GPU là CPU có mục đích đặc biệt, được thiết kế sao cho một lệnh duy nhất hoạt động trên một khối dữ liệu lớn (SIMD / Nhiều lệnh nhiều dữ liệu), tất cả chúng đều áp dụng cùng một hoạt động. Làm việc trong các khối dữ liệu chắc chắn hiệu quả hơn so với làm việc với một ô tại một thời điểm vì có rất ít chi phí trong việc giải mã các hướng dẫn, tuy nhiên làm việc trong các khối lớn có nghĩa là có nhiều đơn vị làm việc song song hơn, vì vậy nó sử dụng nhiều bóng bán dẫn hơn nhiều để thực hiện một lệnh GPU duy nhất (gây ra hạn chế kích thước vật lý, sử dụng nhiều năng lượng hơn và tạo ra nhiều nhiệt hơn).

CPU được thiết kế để thực hiện một lệnh đơn trên một mốc thời gian càng nhanh càng tốt. Vì chỉ cần làm việc với một mốc thời gian duy nhất, nên số lượng bóng bán dẫn được yêu cầu để thực hiện một lệnh ít hơn rất nhiều để CPU có thể có một tập lệnh lớn hơn, ALU phức tạp hơn, dự đoán nhánh tốt hơn, ảo hóa tốt hơn kiến trúc, và một sơ đồ bộ nhớ đệm / đường ống tinh vi hơn. Chu kỳ hướng dẫn của nó cũng nhanh hơn.

Lý do tại sao chúng ta vẫn sử dụng CPU không phải vì x86 là vua của kiến ​​trúc CPU và Windows được viết cho x86, lý do tại sao chúng ta vẫn sử dụng CPU là vì loại nhiệm vụ mà HĐH cần thực hiện, tức là đưa ra quyết định, được chạy hiệu quả hơn trên kiến ​​trúc CPU. Một hệ điều hành cần xem xét 100 loại dữ liệu khác nhau và đưa ra các quyết định khác nhau, tất cả phụ thuộc vào nhau; loại công việc này không dễ dàng song song, ít nhất là không thành kiến ​​trúc SIMD.

Trong tương lai, những gì chúng ta sẽ thấy là sự hội tụ giữa kiến ​​trúc CPU và GPU khi CPU có được khả năng làm việc trên các khối dữ liệu, ví dụ SSE. Ngoài ra, khi công nghệ sản xuất được cải thiện và chip trở nên nhỏ hơn, GPU có thể đủ khả năng để thực hiện các hướng dẫn phức tạp hơn.


23
Đây có lẽ là câu trả lời tốt nhất ở đây. Điều quan trọng là phải hiểu sự khác biệt cơ bản giữa hai mô hình. Để GPU vượt qua CPU, xem xét khối lượng công việc ngày nay, về cơ bản có nghĩa là GPU phải biến thành CPU. Và do đó, câu hỏi là câu trả lời.
Surfasb

2
+1 cho điều này là câu trả lời tốt nhất. Cả câu trả lời này và câu trả lời được chấp nhận đều đúng, nhưng câu trả lời này giải thích rõ ràng hơn nhiều.

Tôi ngạc nhiên không ai trong chủ đề này đã đề cập đến chi phí gửi dữ liệu tới GPU - băng thông bị giới hạn trên các bus PCI-Express làm cho một số hoạt động song song trên GPU chậm hơn rất nhiều so với chúng được thực hiện trên CPU. Có thể thấy một trường hợp đơn giản trong đó việc thay đổi kích thước của FFT đã tạo ra sự khác biệt đáng kể về hiệu năng trên GPU so với CPU do chi phí gửi dữ liệu, thiết lập bối cảnh, đọc lại kết quả: stackoverflow.com/a/8687732/303612 Các hoạt động nhỏ hơn có thể được thực hiện trong bộ nhớ cache trên CPU và băng thông bộ nhớ vượt trội hơn nhiều so với kiến ​​trúc PCI-E hiện tại
Tiến sĩ Andrew Burnett-Thompson

1
@ Dr.AndrewBurnett-Thompson: đó là vì điều đó không liên quan đến câu hỏi. Hiện tại, GPU được coi là một đơn vị xử lý phụ trợ, đó là lý do tại sao việc di chuyển dữ liệu từ / sang GPU là cần thiết và tốn kém. Nếu chúng ta coi GPU là đơn vị xử lý lớp đầu tiên, sẽ không có nhu cầu sắp xếp dữ liệu giữa bộ nhớ chính và bộ nhớ GPU.
Lie Ryan

1
Không lạc quan, nó không phải là băng thông trên không. Nếu bộ xử lý có kiến ​​trúc GPU chạy toàn bộ chương trình, không có gì cần phải di chuyển, bộ nhớ GPU bộ nhớ chính. Không có chi phí chuyển nhượng nào được nói đến ngay từ đầu vì không có chuyển khoản. Tuy nhiên, đây không phải là giả thuyết, APU của AMD sử dụng HSA (kiến trúc hệ thống không đồng nhất) với bộ nhớ chính thống nhất cho phép sao chép không giữa CPU và GPU.
Lie Ryan

75

GPU thiếu:

  1. Bộ nhớ ảo (!!!)
  2. Phương tiện của các thiết bị đánh địa chỉ ngoài bộ nhớ (ví dụ: bàn phím, máy in, bộ nhớ thứ cấp, v.v.)
  3. Ngắt

Bạn cần những thứ này để có thể thực hiện bất cứ thứ gì như một hệ điều hành hiện đại.

Chúng cũng (tương đối) chậm ở số học chính xác kép (khi so sánh với hiệu suất số học chính xác duy nhất của chúng) *, và lớn hơn nhiều (về kích thước của silicon). Các kiến ​​trúc GPU cũ hơn không hỗ trợ các cuộc gọi gián tiếp (thông qua các con trỏ hàm) cần thiết cho hầu hết các chương trình có mục đích chung và các kiến ​​trúc gần đây thực hiện quá chậm. Cuối cùng, (như các câu trả lời khác đã lưu ý), đối với các tác vụ không thể song song, GPU bị mất so với các CPU có cùng khối lượng công việc.

EDIT : Xin lưu ý rằng phản hồi này đã được viết vào năm 2011 - GPU tech là một lĩnh vực thay đổi liên tục. Mọi thứ có thể rất khác nhau tùy thuộc vào thời điểm bạn đọc nó: P

* Một số GPU không chậm với số học chính xác gấp đôi, chẳng hạn như các dòng Quadro hoặc Tesla của NVidia (thế hệ Fermi hoặc mới hơn) hoặc dòng FirePro của AMD (thế hệ GCN hoặc mới hơn). Nhưng những thứ này không có trong hầu hết các máy của người tiêu dùng.


@Cicada: Bạn có tài liệu tham khảo cho điều đó? Trong mọi trường hợp, ngay cả khi điều đó là đúng, ngay cả phần cứng gần đây cũng sẽ không hoạt động tốt trong trường hợp đó. (ví dụ: sẽ không có quá nhiều lợi thế hoàn hảo so với CPU - và tiêu thụ năng lượng DIS nhược điểm)
Billy ONeal

3
Có, các thiết bị Fermi như bạn đã nói (với CUDA 4.0 và sm_20), hỗ trợ các bước nhảy gián tiếp (và do đó là các phương thức ảo C ++, kế thừa, v.v.).
Xà lách giận dữ

544 GigaFLOPS từ GPU 2 năm tuổi 300 USD có chậm không?
Ben Voigt

2
@Ben: Bạn chỉ có được loại hiệu suất đó trong các ứng dụng song song dữ liệu. Các hoạt động tuần tự chung là một trò chơi bóng hoàn toàn khác nhau. (Đó chỉ là với tất cả 1600 lõi trên con chip đó chạy song song, chạy về cơ bản cùng một hướng dẫn lặp đi lặp lại ... và thậm chí đó chỉ là lý thuyết chứ không phải là sự hoàn hảo thực tế)
Billy ONeal

@Billy: Nhưng đó là sự chậm chạp trên một loại thuật toán cụ thể, không chậm chạp về số học chính xác kép (đó là những gì bạn tuyên bố). (Và CPU thường không đạt được thông lượng chuẩn)
Ben Voigt

37

Một CPU giống như một công nhân đi siêu nhanh. GPU giống như một nhóm nhân viên nhân bản đi nhanh, nhưng tất cả đều phải thực hiện chính xác cùng một thứ (với ngoại lệ là bạn có thể có một số bản sao nhàn rỗi nếu bạn muốn)

Bạn muốn có ai là nhà phát triển đồng nghiệp của mình, một anh chàng siêu nhanh hay 100 nhân bản nhanh không thực sự nhanh như vậy, nhưng tất cả đều phải thực hiện cùng một hành động?

Đối với một số hành động, các bản sao khá tốt, ví dụ như quét sàn - mỗi cái có thể quét một phần của nó.

Đối với một số hành động, bản sao bốc mùi, ví dụ viết báo cáo hàng tuần - tất cả các bản sao nhưng một người ngồi không trong khi một bản sao viết báo cáo (nếu không bạn chỉ nhận được 100 bản sao của cùng một báo cáo).


4
Tôi thậm chí có thể có ... cả hai?
Kevin Panko

22
@Kevin: Có, nhưng bạn cần một máy tính có cả CPU GPU! Nếu chỉ có một điều như vậy!
Joachim Sauer

3
Tương tự lớn. Sẽ nhớ điều này.
Mayo

23

Bởi vì GPU được thiết kế để làm rất nhiều việc nhỏ cùng một lúc và CPU được thiết kế để thực hiện một việc một lúc. Nếu quy trình của bạn có thể được thực hiện song song, như băm, GPU là đơn đặt hàng có cường độ nhanh hơn, nếu không thì sẽ không được.

CPU của bạn có thể tính toán một hàm băm nhanh hơn nhiều so với GPU của bạn - nhưng thời gian CPU cần để thực hiện, GPU của bạn có thể là một phần trong hàng trăm lần băm. GPU được thiết kế để làm nhiều việc cùng một lúc và CPU được thiết kế để làm một việc một lúc, nhưng rất nhanh.

Vấn đề là CPU và GPU là những giải pháp rất khác nhau cho các vấn đề rất khác nhau, có một chút trùng lặp nhưng nhìn chung những gì trong miền của chúng vẫn nằm trong miền của chúng. Chúng ta không thể thay thế CPU bằng GPU vì CPU đang ngồi đó thực hiện công việc của nó tốt hơn nhiều so với GPU từng có, đơn giản là vì GPU không được thiết kế để thực hiện công việc và CPU là.

Tuy nhiên, một lưu ý nhỏ là nếu có thể loại bỏ CPU và chỉ có GPU, bạn có nghĩ rằng chúng tôi sẽ đổi tên nó không? :)


Tôi nghĩ rằng hầu hết các CPU hiện đại được thiết kế để làm 2, 4 hoặc 8 việc cùng một lúc.
danielcg

@ danielcg25: Và hầu hết các GPU hiện đại được thiết kế để thực hiện 256, 512, 1024 mọi thứ cùng một lúc (GTX 680 có 1536 nhân CUDA). Mỗi lõi CPU riêng lẻ là một thực thể riêng biệt về mặt khái niệm, nhưng điều này không đúng với GPU.
Phoshi

@ danielcg25: Tôi biết, nhưng một nhận xét với sự hiểu lầm cơ bản (mặc dù có chủ ý) của câu trả lời có thể có hại nếu bất kỳ ai đang đọc nó mà không biết chủ đề. "Là một ass" theo nghĩa đó không thực sự được đánh giá cao trên SE vì nó làm giảm tín hiệu: tỷ lệ nhiễu.
Phoshi

Tôi chỉ cung cấp một số thông tin. Hầu hết các máy tính hiện nay thực sự có khả năng xử lý 2-8 thứ cùng một lúc. Một số bộ xử lý có thể làm nhiều hơn thế. Nó vẫn không đến gần với GPU làm được 100 thứ cùng một lúc.
danielcg

@ danielcg25: Tuy nhiên, đây là một loại xử lý khác nhau, đó là những gì câu hỏi là về. Mỗi lõi CPU được phân tách hiệu quả, hoạt động với các khối dữ liệu riêng và các quy trình riêng. Mỗi lõi CPU thực hiện một nhiệm vụ riêng biệt khác nhau và chúng không mở rộng theo tuyến tính - lõi tám không hữu ích gấp đôi vì lõi tứ không hữu ích gấp đôi lõi kép. Mặt khác, các lõi GPU, thực hiện cùng một nhiệm vụ trên các phần dữ liệu khác nhau và thực hiện quy mô tuyến tính. Rõ ràng là CPU đa lõi tồn tại, nhưng đây không phải là điều tương tự .
Phoshi

14

Bạn có thực sự hỏi tại sao chúng ta không sử dụng GPU như kiến ​​trúc trong CPU không?

GPU chỉ là một CPU chuyên dụng của card đồ họa. Chúng tôi cho vay GPU không tính toán đồ họa vì CPU mục đích chung chỉ không ngang bằng với thực thi điểm song song và dấu phẩy động.

Chúng tôi thực sự đang sử dụng các kiến ​​trúc CPU khác nhau (nhiều GPU hơn). Ví dụ, bộ xử lý Niagara khá đa nhiệm. SPARC T3 sẽ chạy 512 luồng đồng thời.


Tại sao một downvote?
jkj

3
Tôi đoán dòng cuối cùng, vì nó đơn giản là sai. Trong thực tế, tôi chỉ có thể nghĩ về một hệ điều hành chính chỉ x86; và thậm chí cái đó đã được chuyển sang bộ xử lý alpha và ARM, hiện tại chưa được cung cấp thương mại.
Javier

Đồng ý. Đã xóa phần cuối cùng theo ý kiến ​​của tôi về hệ điều hành chính hỗ trợ cản trở sự thay đổi đối với các kiến ​​trúc mới. Có thể không nằm trong phạm vi của câu trả lời.
jkj

11

Tôi có thể bị nhầm lẫn khủng khiếp ở đây, và đang nói từ ít hoặc không có thẩm quyền về chủ đề này, nhưng ở đây đi:

  • Tôi tin rằng mỗi đơn vị thực thi GPU ("lõi") có không gian địa chỉ rất hạn chế so với CPU.

  • Các đơn vị thực thi GPU không thể đối phó với việc phân nhánh hiệu quả.

  • Các đơn vị thực thi GPU không hỗ trợ ngắt phần cứng theo cách tương tự như CPU.

Tôi đã luôn nghĩ cách các đơn vị thực thi GPU có nghĩa là giống như "TỐC ĐỘ" của Playstation 3, họ muốn được cung cấp một khối dữ liệu, chạy một số hoạt động tuần tự trên đó và sau đó phun ra một khối khác dữ liệu, rửa sạch, lặp lại. Họ không có nhiều bộ nhớ có thể đánh địa chỉ như "CPE" chính, nhưng ý tưởng là dành riêng từng "TỐC ĐỘ" cho một nhiệm vụ liên tục, cụ thể. Đầu ra của một đơn vị có thể cung cấp đầu vào của đơn vị khác.

Các đơn vị thực thi không hoạt động tốt nếu họ đang cố gắng "phân tích" dữ liệu và đưa ra một loạt các quyết định dựa trên dữ liệu đó là gì.

Các "khối dữ liệu" này có thể là một phần của luồng, chẳng hạn như danh sách các đỉnh từ bảng trạng thái của trò chơi, dữ liệu MPEG từ đĩa, v.v.

Nếu một cái gì đó không phù hợp với mô hình "phát trực tuyến" này thì bạn có một nhiệm vụ không thể được liệt kê một cách hiệu quả và GPU không nhất thiết là giải pháp tốt nhất cho nó. Một ví dụ điển hình là xử lý các sự kiện dựa trên "sự kiện bên ngoài" như bàn phím, phím điều khiển hoặc đầu vào mạng. Không có nhiều thứ không phù hợp với mô hình đó, nhưng sẽ luôn có một vài thứ.


Điểm hay về tối ưu hóa dự đoán chi nhánh - tôi sẽ không bao giờ xem xét điều đó, nhưng bạn đã đúng.
Jimmy Breck-McKye

6

Điều này không có gì về tốc độ hoặc mục đích của đồng hồ. Cả hai đều có khả năng hoàn thành như nhau, nếu không phải tất cả các nhiệm vụ; tuy nhiên một số phù hợp hơn một chút cho một số nhiệm vụ sau đó một số khác.

Đã có một lập luận rất cũ về việc tốt hơn là có nhiều lõi câm hay một nhóm nhỏ các lõi rất thông minh. Điều này dễ dàng quay trở lại vào thập niên 80.

Bên trong CPU có nhiều tính toán có thể được thực hiện. Các lõi thông minh hơn có thể thực hiện nhiều phép tính khác nhau cùng một lúc (giống như đa lõi nhưng không, nó phức tạp; xem song song cấp độ Hướng dẫn ). Một lõi thông minh có thể thực hiện một số phép tính cùng một lúc (cộng, trừ, nhân, chia, hoạt động bộ nhớ) nhưng chỉ một lần một lần; bởi vì điều này, chúng lớn hơn về mặt vật lý (và do đó đắt hơn nhiều) sau đó là các lõi gỗ.

Một lõi câm nhỏ hơn nhiều và do đó có thể thêm nhiều hơn vào một chip đơn lẻ nhưng không thể thực hiện nhiều phép tính đồng thời. Có một sự cân bằng tốt giữa nhiều lõi câm và một vài lõi thông minh.

Kiến trúc đa lõi hoạt động tốt với đồ họa vì các phép tính có thể dễ dàng phân tách trên hàng trăm lõi, nhưng nó cũng phụ thuộc vào chất lượng mã và liệu mã khác có dựa vào kết quả của một phép tính hay không.

Đây là một nhiều câu hỏi phức tạp hơn nó có thể xuất hiện. Để biết thêm thông tin, hãy đọc bài viết này về thiết kế CPU:

Bộ vi xử lý hiện đại - Hướng dẫn 90 phút

http://www.lighterra.com/ersky/modernmicro Processors /


xin vui lòng loại trừ ngữ pháp kém và trong phong cách viết phụ mệnh nói chung được sử dụng ở trên, tôi đã không có cà phê của tôi. Đây là một khái niệm khá phức tạp và liên kết đi kèm là nơi bạn nên đến nếu muốn hiểu thêm. không phải lời giải thích tồi tệ của tôi
Silverfire

1
Tôi đã sửa nó cho bạn và cũng đã thêm một liên kết.
bwDraco

5

Tôi muốn giới thiệu một điểm Cú pháp: Các thuật ngữ CPU và GPU là các tên chức năng không phải là tên kiến ​​trúc.

Nếu một máy tính sử dụng GPU làm bộ xử lý chính, thì nó sẽ trở thành một "đơn vị xử lý trung tâm" (CPU) bất kể kiến ​​trúc và thiết kế.


4

Điều quan trọng cần lưu ý là không có đường phân chia kỳ diệu trong không gian kiến ​​trúc làm cho một bộ xử lý trở thành "trung tâm" và một "đồ họa" khác. (Chà, một số GPU có thể quá tê liệt để có thể nói chung hoàn toàn, nhưng đó không phải là những thứ chúng ta đang nói ở đây.)

Sự khác biệt là một trong những cách chúng được cài đặt trên bảng và những nhiệm vụ được giao cho chúng. Tất nhiên, chúng tôi sử dụng bộ xử lý đa năng (hoặc bộ bộ xử lý đa năng) cho việc truyền dữ liệu chính và một đơn vị đường ống đặc biệt, song song, sâu cho các thứ (như đồ họa) để có thể tận dụng tốt nhất chúng.

Hầu hết các thủ thuật thô sơ đã được sử dụng để tạo ra GPU làm việc của chúng rất nhanh được phát triển đầu tiên bởi những người cố gắng tạo ra CPU nhanh hơn và tốt hơn. Hóa ra Word và Excel và Netscape và nhiều thứ khác mà mọi người sử dụng máy tính của họ không chỉ không tận dụng hết các tính năng được cung cấp bởi các chip chuyên dụng đồ họa mà thậm chí còn chạy chậm hơn trên các kiến ​​trúc đó vì rất nhiều chi phí (rất tốn kém và chậm) xóa đường ống.


1
Tôi nghĩ rằng chi phí đường ống là một chi tiết cơ bản mà các câu trả lời xếp hạng cao hơn bị thiếu.
Steve

2

Toàn bộ vấn đề của việc có một GPU là để giải phóng CPU khỏi các tính toán đồ họa đắt tiền mà nó đang làm vào thời điểm đó.
Bằng cách kết hợp chúng vào một bộ xử lý một lần nữa sẽ quay trở lại nơi tất cả bắt đầu.


Yup, một bước tiến, hai bước lùi.
Randolf Richardson

2

Vì một lý do đơn giản: hầu hết các ứng dụng không đa luồng / vectơ.

Card đồ họa phụ thuộc rất nhiều vào đa luồng, ít nhất là trong khái niệm này.

So sánh một chiếc xe với một động cơ duy nhất, một chiếc xe với một động cơ nhỏ hơn trên mỗi bánh xe. Với chiếc xe sau, bạn cần chỉ huy tất cả các động cơ, một cái gì đó chưa được tính đến cho quan điểm lập trình hệ thống.

Tuy nhiên, với phản ứng tổng hợp AMD, nó sẽ thay đổi cách chúng ta sẽ cần sử dụng sức mạnh xử lý: hoặc được vector hóa, hoặc nhanh cho một luồng.



1

Nếu để đặt GPU đơn giản có thể được so sánh với trailer trong xe. Như thường là thân cây là đủ cho phần lớn mọi người trừ trường hợp nếu họ mua một cái gì đó thực sự lớn. Sau đó, họ có thể cần trailer. Tương tự với GPU, vì thông thường, đủ để có CPU thông thường sẽ hoàn thành phần lớn các nhiệm vụ. Nhưng nếu bạn cần một số tính toán chuyên sâu trong nhiều luồng, thì bạn có thể cần GPU


1

gpus là bộ xử lý dòng tốt. bạn có thể nghĩ về xử lý luồng khi nhân một dãy số dài liên tục. cpus cũng có khả năng xử lý luồng (được gọi là tiện ích mở rộng SIMD) nhưng bạn không thể thực hiện tất cả logic lập trình dưới dạng xử lý luồng và trình biên dịch có tùy chọn tạo btyecode để sử dụng các lệnh simd bất cứ khi nào có thể.

không phải tất cả mọi thứ là một mảng của số. hình ảnh và video là, có thể âm thanh quá (có bộ mã hóa opencl ở đây và ở đó). vì vậy gpus có thể xử lý, mã hóa và giải mã hình ảnh, video và bất cứ thứ gì tương tự. Một nhược điểm là bạn không thể giảm tải mọi thứ cho gpus trong các trò chơi vì nó sẽ tạo ra sự nói lắp, gpus bận rộn với đồ họa và được coi là nút cổ chai trong hệ thống khi chơi game. giải pháp tối ưu sẽ được sử dụng đầy đủ tất cả các thành phần trong một máy tính. do đó, ví dụ, công cụ Physx của nvidia, theo mặc định, thực hiện các phép tính trên cpu khi gpu được sử dụng đầy đủ.

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.