2012-06-12 30 views
16

Tôi biết câu hỏi chỉ liên quan đến lập trình một phần vì câu trả lời tôi muốn nhận được ban đầu từ hai câu hỏi sau:Tại sao không sử dụng GPU làm CPU?

Tại sao số lõi CPU quá thấp (so với GPU)? và Tại sao chúng tôi không sử dụng GPU thay vì CPU, chỉ GPU hoặc CPU? (Tôi biết rằng GPU là chuyên ngành trong khi CPU là nhiều hơn cho nhiều nhiệm vụ, vv). Tôi cũng biết rằng có những hạn chế về bộ nhớ (Host vs GPU) cùng với khả năng chính xác và cache. Tuy nhiên, về mặt so sánh phần cứng, các GPU so sánh CPU/GPU cao cấp có hiệu suất cao hơn nhiều.

Vì vậy, câu hỏi của tôi là: Chúng ta có thể sử dụng GPU thay vì CPU cho hệ điều hành, ứng dụng, vv

Lý do tôi đặt câu hỏi này là vì tôi muốn biết lý do tại sao máy tính hiện nay vẫn đang sử dụng 2 đơn vị xử lý chính (CPU/GPU) với hai bộ nhớ chính và hệ thống bộ nhớ đệm (CPU/GPU) ngay cả khi nó không phải là một cái gì đó mà một lập trình viên muốn.

+2

Câu trả lời ngắn: CPU chung và CPU chuyên ngành. – asawyer

+1

Tôi đồng ý, nhưng tại sao không tạo "GPU mục đích chung"? Các lập trình viên phải học cả ngôn ngữ CPU (C++, Matlab, Python, vv) và GPU (OpenGL, OpenCL, DirectX, vv) vì các mục đích chung và chuyên dụng, trong khi một hệ thống xử lý mục đích chung sẽ làm cả hai. – Maiss

+1

Tôi đã hỏi một câu hỏi liên quan một thời gian ngắn có một số phản hồi tốt ... http://stackoverflow.com/questions/1126989/what-future-does-the-gpu-have-in-computing –

Trả lời

10

GPU được thiết kế để xử lý liên quan đến đồ họa (hiển nhiên), vốn vốn là một cái gì đó được hưởng lợi từ việc xử lý song song (thực hiện nhiều tác vụ/tính toán cùng một lúc). Điều này có nghĩa là không giống như các CPU hiện đại, như bạn có thể biết thường có 2-8 lõi, GPU có hàng trăm lõi. Điều này có nghĩa là chúng rất phù hợp để xử lý những thứ như dò tia hoặc bất kỳ thứ gì khác mà bạn có thể gặp phải trong trò chơi 3D hoặc hoạt động chuyên sâu đồ họa khác.

Mặt khác, CPU có số lõi tương đối hạn chế vì các tác vụ mà một CPU gặp phải thường không được hưởng lợi từ việc xử lý song song gần như hiển thị cảnh 3D. Trong thực tế, có quá nhiều lõi trong một CPU thực sự có thể làm giảm hiệu suất của một máy tính, vì bản chất của các nhiệm vụ mà CPU thường làm và thực tế là rất nhiều chương trình sẽ không được viết để tận dụng nhiều lõi . Điều này có nghĩa là để duyệt internet hoặc hầu hết các tác vụ trên máy tính để bàn khác, một CPU có một số lõi mạnh sẽ phù hợp hơn với công việc so với một GPU có nhiều lõi nhỏ hơn.

Một điều cần lưu ý là nhiều lõi hơn thường có nghĩa là cần nhiều năng lượng hơn.Điều này có nghĩa là điện thoại hoặc máy tính xách tay 256 lõi sẽ khá không thực tế với quan điểm về sức mạnh và nhiệt, chưa kể đến những thách thức và chi phí sản xuất.

+1

Cho dù nhiều lõi trong CPU có lợi hơn hay không phụ thuộc vào tính toán và mức độ phù hợp của nó như thế nào để song song – Attila

+0

Cảm ơn AUAnonymous. Tuy nhiên, bạn có thể giải thích làm thế nào một CPU đa lõi (>> 10 lõi) sẽ làm giảm hiệu suất? Tôi tò mò về điều đó vì những gì tôi đã học được từ lập trình OpenCL. Giới hạn duy nhất là truy cập bộ nhớ (tốc độ và số lần tìm kiếm), nhưng có 4 mức bộ nhớ đệm/bộ nhớ sẽ giải quyết được vấn đề đó, phải không? – Maiss

