Tại sao máy tính không đi kèm với phần cứng chuyên dụng như mạng sắp xếp?


10

Thay vì lập trình theo cách chúng ta làm, tại sao chúng ta không tạo ra các thông số kỹ thuật của các tác vụ phổ biến như "sắp xếp", sau đó để môi trường biên dịch nó để sử dụng tốt nhất phần cứng của nó? Bằng cách này, chúng tôi có thể vận chuyển máy tính với phần cứng chuyên dụng mới như sắp xếp mạng và nó sẽ tự động hoạt động với mã hiện có.


2
Mua một bo mạch PCI PCI và thực hiện bất kỳ tiện ích mở rộng nào bạn thích.
SK-logic

Phần cứng không phải là phép thuật. Nhiều thứ không thể được tăng tốc nhiều (hoặc hoàn toàn) bởi phần cứng chuyên dụng, và thậm chí nếu có thể, phần cứng hiện có thường phải được điều chỉnh (hoặc ít nhất là được biên dịch lại). Xem yosefk.com/blog/its-done-in-hardware-so-its-cheap.html


3
@WorldEngineer Tôi không thấy cách đó vào hình ảnh. Người dùng trung bình của bạn không biết 80% những thứ trong CPU hiện đại là để làm gì, họ rất vui vì họ được bảo rằng chương trình của họ nhanh hơn (và điều này có một sự thật). Nếu việc sắp xếp thực sự phổ biến như OP cho rằng và có thể được tối ưu hóa bằng phần cứng chuyên dụng, họ sẽ đặt nó bên cạnh công cụ dự đoán chi nhánh ("cái gì, làm vườn?"), Phát hành thông cáo báo chí cho biết họ đã tạo ra các ứng dụng X và Y 5% nhanh hơn và bán nó

1
Điều này nhắc nhở tôi về ý tưởng của Conservation Cores , được nhắm mục tiêu cho hiệu quả năng lượng hơn là hiệu suất cao nhất.
Paul A. Clayton

Câu trả lời:


19

Trước hết, máy tính đi kèm với phần cứng chuyên dụng . Mỗi máy tính xách tay và máy tính để bàn được bán trong một vài năm nay đều có bộ đồng xử lý chuyên dụng, Bộ xử lý đồ họa, xử lý các thuật toán xử lý hình ảnh, như các ứng dụng video và chơi game yêu cầu. Máy tính rất lớn ( ví dụ , "siêu máy tính", hệ thống Z gia đình của IBM) có một loạt các bộ vi xử lý chuyên để xử lý chế biến số ( "xử lý vector"), vv .

Thứ hai, sắp xếp là một trong những khía cạnh được nghiên cứu tốt nhất về điện toán, và hóa ra nó quá phức tạp để xây dựng thành phần cứng cho nhiều trường hợp đơn giản nhất. Sắp xếp là tất cả về tốc độ và tính chính xác. Tốc độ phụ thuộc vào sự lựa chọn thuật toán, loại và biến thể của dữ liệu và khối lượng dữ liệu. Độ chính xác phụ thuộc vào loại và bối cảnh của dữ liệu. Việc sắp xếp một mảng các số nguyên có kích thước trung bình phù hợp với kích thước từ gốc của CPU là rất tích cực ( vd, 31 hoặc 63 bit cộng với dấu). Sắp xếp các chuỗi ký tự chứa nhiều hơn các giá trị ASCII là vô cùng phức tạp - IBM đã xuất bản một cuốn sách hơn 500 trang cách đây 20 năm chỉ thảo luận về các vấn đề của các bộ ký tự trong bối cảnh biên giới quốc gia và cách sử dụng phổ biến. Và sau đó là câu hỏi về dữ liệu không liền kề - sắp xếp một danh sách được liên kết liên quan đến việc đuổi theo con trỏ trên toàn bộ nhớ.


10

Vấn đề chính là các thuật toán sắp xếp (1) cần rất nhiều tính linh hoạt và (2) sẽ rất khó để tăng tốc bằng cách sử dụng phần cứng.

Một điều là các thuật toán sắp xếp đã đủ dễ dàng đủ nhanh để vượt qua băng thông bộ nhớ của bộ xử lý - bộ xử lý sẽ dành một phần lớn thời gian để chờ dữ liệu di chuyển ngược và chuyển sang bộ nhớ chính. Một bộ đồng xử lý sắp xếp tăng tốc phần cứng hoặc một lệnh sắp xếp đặc biệt sẽ có cùng một vấn đề.

Cách thức giải quyết băng thông bộ nhớ này là bằng cách sử dụng các thuật toán và cấu trúc dữ liệu tốt hơn có "địa phương" tốt hơn và vẫn còn nhiều việc phải làm trong lĩnh vực này, đặc biệt là "thuật toán lãng quên bộ nhớ cache" (chúng không biết theo nghĩa là chúng hoạt động cũng không phân biệt các chi tiết của bộ đệm, trong khi các thuật toán "nhận biết bộ đệm" được điều chỉnh cho một kích thước trang bộ đệm cụ thể, v.v.).

