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


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 bằng cách sử dụng CUDA và như thế, AI, thuật toán băm (nghĩ bitcoin) và những 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ể loại bỏ CPU và tự sử dụng GPU? Điều gì làm cho GPU nhanh hơn rất nhiều so với CPU?


352
2017-07-10 13:31


gốc


làm cách nào để 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 những người khác trả lời bình chọn? Tôi nghĩ rằng tôi quá vội vàng trong việc chấp nhận một câu trả lời: O - ell
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ạc". Họ đang dần tăng lên đầu với số phiếu bầu lên do cơ chế thị trường hiệu quả của StackExchange được thiết kế tuyệt vời ;-) Tôi muốn đề nghị chờ đợi lâu hơn một chút 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, nhân tiện. Có thể có vẻ hiển nhiên, nhưng nó không phải là tất cả. Cảm ơn bạn đã hỏi nó! - Ellie Kesselman
Loại giống như yêu cầu "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 xe"? - vartec
Không, bởi vì nó không phải là RISC so với CISC. Đó là một trong những nguyên tắc cơ bản về khoa học máy tính khác, hơi ngụy trang. nó là "Tại sao chúng tôi giảm tải công việc từ bộ xử lý trung tâm lên bộ vi xử lý I / O?". - JdeBP
@ 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ả những người 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 được rải rác rải rác, thậm chí một chiếc taxi có thể chỉ tốt bằng xe buýt và chi phí của xe buýt có thể có nhiều taxi. - supercat


Các câu trả lời:


TL; DR trả lời: 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 hệ điều hành hiện đại, chúng không thích hợp để thực hiện hầu hết quá trình xử lý trong tính toán hàng ngày. Chúng phù hợp nhất với các hoạt động tính toán chuyên sâu 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 được sử dụng để chỉ hiển thị đồ họa; khi công nghệ tiên tiến, số lõi lớn trong GPU liên quan đến 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ý nhiều luồng dữ liệu song song đồng thời, 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 Turing hoàn thành và có thể được lập trình để chạy bất kỳ chương trình nào mà CPU có thể chạy). Các tính năng bị thiếu từ 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ể khiến chúng phù hợp hơn với các nhiệm vụ khác nhau. GPU có thể xử lý 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ý phức tạp hoặc nặng nề 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ý đồng thời nhiều luồng một cách hiệu quả.

Kết quả là, GPU không phù hợp để xử lý các tác vụ không được hưởng lợi đáng kể từ hoặc không thể song song, bao gồm nhiều ứng dụng phổ biến của người tiêu dùng 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 đặc biệt cho một GPU để nó hoạt động, và các kỹ thuật khác nhau đáng kể được yêu cầu để lập trình GPU. Các kỹ thuật khác nhau này bao gồm các ngôn ngữ lập trình mới, sửa đổi ngôn ngữ hiện có và các mô hình lập trình mới phù hợp hơn để thể hiện tính toán như một phép toán 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, xem các bài viết trên Wikipedia xử lý luồng và tí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 điều khiển các số dấu phẩy động kép 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 có thể song song cao, chẳng hạn như trong máy tính khoa học, nơi một loạt các thẻ tính toán GPU chuyên dụng có thể là một sự thay thế khả thi cho một tính toán cụm như trong NVIDIA siêula cá nhân siêu máy tính. Người tiêu dùng có GPU hiện đại, những người có kinh nghiệm với Folding @ home có thể sử dụng chúng để đóng góp Ứng dụng khách 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 sức hơn cho dự án (hãy nhớ đọ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 cách sử dụng PhysX, tăng tốc mã hóa và giải mã video và thực hiện các tác vụ tính toán chuyên sâu khác. Đó là những loại nhiệm vụ mà GPU phù hợp nhất để thực hiện.

AMD đang đi tiên phong trong một thiết kế bộ vi xử lý được gọi là Đơn vị xử lý tăng tốc (APU) kết hợp lõi CPU x86 thông thường với GPU. Cách tiếp cận này cho phép hiệu suất đồ họa vượt trội 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 các GPU rời rạc đắt tiền hơn) và cho phép một 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ộ vi 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ố chip với Intel Iris Pro Graphics. Khi công nghệ tiếp tục thăng tiến, chúng ta sẽ thấy mức độ hội tụ ngày càng tăng của những bộ phận một lần này. AMD hình dung một tương lai nơi mà CPU và GPU là một, có khả năng làm việc liền mạch với nhau trên cùng một tác vụ.

Tuy nhiên, nhiều nhiệm vụ được thực hiện bởi các hệ điều hành và các ứng dụng PC vẫn phù hợp hơn với các CPU và cần nhiều công việc để tăng tốc một chương trình bằng cách 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à vì GPU đòi hỏi 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ó.


373
2017-07-10 14:00