+1

Để thử và trả lời câu hỏi của bạn, nó chỉ có thể làm suy giảm hiệu suất, tùy thuộc vào nhiệm vụ, nhưng nói chung, giả sử chi phí bằng nhau, một cpu có nhiều lõi hơn sẽ có tốc độ đồng hồ thấp hơn một với ít hơn. Điều này có nghĩa rằng nếu một nhiệm vụ không được hưởng lợi nhiều từ việc xử lý song song, CPU có ít lõi hơn sẽ có thể thực hiện tác vụ nhanh hơn nhờ tốc độ đồng hồ cao hơn. Một điều cần lưu ý là đó là một chương trình đã không được viết để tận dụng lợi thế của nhiều lõi, sau đó các lõi phụ sẽ gần như bị "lãng phí" bởi vì chúng không được sử dụng hiệu quả. – lyallcooper

12

Các GPU hiện tại thiếu nhiều cơ sở của một CPU hiện đại thường được coi là quan trọng (quan trọng, thực sự) đối với những thứ như hệ điều hành.

Ví dụ: một hệ điều hành thường sử dụng bộ nhớ ảo và phân trang để quản lý quy trình. Phân trang cho phép hệ điều hành cung cấp cho mỗi quá trình không gian địa chỉ riêng của nó, (gần như) hoàn toàn bị cô lập khỏi mọi quy trình khác. Ít nhất là dựa trên thông tin có sẵn công khai, hầu hết các GPU không hỗ trợ phân trang ở tất cả (hoặc ít nhất là không theo cách mà một hệ điều hành cần).

GPU cũng hoạt động ở tốc độ đồng hồ thấp hơn nhiều so với CPU. Do đó, chỉ chỉ mang lại hiệu suất cao cho các sự cố song song đáng xấu hổ. CPU thường cung cấp hiệu suất cao hơn nhiều cho mã luồng đơn. Hầu hết các mã trong một hệ điều hành không phải là song song cao - trên thực tế, rất khó để tạo ra song song (ví dụ, trong nhiều năm, Linux có một khóa khổng lồ để đảm bảo chỉ có một luồng được thực thi hầu hết mã nhân tại bất cứ thời gian nào). Đối với loại nhiệm vụ này, một GPU sẽ không thể cung cấp bất kỳ lợi ích nào.

Từ quan điểm lập trình, GPU là một phước lành hỗn hợp (tốt nhất). Mọi người đã dành nhiều năm làm việc trên các mô hình lập trình để làm cho lập trình một GPU thậm chí nửa chừng lành mạnh, và thậm chí như vậy nó khó khăn hơn nhiều (nói chung) hơn lập trình CPU. Do khó khăn trong việc có được những thứ tương đối tầm thường để hoạt động tốt trên GPU, tôi không thể tưởng tượng việc cố viết bất cứ thứ gì thậm chí gần như lớn và phức tạp như một hệ điều hành để chạy trên một.

+0

Cảm ơn Jerry, cả hai câu trả lời: AUAnonymous's và cập nhật của bạn là cái tôi đang tìm kiếm. Tôi đánh giá cao nó. – Maiss

0

Thông thường hệ điều hành khá đơn giản, nếu bạn nhìn vào cấu trúc của chúng. Nhưng song song chúng sẽ không cải thiện được tốc độ nhiều, chỉ tốc độ đồng hồ thô mới có thể thực hiện được.

GPU chỉ đơn giản là thiếu các bộ phận và rất nhiều hướng dẫn từ bộ hướng dẫn của họ mà một hệ điều hành cần, đó là một vấn đề tinh tế. Chỉ cần nghĩ về các tính năng ảo hóa (Intel VT-x hoặc AMD-v của AMD).

lõi GPU giống như kiến ​​câm, trong khi CPU giống như một con người phức tạp, vì vậy để nói. Cả hai đều có mức tiêu thụ năng lượng khác nhau vì điều này và tạo ra một lượng nhiệt rất khác nhau.

Xem câu trả lời siêu người dùng mở rộng này here để biết thêm thông tin.

Các vấn đề liên quan