Ngược lại, các ứng dụng phương tiện (âm thanh và đồ họa, đặc biệt là đồ họa 3D) sử dụng một số cấu trúc rất lặp đi lặp lại - tất nhiên là có tính linh hoạt, nhưng nó được xây dựng trên nền tảng lớn và có cấu trúc rất tốt. Điều đó cho phép tăng tốc đồ họa để bắt đầu đơn giản với những thứ như Blits (một hoạt động sao chép khối có cấu hình nhưng vẫn rất có cấu trúc) và vẽ đường thẳng / đa giác. Điều đó có nghĩa là khi việc xử lý đồ họa và âm thanh trở nên tinh vi hơn, các hoạt động của vectơ trở thành mục tiêu rõ ràng để tối ưu hóa - MMX đầu tiên (vectơ số nguyên) sau đó là SSE (vectơ của phao). Điều đó có nghĩa là có một cấu trúc được xác định khá rõ ràng về cách thức hoạt động của một công cụ đồ họa 3D khi đường ống đồ họa 3D chức năng cố định cũ được chuyển sang phần cứng đồ họa 3D.

Tuy nhiên, với đồ họa 3D, những gì đã từng được thực hiện trong phần cứng giờ đây được thực hiện bằng phần mềm để tạo sự linh hoạt - ví dụ, shader là phần mềm, đó là cách chúng ta có được một loạt các shader khác nhau tạo ra sự xuất hiện của các vật liệu khác nhau. Tuy nhiên, phần mềm đó vẫn hoạt động theo cách có cấu trúc hơn nhiều so với phần mềm thông thường, và do đó vẫn có thể sử dụng nền tảng phần cứng chuyên dụng hơn nhiều. Đó là lý do tại sao card đồ họa của bạn giờ đây có thể tăng tốc mọi thứ, từ vật lý đến bẻ khóa mật khẩu - các ứng dụng phù hợp với cùng một mô hình và có thể được triển khai hiệu quả bằng cách sử dụng các bộ hướng dẫn mà bộ xử lý đồ họa hiện đại cung cấp.

Bộ xử lý đồ họa bây giờ là hậu duệ tinh thần hoặc thực tế của bộ xử lý tín hiệu số, mà (và có lẽ vẫn là) một loại bộ xử lý chuyên dụng để xử lý tín hiệu số (ví dụ âm thanh).

Điều này dẫn đến một điểm cuối cùng - các thuật toán sắp xếp có thể được tăng tốc bằng phần cứng. Tùy thuộc vào dữ liệu của bạn, việc sắp xếp có thể được xử lý bằng cách sử dụng các lệnh MMX hoặc SSE (một lệnh đa dữ liệu) trên bộ xử lý của bạn, nhưng có lẽ không có nhiều điểm vì vấn đề băng thông bộ nhớ - có thể bạn sẽ tiết kiệm điện hơn một chút theo cách đó, mặc dù. Tuy nhiên, bạn cũng có thể sử dụng phần cứng đồ họa của bạn. Bằng cách đó, bạn có thể hưởng lợi từ băng thông bộ nhớ thường tốt hơn nhiều cho các card đồ họa. Bạn sẽ không thể thay thế tất cả các loại theo cách này, nhưng chắc chắn là có thể và có thể được thực hiện khi thích hợp.

IOW vì các vấn đề kinh tế và thực tế khác nhau, thiết kế phần cứng đặc biệt để tăng tốc một nhiệm vụ tương đối hẹp như sắp xếp không thực sự có ý nghĩa. Một tính năng tăng tốc phạm vi tác vụ rộng hơn hoặc làm cho phần cứng tăng tốc hiện có áp dụng cho phạm vi tác vụ rộng hơn thường có ý nghĩa hơn nhiều.


3

Nhưng họ làm! Chúng được gọi là phần mở rộng tập lệnh. (Những thứ như SSE và tương tự)

Một số nhiệm vụ có triển khai rất tốt đẹp trong phần mềm. Thông thường những triển khai đó là đủ tốt để thực hiện công việc, vì vậy không cần phần cứng chuyên dụng. Nếu bạn tạo ra một số loại phần cứng chuyên dụng, bạn cần phải có một phạm vi ứng dụng rất rộng để làm cho nó đáng giá.

Nếu bạn nhìn vào phần cứng có thể làm cho công việc này hoạt động, tôi đoán là bạn sẽ nhìn vào thứ gì đó giống như đồ họa. Như bạn có thể thấy với các GPU, chip sẽ trở nên đắt hơn nhiều trong khi nó không thể áp dụng cho nhiều ứng dụng.


Tôi sẽ phải google cho SSE, nhưng, trước, sắp xếp có lẽ là phổ biến. Được thực hiện trên cấp độ phần cứng?
MaiaVictor

Ngoài ra, như chúng tôi đang ở đó, bạn muốn giới thiệu sách?
MaiaVictor

Tôi chỉ nói về việc tối ưu hóa cụ thể công việc đang được thực hiện trên các bộ xử lý kiểu CPU nói chung, vì các mạng sắp xếp được sử dụng làm ví dụ. Tôi không biết nếu SSE hoặc bất kỳ tập lệnh nào khác bao gồm sắp xếp tối ưu hóa cụ thể. Tôi đã thực hiện các mạng sắp xếp của google và vì có các triển khai chung được tối ưu hóa, tôi nghĩ rằng việc triển khai phần mềm cũng có thể thực hiện công việc tốt nếu việc triển khai được thực hiện đúng.
Onno

Tôi phải chỉ ra rằng hầu hết các tiện ích mở rộng tập lệnh hoạt động ở mức thấp hơn sau đó là mạng sắp xếp mà bạn đã sử dụng làm ví dụ, nhưng không thể đưa ra tối ưu hóa đa đăng ký có thể thực hiện sắp xếp theo cách này. Nhưng câu hỏi cho các nhà sản xuất CPU sẽ là: "liệu nó có trả đủ để biện minh cho chi phí không?".
Onno
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.