Giống như câu trả lời này, tôi nghĩ lý do chính là chúng ta không có các ngôn ngữ lập trình dòng chính tốt để đối phó với các kiến ​​trúc song song như thế này. Chúng tôi đã phải vật lộn 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ù các CPU và GPU đa nhân là một thực tế và chúng tôi sẽ phải đưa ra các mô hình lập trình mới để giải quyết vấn đề này. - Soren
Đáng chú ý rằng Intel đã làm việc trên Larrabee kiến trúc (cho con đường quá dài) mà về cơ bản là một con chip với một số lượng lớn các lõi x86 trên nó. - Chris S
Câu trả lời tuyệt vời để thảo luận về các 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 một đ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, các 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
"chúng tôi không có các ngôn ngữ lập trình dòng chính tốt để đối phó với các kiến ​​trúc song song như thế này". - Haskell, OCaml, Scheme, F #, Erlang và khá nhiều ngôn ngữ lập trình hàm khác với đa luồng rất tốt. Tất cả những gì tôi đã đề cập là chủ đạo. - BlueRaja - Danny Pflughoeft
@BlueRaja - chúng tôi nhận thức được những ngôn ngữ này, định nghĩa của bạn về luồng chính phải khác với tôi :-) - Soren


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

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

GPU là một CPU chuyên dụng, đượ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 / Single Instruction Multiple Data), tất cả chúng đều áp dụng cùng một thao tác. 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ó nhiều chi phí thấp trong việc giải mã các lệnh, tuy nhiên làm việc trong các khối lớn có nghĩa là có nhiều đơn vị hoạt động song song hơn, vì vậy nó sử dụng nhiều bóng bán dẫn nhiều hơn nữa để thực hiện một lệnh GPU đơn (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 đơn vị dữ liệu càng nhanh càng tốt. Vì nó chỉ cần làm việc với một datum đơn, nên số lượng bóng bán dẫn cần thiết để thực hiện một lệnh đơn giản 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 chi nhánh tốt hơn, ảo hóa tốt hơn kiến trúc và các lược đồ bộ nhớ đệm / đường ống phức tạp hơn. Các chu trình chỉ dẫn của nó cũng nhanh hơn.

Lý do tại sao chúng tôi vẫn đang sử dụng CPU là không phải bởi vì x86 là kiến ​​trúc của CPU và Windows được viết cho x86, lý do tại sao chúng ta vẫn đang sử dụng CPU là do loại nhiệm vụ mà một hệ điều hành cần làm, tức là đưa ra quyết định, 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ả đều 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 một 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 thu đượ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ả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.


245
2017-07-10 20:22



Đây có lẽ là câu trả lời hay 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. Đối với 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 chuyển thành CPU. Và do đó câu hỏi là câu trả lời. - surfasb
1 cho đây là câu trả lời hay 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 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. Một trường hợp đơn giản có thể được nhìn thấy khi thay đổi kích thước của một 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 ngữ cảnh, đọc kết quả trả về: stackoverflow.com/a/8687732/303612 Các hoạt động nhỏ hơn có thể được thực hiện trong bộ nhớ đệm trên CPU và băng thông bộ nhớ vượt trội so với kiến ​​trúc PCI-E hiện tại - Dr. Andrew Burnett-Thompson
@ Dr.AndrewBurnett-Thompson: đó là bởi 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 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ần phải sắp xếp dữ liệu giữa bộ nhớ chính và bộ nhớ GPU. - Lie Ryan
Không lạc quan, nó không phải là chi phí trên băng thông. Nếu một bộ xử lý có cấu 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 Là bộ nhớ chính. Không có chi phí chuyển khoản nào được nói đến ở nơi đầu tiên vì không có chuyển khoản. Đây không phải là giả thuyết bằng cách này, 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 không sao chép giữa CPU và GPU. - Lie Ryan


GPU thiếu:

  1. Bộ nhớ ảo (!!!)
  2. Phương tiện giải quyết các thiết bị không phải là bộ nhớ (ví dụ: bàn phím, máy in, bộ nhớ phụ, v.v.)
  3. Ngắt

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

Chúng cũng tương đối chậm với số học chính xác gấp đôi (khi so sánh với hiệu suất số học chính xác đơn) *, và lớn hơn nhiều (về kích thước của silicon). 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 hơn làm chậm hơn. 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, các GPU bị mất so với các CPU có cùng khối lượng công việc.

CHỈNH SỬA: Xin lưu ý rằng phản hồi này được viết vào năm 2011 - GPU công nghệ 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: P

* Một số GPU không chậm ở số học chính xác gấp đôi, chẳng hạn như 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 nằm trong hầu hết các máy của người tiêu dùng.


75
2017-07-10 21:17



@Cicada: Bạn có một tham chiếu 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 sẽ không hoạt động tốt trong trường hợp đó. (ví dụ: sẽ không có lợi thế vượt trội so với CPU - và mức tiêu thụ điện năng DISadvantage) - Billy ONeal
Có, các thiết bị Fermi như bạn đã nói (với CUDA 4.0 và sm_20), hỗ trợ nhảy gián tiếp (và do đó các phương pháp ảo C + +, kế thừa, vv). - Angry Lettuce
544 GigaFLOPS từ một GPU cũ $ 300 2 năm chậm? - Ben Voigt
@Ben: Bạn chỉ nhận đượ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 khác nhau. (Đó là chỉ với tất cả 1600 lõi trên chip đó chạy song song, chạy về cơ bản cùng một lệnh lặp đi lặp lại ... và thậm chí đó là lý thuyết hơn là thực tế perf) - Billy ONeal
@ Billy: Nhưng đó là chậm chạp trên một lớp học cụ thể của thuật toán, không chậm trên số học chính xác gấp đôi (đó 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


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

Mà bạn muốn có như là nhà phát triển đồng nghiệp của bạn, một anh chàng siêu nhanh, hoặc 100 bản sao nhanh mà không thực sự nhanh, nhưng tất cả đều phải thực hiện các hành động tương tự cùng một lúc?

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

Đối với một số hành động, các dòng vô tính 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 nhàn rỗi trong khi một bản sao ghi 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).


37
2017-07-11 15:39



Tôi thậm chí có thể ... cả hai? - Kevin Panko
@ Kevin: Có, nhưng bạn cần một máy tính với cả hai một CPU và một GPU! Nếu chỉ có một điều như vậy! - Joachim Sauer
Tương tự tuyệt vời. Sẽ nhớ điều này. - Mayo


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

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

Vấn đề là CPU và GPU là những giải pháp rất khác nhau đối với 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 họ vẫn nằm trong miền của họ. Chúng tôi không thể thay thế CPU bằng GPU vì CPU đang ngồi ở đó làm công việc của nó tốt hơn nhiều so với GPU có thể, đơn giản chỉ vì GPU không được thiết kế để thực hiện công việc và CPU.

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


23
2017-07-10 17:51



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 thứ cùng một lúc. - danielcg
@ danielcg25: Và hầu hết các GPU hiện đại đều được thiết kế để thực hiện 256, 512, 1024 thứ cùng một lúc (GTX 680 có 1536 Lõi CUDA). Mỗi lõi CPU riêng lẻ là một thực thể riêng biệt, nhưng điều này không đúng với GPU. - Phoshi
@ danielcg25: Tôi biết, nhưng một bình luận với một sự hiểu lầm cơ bản (mặc dù có chủ ý) về câu trả lời có thể gây hại nếu ai đó đọc nó mà không biết chủ đề. "Là một ass" trong ý nghĩa đó là không thực sự đánh giá cao trên SE vì nó làm giảm tín hiệu: tỷ lệ tiếng ồn. - Phoshi
Tôi chỉ cung cấp một số thông tin. Hầu hết các máy tính ngày 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 GPU mà làm 100s của sự vật cùng một lúc. - danielcg
@ danielcg25: Đó là một loại xử lý khác, mặc dù, đó là những gì câu hỏi là về. Mỗi lõi CPU có hiệu quả riêng biệt, làm việc với các khối dữ liệu riêng của nó và các quy trình riêng của nó. Mỗi lõi CPU thực hiện một nhiệm vụ khác nhau, riêng biệt với nhau, và chúng không tăng quy mô tuyến tính - một octo-core không phải là hai lần hữu ích như một lõi tứ không phải là hai lần hữu ích như một lõi kép. Mặt khác, lõi GPU thực hiện nhiệm vụ tương tự 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


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?

GPU chỉ là một CPU chuyên dụng của cạc đồ 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 lên đến ngang bằng trong thực hiện điểm song song và nổi.

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


14
2017-07-10 17:57



Tại sao một downvote? - jkj
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 x86 duy nhất; và thậm chí một cái đã được chuyển sang bộ vi xử lý alpha và ARM, không được cung cấp thương mại vào lúc này. - Javier
Được. Loại bỏ phần cuối cùng là ý kiến ​​của tôi về hỗ trợ hệ điều hành chủ đạo cản trở thay đổi đối với kiến ​​trúc mới. Có thể không nằm trong phạm vi của câu trả lời. - jkj


Tôi có thể bị nhầm lẫn khủng khiếp ở đây, và đang nói từ rấ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 hiện GPU ("lõi") có một không gian địa chỉ rất hạn chế so với một CPU.

  • Các đơn vị thực thi GPU không thể xử lý phân nhánh hiệu quả.

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

Tôi đã luôn nghĩ cách mà các đơn vị thực thi GPU có ý nghĩa giống như Playstation 3 "SPE", 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 nó, và sau đó nhổ 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ớ địa chỉ như "CPE" chính nhưng ý tưởng là dành từng "SPE" cho một nhiệm vụ cụ thể, tuần tự. Đầu ra của một thiết bị có thể nạp đầu vào của một thiết bị khác.

Các đơn vị thực hiện 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 đó.

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 "streaming" này thì bạn có một nhiệm vụ không thể được so sánh hiệu quả và GPU không nhất thiết phải 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 số ít.


11
2017-07-10 15:55



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