Chúng ta có thực sự cần quá nhiều xPU không?

"Trong những năm gần đây, các thông báo về kiến ​​trúc bộ xử lý mới được đưa ra hầu như mỗi ngày, với ba chữ cái viết tắt - TPU, IPU, NPU. Nhưng điều gì thực sự phân biệt chúng? Có thực sự có rất nhiều kiến ​​trúc bộ xử lý độc đáo hay đã có điều gì khác xảy ra?

"

Trong những năm gần đây, hầu như ngày nào cũng có thông báo về các kiến ​​trúc vi xử lý mới, và một từ viết tắt gồm ba chữ cái-TPU, IPU, NPU đã được đưa ra. Nhưng điều gì thực sự phân biệt chúng? Có thực sự có rất nhiều kiến ​​trúc bộ xử lý độc đáo hay đã có điều gì khác xảy ra?

Vào năm 2018, John L. Hennessy và David A. Patterson đã có một bài giảng về Turing mang tên “Kỷ nguyên vàng mới của kiến ​​trúc máy tính”. Họ quan tâm đến CPU và sự phát triển của nó, nhưng đây chỉ là một phần nhỏ của toàn bộ phương trình. Nhà nghiên cứu IP Arteris và kiến ​​trúc sư hệ thống Michael Frank cho biết: “Từ góc độ CPU, hầu hết các xPU này không phải là bộ vi xử lý thực sự”. “Chúng giống như một GPU, một bộ tăng tốc cho các khối lượng công việc đặc biệt. Và chúng có rất nhiều sự đa dạng bên trong. Máy học là một loại bộ xử lý, bạn có thể gọi chung chúng là bộ tăng tốc học máy, nhưng chúng tăng tốc phần xử lý của rất nhiều loại. "

Bản chất của bộ vi xử lý có thể được rút gọn thành ba điều. Manuel Uhm, giám đốc tiếp thị chip tại Xilinx cho biết: “Trong phân tích cuối cùng, nó quay trở lại kiến ​​trúc tập lệnh (ISA). “Điều này xác định những gì bạn muốn làm. Sau đó, bạn có I / O và bộ nhớ, hỗ trợ ISA và các nhiệm vụ mà nó đang cố gắng hoàn thành. Đây sẽ là một khoảng thời gian rất thú vị trong tương lai, bởi vì chúng ta sẽ thấy nhiều hơn hai hoặc ba năm qua Thời gian để đổi mới và thay đổi nhiều hơn ”.

Nhiều kiến ​​trúc mới không phải là bộ xử lý đơn lẻ. Pierre-Xavier Thomas, Giám đốc Nhóm Cadence cho biết: “Những gì chúng tôi thấy là sự kết hợp của các loại bộ xử lý hoặc công cụ lập trình khác nhau tồn tại trong cùng một SoC hoặc cùng một hệ thống”. Công nghệ và tiếp thị chiến lược. “Phân phối các tác vụ phần mềm tới các phần cứng hoặc công cụ lập trình linh hoạt khác nhau. Tất cả các bộ xử lý có thể chia sẻ một API chung nhưng miền thực thi sẽ khác nhau. Ở đây, bạn thực sự sẽ thấy các loại xử lý khác nhau với các loại đặc điểm khác nhau ”.

Thực tế là hầu hết những cái tên đều là tiếp thị.

Simon Davidmann, Giám đốc điều hành của Imperas Software cho biết: “Vấn đề là mọi người sử dụng những cái tên và từ viết tắt này cho hai mục đích khác nhau. “Một được sử dụng để giải thích kiến ​​trúc của bộ xử lý, chẳng hạn như SIMD (Đa dữ liệu hướng dẫn đơn). Cái còn lại xác định phân đoạn ứng dụng mà nó đang giải quyết. Vì vậy, nó có thể xác định kiến ​​trúc bộ xử lý, hoặc một cái gì đó giống như tên thương hiệu của đơn vị xử lý tensor (TPU). Họ đang đặt tên cho các kiến ​​trúc không đồng nhất hoặc đồng nhất của họ, không phải các bộ xử lý riêng lẻ ”.

Một chút về lịch sử

Bốn mươi năm trước, mọi thứ đơn giản hơn nhiều. Vào thời điểm đó đã có một đơn vị xử lý trung tâm (CPU) và có nhiều biến thể của nó, nhưng về cơ bản chúng đều là những bộ xử lý hoàn chỉnh Turing với kiến ​​trúc von Neumann. Mỗi loại có một tập lệnh khác nhau làm cho chúng hiệu quả hơn cho một số tác vụ nhất định và có rất nhiều cuộc thảo luận về lợi thế tương đối của tập lệnh phức tạp (CISC) và tập lệnh rút gọn (RISC).

Sự xuất hiện của RISC-V đã gây nhiều chú ý cho ISA. “Mọi người muốn hiểu ISA bởi vì ISA xác định mức độ tối ưu hóa của bộ xử lý cho các tác vụ đã xác định,” Uhm của Xilinx cho biết. “Họ có thể nhìn vào ISA và bắt đầu chu trình tính toán. Nếu một ISA có các lệnh gốc và chạy ở 1 GHz, tôi có thể so sánh nó với một ISA bộ xử lý khác, có thể yêu cầu hai lệnh cho cùng một chức năng, nhưng bộ xử lý chạy ở 1.5 GHz. Cái nào khiến tôi tiến xa hơn? Họ thực hiện các phép tính toán học cho các chức năng quan trọng ”.

Có nhiều phương pháp đóng gói cho CPU. Đôi khi IO hoặc bộ nhớ được đặt trong cùng một gói. Chúng được gọi là đơn vị vi điều khiển (MCU).

Khi modem trở nên phổ biến, các bộ xử lý tín hiệu kỹ thuật số (DSP) xuất hiện, và điểm khác biệt của chúng là chúng sử dụng kiến ​​trúc Harvard. Điều này tách bus lệnh khỏi bus dữ liệu. Một số người trong số họ cũng đã triển khai kiến ​​trúc SIMD để làm cho việc xử lý dữ liệu hiệu quả hơn.

Việc tách biệt các hướng dẫn và dữ liệu là để cải thiện thông lượng, mặc dù nó hạn chế một số lập trình biên có thể được thực hiện, chẳng hạn như các chương trình tự viết. “Thông thường, các điều kiện biên không phải là tính toán,” Uhm nói. “Đó là I / O hoặc bộ nhớ ngày càng tăng. Ngành công nghiệp đang chuyển từ việc tăng sức mạnh tính toán sang đảm bảo rằng có đủ dữ liệu để duy trì sức mạnh tính toán và duy trì hiệu suất ”.

Khi một bộ xử lý không còn nhanh hơn nữa, chúng sẽ kết nối nhiều bộ xử lý với nhau. Các bộ xử lý này thường chia sẻ bộ nhớ và duy trì khái niệm về tính hoàn chỉnh của Turing cho từng bộ xử lý và toàn bộ cụm vi xử lý. Không quan trọng phần lõi nào của chương trình được thực thi, bởi vì kết quả là như nhau.

Sự phát triển lớn tiếp theo là đơn vị xử lý đồ họa (GPU), đã phá vỡ quy ước vì mỗi phần tử xử lý hoặc đường ống dẫn có bộ nhớ riêng và không thể được định địa chỉ bên ngoài bộ xử lý. Bởi vì bộ nhớ có giới hạn, điều này có nghĩa là nó không thể thực hiện bất kỳ tác vụ xử lý tùy ý nào mà chỉ có thể thực hiện các tác vụ có thể được đặt trong không gian bộ nhớ được cung cấp.

“Đối với một số loại chức năng nhất định, GPU là bộ xử lý rất mạnh, nhưng đường ống của chúng rất dài,” Uhm chỉ ra. “Các đường ống này cho phép bộ phận GPU liên tục xử lý dữ liệu, nhưng đến một lúc nào đó, nếu bạn phải làm mới đường ống, đó sẽ là một cú đánh lớn. Rất nhiều độ trễ và sự không chắc chắn được tích hợp trong hệ thống ”.

Mặc dù nhiều trình tăng tốc khác đã được xác định, nhưng GPU — và sau này là GPU có mục đích chung (GPGPU) — đã xác định mô hình lập trình và ngăn xếp phần mềm giúp chúng dễ sử dụng hơn so với các trình tăng tốc trước đó. Davidmann của Imperas nói: “Trong nhiều năm, một số công việc nhất định đã được chuyên môn hóa. “Có một CPU cho các chương trình tuần tự. Có một bộ xử lý đồ họa, tập trung vào việc xử lý dữ liệu cho Màn và đưa chúng ta vào một thế giới song song. Sử dụng nhiều phần tử xử lý nhỏ để thực hiện các tác vụ. Bây giờ có các nhiệm vụ học máy ”.

Những quy tắc xây dựng nào khác có thể giải thích tất cả các kiến ​​trúc mới? Trước đây, các mảng bộ xử lý thường được kết nối bằng bộ nhớ hoặc các cấu trúc liên kết mạng cố định (chẳng hạn như lưới hoặc vòng). Những gì đã nổi lên gần đây là sự kết hợp của Mạng trên chip (NoC), cho phép các bộ xử lý không đồng nhất phân tán giao tiếp theo cách linh hoạt hơn. Trong tương lai, chúng cũng có thể giao tiếp mà không cần sử dụng bộ nhớ.

Frank của Arteris cho biết: “Tại thời điểm này, NoC chỉ mang dữ liệu. “Trong tương lai, NoC có thể được mở rộng sang các khu vực khác, nơi giao tiếp giữa các máy gia tốc vượt ra ngoài dữ liệu. Nó có thể gửi lệnh, gửi thông báo,… Các yêu cầu giao tiếp của mảng bộ tăng tốc có thể khác với các yêu cầu giao tiếp của CPU hoặc SoC tiêu chuẩn. Tuy nhiên, mạng trên chip sẽ không Giới hạn bạn trong một tập hợp con. Bạn có thể tối ưu hóa và cải thiện hiệu suất bằng cách hỗ trợ các nhu cầu giao tiếp đặc biệt của máy gia tốc. ”

Kiến trúc triển khai

Một cách để phân biệt bộ xử lý là tối ưu hóa cho một môi trường hoạt động cụ thể. Ví dụ: phần mềm có thể chạy trên đám mây, nhưng bạn cũng có thể thực thi phần mềm tương tự trên thiết bị IoT vi mô. Kiến trúc triển khai sẽ rất khác nhau và sẽ đạt được các điểm hoạt động khác nhau về hiệu suất, điện năng tiêu thụ, chi phí hoặc khả năng hoạt động trong các điều kiện khắc nghiệt.

“Một số ứng dụng dành cho điện toán đám mây và hiện chúng tôi đang đưa chúng đến gần hơn với giới hạn,” Thomas của Cadence nói. “Điều này có thể là do yêu cầu về độ trễ, hoặc năng lượng hoặc sự tiêu tán công suất, sẽ yêu cầu một kiểu kiến ​​trúc khác. Bạn có thể muốn có cùng một ngăn xếp phần mềm chính xác để có thể chạy ở hai vị trí. Đám mây cần cung cấp tính linh hoạt vì nó sẽ Nhận các loại ứng dụng khác nhau, và phải có khả năng tổng hợp một số lượng lớn người dùng. Điều này đòi hỏi phần cứng trên máy chủ phải có các khả năng dành riêng cho ứng dụng, nhưng một kích thước không phải là phù hợp với tất cả mọi người ”.

ML đã tăng yêu cầu của chính nó. Thomas nói thêm: “Khi sử dụng mạng nơ-ron và học máy để xây dựng các hệ thống thông minh, bạn cần sử dụng các khung phần mềm và phần mềm chung để lập trình mạng mới và ánh xạ nó với phần cứng. “Sau đó, bạn có thể điều chỉnh ứng dụng phần mềm với phần cứng phù hợp từ quan điểm PPA. Điều này thúc đẩy nhu cầu về các loại bộ xử lý và bộ xử lý khác nhau để có thể đáp ứng những nhu cầu này ở cấp độ phần cứng ”.

Các yêu cầu này được xác định bởi ứng dụng. Frank nói: “Một công ty đã tạo ra một bộ xử lý cho các hoạt động đồ họa. “Họ tối ưu hóa và tăng tốc cách theo dõi đồ thị và thực hiện các hoạt động như sắp xếp lại thứ tự đồ thị. Có những lực lượng vũ phu khác đẩy nhanh quá trình học máy, đó là phép nhân ma trận. Truy cập bộ nhớ khác nhau đối với mọi kiến ​​trúc Đây là một vấn đề đặc biệt bởi vì khi bạn xây dựng một máy gia tốc, mục tiêu quan trọng nhất là giữ cho nó luôn bận rộn. Bạn phải chuyển càng nhiều dữ liệu càng tốt đến ALU vì nó có thể được tiêu thụ và sản xuất ”.

Nhiều ứng dụng trong số này có rất nhiều điểm chung. Davidmann nói: “Tất cả chúng đều có một số bộ nhớ cục bộ, chúng có một mạng trên chip để giao tiếp và mỗi bộ xử lý thực thi một thuật toán phần mềm đang xử lý một phần dữ liệu nhỏ. “Những công việc này được lên lịch bởi hệ điều hành chạy trên các CPU truyền thống hơn.”

Phần khó đối với các nhà thiết kế phần cứng là dự đoán những tác vụ nào họ sẽ được yêu cầu thực hiện. “Mặc dù bạn sẽ thực hiện các kiểu hoạt động tương tự trong một số lớp, nhưng mọi người đang chú ý đến sự khác biệt trong các lớp,” Thomas nói. “Để có thể xử lý mạng nơ-ron, cần phải có một số loại sức mạnh xử lý. Điều này có nghĩa là bạn cần có khả năng xử lý một phần của mạng nơ-ron theo một cách nào đó, và sau đó bạn có thể cần một kiểu hoạt động khác để xử lý một lớp khác. Sự di chuyển của dữ liệu Và lượng dữ liệu cũng đang thay đổi theo từng lớp. ”

Sự khác biệt này có thể vượt ra ngoài sự di chuyển của dữ liệu. Frank nói: “Để giải trình tự bộ gen, bạn cần thực hiện một số xử lý. “Nhưng bạn không thể sử dụng một loại máy gia tốc duy nhất để tăng tốc mọi thứ. Bạn phải xây dựng một tập hợp toàn bộ các máy gia tốc khác nhau cho các đường ống khác nhau. CPU trở thành người giám hộ của quá trình thực thi quản lý. Nó thiết lập, thực thi DMA và đưa ra quyết định giữa hai Quy trình. Hiểu và phân tích các thuật toán và xác định cách bạn muốn tối ưu hóa quá trình xử lý của chúng là một nhiệm vụ kiến ​​trúc hoàn chỉnh. ”

Một phần của quá trình yêu cầu phân vùng. “Không có loại bộ xử lý duy nhất nào có thể được tối ưu hóa cho từng tác vụ của bộ xử lý-FPGA là không tốt, CPU không tốt, GPU không tốt, DSP cũng cần thiết, ”Uhm nói. “Chúng tôi đã tạo ra một loạt các thiết bị có chứa tất cả những thứ này, nhưng khó khăn ở phía khách hàng là họ phải cung cấp thông tin thông minh để xác định phần nào của hệ thống tổng thể sẽ được nhắm mục tiêu vào bộ xử lý hoặc logic có thể lập trình, hoặc trong AI. Động cơ. Mọi người đều muốn Công cụ ma thuật tự động đó, một công cụ có thể ngay lập tức quyết định đưa nó vào CPU, đưa nó lên FPGA và đưa nó lên GPU. Công cụ đó không tồn tại cho đến ngày nay ”.

Tuy nhiên, CPU sẽ luôn đóng một vai trò nào đó. Frank nói: “CPU cần thiết để thực thi các phần không thường xuyên của chương trình. “Khả năng lập trình chung của CPU có lợi thế của nó. Nếu bạn có cấu trúc dữ liệu chuyên biệt hoặc các phép toán, nó sẽ không hoạt động tốt. CPU là một bộ xử lý đa năng và nó không được tối ưu hóa cho bất cứ thứ gì. Nó không tốt ở bất cứ điều gì. . ”

Thay đổi "trừu tượng"

Trước đây, ranh giới phần cứng / phần mềm được xác định bởi ISA và bộ nhớ liên tục có thể định địa chỉ. Khi có nhiều bộ xử lý, chúng thường được căn chỉnh theo bộ nhớ.

Frank nói: “Nhất quán là một hợp đồng. “Loại nhất quán này rất quan trọng và sẽ không biến mất. Nhưng bạn có thể tưởng tượng rằng trong một công cụ luồng dữ liệu, tính nhất quán không quan trọng lắm, bởi vì bạn chuyển dữ liệu đang di chuyển ở rìa trực tiếp từ bộ gia tốc này sang bộ gia tốc khác. Nếu bạn Phân vùng tập dữ liệu, tính nhất quán sẽ trở thành một trở ngại vì bạn sẽ tốn thêm chu kỳ. Bạn phải kiểm tra thông tin. Bạn phải cung cấp thông tin cập nhật. ”

Điều này yêu cầu một kiến ​​trúc bộ nhớ khác. “Bạn phải suy nghĩ về cấu trúc bộ nhớ, bởi vì bạn chỉ có rất nhiều bộ nhớ được kết hợp chặt chẽ với nhau,” Uhm nói. “Bạn có thể truy cập bộ nhớ liền kề, nhưng bạn sẽ nhanh chóng hết bộ nhớ liền kề và không thể truy cập kịp thời. Điều này phải được hiểu trong thiết kế. Khi công cụ trưởng thành, công cụ sẽ bắt đầu tìm hiểu thêm. Ngày nay, nó được thực hiện bởi trí thông minh của con người, có thể hiểu được kiến ​​trúc và áp dụng nó. ”

Mức độ trừu tượng cao hơn cũng là cần thiết. Thomas nói: “Một số khuôn khổ có thể ánh xạ hoặc biên dịch các mạng đã biết để nhắm mục tiêu phần cứng. “Bạn có một tập hợp các hạt nhân hoặc API cấp thấp sẽ được sử dụng trong ngăn xếp phần mềm và sau đó cuối cùng được sử dụng bởi trình ánh xạ của mạng thần kinh. Dưới đây, bạn có thể có các loại phần cứng khác nhau, tùy thuộc vào những gì bạn muốn đạt được, tùy thuộc vào chi tiết sản phẩm của Bạn. Nó đạt được cùng một chức năng, nhưng nó không sử dụng cùng một phần cứng hoặc cùng một PPA. "

Điều này gây rất nhiều áp lực cho các trình biên dịch đó. "Câu hỏi chính là làm thế nào để bạn lập trình máy gia tốc trong tương lai?" Frank hỏi. “Bạn đã triển khai một công cụ có dây cứng như thế hệ GPU đầu tiên chưa? Hay bạn đã xây dựng một công cụ nhỏ có thể lập trình với bộ hướng dẫn của riêng bạn? Bây giờ bạn phải lập trình những thứ này riêng biệt và đặt chúng vào Mỗi thứ trong số chúng được kết nối với luồng dữ liệu để thực hiện các tác vụ. Một bộ xử lý có một tập con nhất định của toàn bộ tập lệnh và bộ xử lý kia có một tập con khác và tất cả chúng sẽ chia sẻ một số phần chồng chéo của luồng điều khiển. Bạn có thể có một số Sản phẩm có khả năng tăng tốc hơi khác. Trình biên dịch hoặc các thư viện hiểu được nó sẽ ánh xạ theo đó ”.

Tóm tắt

Kiến trúc của bộ vi xử lý không thay đổi. Họ vẫn đi theo những lựa chọn giống nhau đã tồn tại trong 40 năm qua. Điều thay đổi là cách cấu tạo con chip. Giờ đây, chúng chứa một số lượng lớn các bộ xử lý không đồng nhất với bộ nhớ và thông tin liên lạc được tối ưu hóa cho một tập hợp con các tác vụ ứng dụng. Mỗi chip đưa ra một lựa chọn khác nhau cho chức năng của bộ xử lý và mục đích tối ưu hóa của nó, thông lượng dữ liệu cần thiết và luồng dữ liệu mà nó thường thấy.

Mọi nhà cung cấp phần cứng đều muốn phân biệt chip của mình với các chip khác, nhưng việc quảng bá thông qua thương hiệu sẽ dễ dàng hơn nhiều so với việc nói về các chi tiết kỹ thuật bên trong. Vì vậy, họ đặt cho nó một cái tên, gọi nó là cái tên đầu tiên, nhanh nhất và lớn nhất, và liên kết nó với những dạng vấn đề ứng dụng cụ thể. Các từ viết tắt gồm ba chữ cái này đã trở thành tên tác vụ ứng dụng, nhưng chúng không xác định kiến ​​trúc phần cứng.

Trong những năm gần đây, các thông báo về kiến ​​trúc bộ xử lý mới được đưa ra hầu như mỗi ngày, với ba chữ cái viết tắt - TPU, IPU, NPU. Nhưng điều gì thực sự phân biệt chúng? Có thực sự có rất nhiều kiến ​​trúc bộ xử lý độc đáo hay đã có điều gì khác xảy ra?

Vào năm 2018, John L. Hennessy và David A. Patterson đã có một bài giảng về Turing mang tên “Kỷ nguyên vàng mới của kiến ​​trúc máy tính”. Họ quan tâm đến CPU và sự phát triển của nó, nhưng đây chỉ là một phần nhỏ của toàn bộ phương trình. Nhà nghiên cứu IP Arteris và kiến ​​trúc sư hệ thống Michael Frank cho biết: “Từ góc độ CPU, hầu hết các xPU này không phải là bộ vi xử lý thực sự”. “Chúng giống như một GPU, một bộ tăng tốc cho các khối lượng công việc đặc biệt. Và chúng có rất nhiều sự đa dạng bên trong. Máy học là một loại bộ xử lý, bạn có thể gọi chung chúng là bộ tăng tốc học máy, nhưng chúng tăng tốc phần xử lý của rất nhiều loại. "

Bản chất của bộ vi xử lý có thể được rút gọn thành ba điều. Manuel Uhm, giám đốc tiếp thị chip tại Xilinx cho biết: “Trong phân tích cuối cùng, nó quay trở lại kiến ​​trúc tập lệnh (ISA). “Điều này xác định những gì bạn muốn làm. Sau đó, bạn có I / O và bộ nhớ, hỗ trợ ISA và các nhiệm vụ mà nó đang cố gắng hoàn thành. Đây sẽ là một khoảng thời gian rất thú vị trong tương lai, bởi vì chúng ta sẽ thấy nhiều hơn hai hoặc ba năm qua Thời gian để đổi mới và thay đổi nhiều hơn ”.

Nhiều kiến ​​trúc mới không phải là bộ xử lý đơn lẻ. Pierre-Xavier Thomas, Giám đốc Nhóm Tiếp thị Chiến lược và Công nghệ của Cadence cho biết: “Những gì chúng tôi thấy là sự kết hợp của các loại bộ xử lý hoặc động cơ lập trình khác nhau tồn tại trong cùng một SoC hoặc cùng một hệ thống. “Phân phối các tác vụ phần mềm cho các phần cứng khác nhau hoặc các động cơ có thể lập trình linh hoạt. Tất cả các bộ xử lý có thể chia sẻ một API chung, nhưng miền thực thi sẽ khác nhau. Ở đây, bạn sẽ thực sự thấy các kiểu chế biến khác nhau với các kiểu đặc trưng khác nhau ”.

Thực tế là hầu hết những cái tên đều là tiếp thị.

Simon Davidmann, Giám đốc điều hành của Imperas Software cho biết: “Vấn đề là mọi người sử dụng những cái tên và từ viết tắt này cho hai mục đích khác nhau. “Một được sử dụng để giải thích kiến ​​trúc của bộ xử lý, chẳng hạn như SIMD (Đa dữ liệu hướng dẫn đơn). Cái còn lại xác định phân đoạn ứng dụng mà nó đang giải quyết. Vì vậy, nó có thể xác định kiến ​​trúc bộ xử lý, hoặc một cái gì đó giống như tên thương hiệu của đơn vị xử lý tensor (TPU). Họ đang đặt tên cho các kiến ​​trúc không đồng nhất hoặc đồng nhất của họ, không phải các bộ xử lý riêng lẻ ”.

Một chút về lịch sử

Bốn mươi năm trước, mọi thứ đơn giản hơn nhiều. Vào thời điểm đó đã có một đơn vị xử lý trung tâm (CPU) và có nhiều biến thể của nó, nhưng về cơ bản chúng đều là những bộ xử lý hoàn chỉnh Turing với kiến ​​trúc von Neumann. Mỗi loại có một tập lệnh khác nhau làm cho chúng hiệu quả hơn cho một số tác vụ nhất định và có rất nhiều cuộc thảo luận về lợi thế tương đối của tập lệnh phức tạp (CISC) và tập lệnh rút gọn (RISC).

Sự xuất hiện của RISC-V đã gây nhiều chú ý cho ISA. “Mọi người muốn hiểu ISA bởi vì ISA xác định mức độ tối ưu hóa của bộ xử lý cho các tác vụ đã xác định,” Uhm của Xilinx cho biết. “Họ có thể nhìn vào ISA và bắt đầu chu trình tính toán. Nếu một ISA có các lệnh gốc và chạy ở 1 GHz, tôi có thể so sánh nó với một ISA bộ xử lý khác, có thể yêu cầu hai lệnh cho cùng một chức năng, nhưng bộ xử lý chạy ở 1.5 GHz. Cái nào khiến tôi tiến xa hơn? Họ thực hiện các phép tính toán học cho các chức năng quan trọng ”.

Có nhiều phương pháp đóng gói cho CPU. Đôi khi IO hoặc bộ nhớ được đặt trong cùng một gói. Chúng được gọi là đơn vị vi điều khiển (MCU).

Khi modem trở nên phổ biến, các bộ xử lý tín hiệu kỹ thuật số (DSP) xuất hiện, và điểm khác biệt của chúng là chúng sử dụng kiến ​​trúc Harvard. Điều này tách bus lệnh khỏi bus dữ liệu. Một số người trong số họ cũng đã triển khai kiến ​​trúc SIMD để làm cho việc xử lý dữ liệu hiệu quả hơn.

Việc tách biệt các hướng dẫn và dữ liệu là để cải thiện thông lượng, mặc dù nó hạn chế một số lập trình biên có thể được thực hiện, chẳng hạn như các chương trình tự viết. “Thông thường, các điều kiện biên không phải là tính toán,” Uhm nói. “Đó là I / O hoặc bộ nhớ ngày càng tăng. Ngành công nghiệp đang chuyển từ việc tăng sức mạnh tính toán sang đảm bảo rằng có đủ dữ liệu để duy trì sức mạnh tính toán và duy trì hiệu suất ”.

Khi một bộ xử lý không còn nhanh hơn nữa, chúng sẽ kết nối nhiều bộ xử lý với nhau. Các bộ xử lý này thường chia sẻ bộ nhớ và duy trì khái niệm về tính hoàn chỉnh của Turing cho từng bộ xử lý và toàn bộ cụm vi xử lý. Không quan trọng phần lõi nào của chương trình được thực thi, bởi vì kết quả là như nhau.

Sự phát triển lớn tiếp theo là đơn vị xử lý đồ họa (GPU), đã phá vỡ quy ước vì mỗi phần tử xử lý hoặc đường ống dẫn có bộ nhớ riêng và không thể được định địa chỉ bên ngoài bộ xử lý. Bởi vì bộ nhớ có giới hạn, điều này có nghĩa là nó không thể thực hiện bất kỳ tác vụ xử lý tùy ý nào mà chỉ có thể thực hiện các tác vụ có thể được đặt trong không gian bộ nhớ được cung cấp.

“Đối với một số loại chức năng nhất định, GPU là bộ xử lý rất mạnh, nhưng đường ống của chúng rất dài,” Uhm chỉ ra. “Các đường ống này cho phép bộ phận GPU liên tục xử lý dữ liệu, nhưng đến một lúc nào đó, nếu bạn phải làm mới đường ống, đó sẽ là một cú đánh lớn. Rất nhiều độ trễ và sự không chắc chắn được tích hợp trong hệ thống ”.

Mặc dù nhiều trình tăng tốc khác đã được xác định, nhưng GPU — và sau này là GPU có mục đích chung (GPGPU) — đã xác định mô hình lập trình và ngăn xếp phần mềm giúp chúng dễ sử dụng hơn so với các trình tăng tốc trước đó. Davidmann của Imperas nói: “Trong nhiều năm, một số công việc nhất định đã được chuyên môn hóa. “Có một CPU cho các chương trình tuần tự. Có một bộ xử lý đồ họa, bộ xử lý này tập trung vào việc xử lý dữ liệu cho màn hình và đưa chúng ta vào một thế giới rất song song. Sử dụng nhiều phần tử xử lý nhỏ để thực hiện các tác vụ. Bây giờ có các nhiệm vụ học máy ”.

Những quy tắc xây dựng nào khác có thể giải thích tất cả các kiến ​​trúc mới? Trước đây, các mảng bộ xử lý thường được kết nối qua bộ nhớ hoặc cấu trúc liên kết mạng cố định (chẳng hạn như lưới hoặc vòng). Những gì đã nổi lên gần đây là sự kết hợp của Mạng trên chip (NoC), cho phép các bộ xử lý không đồng nhất phân tán giao tiếp theo cách linh hoạt hơn. Trong tương lai, chúng cũng có thể giao tiếp mà không cần sử dụng bộ nhớ.

Frank của Arteris cho biết: “Tại thời điểm này, NoC chỉ mang dữ liệu. “Trong tương lai, NoC có thể được mở rộng sang các khu vực khác, nơi giao tiếp giữa các máy gia tốc vượt ra ngoài dữ liệu. Nó có thể gửi lệnh, gửi thông báo,… Các yêu cầu giao tiếp của mảng bộ tăng tốc có thể khác với các yêu cầu giao tiếp của CPU hoặc SoC tiêu chuẩn. Tuy nhiên, mạng trên chip sẽ không Giới hạn bạn trong một tập hợp con. Bạn có thể tối ưu hóa và cải thiện hiệu suất bằng cách hỗ trợ các nhu cầu giao tiếp đặc biệt của máy gia tốc. ”

Kiến trúc triển khai

Một cách để phân biệt bộ xử lý là tối ưu hóa cho một môi trường hoạt động cụ thể. Ví dụ: phần mềm có thể chạy trên đám mây, nhưng bạn cũng có thể thực thi phần mềm tương tự trên các thiết bị IoT vi mô. Kiến trúc triển khai sẽ rất khác nhau và sẽ đạt được các điểm hoạt động khác nhau về hiệu suất, điện năng tiêu thụ, chi phí hoặc khả năng hoạt động trong các điều kiện khắc nghiệt.

“Một số ứng dụng dành cho điện toán đám mây và hiện chúng tôi đang đưa chúng đến gần hơn với giới hạn,” Thomas của Cadence nói. “Điều này có thể là do yêu cầu về độ trễ, hoặc năng lượng hoặc sự tiêu tán công suất, sẽ yêu cầu một kiểu kiến ​​trúc khác. Bạn có thể muốn có cùng một ngăn xếp phần mềm chính xác để có thể chạy ở hai vị trí. Đám mây cần cung cấp tính linh hoạt vì nó sẽ Nhận các loại ứng dụng khác nhau, và phải có khả năng tổng hợp một số lượng lớn người dùng. Điều này đòi hỏi phần cứng trên máy chủ phải có các khả năng dành riêng cho ứng dụng, nhưng một kích thước không phải là phù hợp với tất cả mọi người ”.

ML đã tăng yêu cầu của chính nó. Thomas nói thêm: “Khi sử dụng mạng nơ-ron và học máy để xây dựng các hệ thống thông minh, bạn cần sử dụng các khung phần mềm và phần mềm chung để lập trình mạng mới và ánh xạ nó với phần cứng. “Sau đó, bạn có thể điều chỉnh ứng dụng phần mềm với phần cứng phù hợp từ quan điểm PPA. Điều này thúc đẩy nhu cầu về các loại bộ xử lý và bộ xử lý khác nhau để có thể đáp ứng những nhu cầu này ở cấp độ phần cứng ”.

Các yêu cầu này được xác định bởi ứng dụng. Frank nói: “Một công ty đã tạo ra một bộ xử lý cho các hoạt động đồ họa. “Họ tối ưu hóa và tăng tốc cách theo dõi đồ thị và thực hiện các hoạt động như sắp xếp lại thứ tự đồ thị. Có những lực lượng vũ phu khác đẩy nhanh quá trình học máy, đó là phép nhân ma trận. Truy cập bộ nhớ khác nhau đối với mọi kiến ​​trúc Đây là một vấn đề đặc biệt bởi vì khi bạn xây dựng một máy gia tốc, mục tiêu quan trọng nhất là giữ cho nó luôn bận rộn. Bạn phải chuyển càng nhiều dữ liệu càng tốt đến ALU vì nó có thể được tiêu thụ và sản xuất ”.

Nhiều ứng dụng trong số này có rất nhiều điểm chung. Davidmann nói: “Tất cả chúng đều có một số bộ nhớ cục bộ, chúng có một mạng trên chip để giao tiếp và mỗi bộ xử lý thực thi một thuật toán phần mềm đang xử lý một phần dữ liệu nhỏ. “Những công việc này được lên lịch bởi hệ điều hành chạy trên các CPU truyền thống hơn.”

Phần khó đối với các nhà thiết kế phần cứng là dự đoán những tác vụ nào họ sẽ được yêu cầu thực hiện. “Mặc dù bạn sẽ thực hiện các kiểu hoạt động tương tự trong một số lớp, nhưng mọi người đang chú ý đến sự khác biệt trong các lớp,” Thomas nói. “Để có thể xử lý mạng nơ-ron, cần phải có một số loại sức mạnh xử lý. Điều này có nghĩa là bạn cần có khả năng xử lý một phần của mạng nơ-ron theo một cách nào đó, và sau đó bạn có thể cần một kiểu hoạt động khác để xử lý một lớp khác. Sự di chuyển của dữ liệu Và lượng dữ liệu cũng đang thay đổi theo từng lớp. ”

Sự khác biệt này có thể vượt ra ngoài sự di chuyển của dữ liệu. Frank nói: “Để giải trình tự bộ gen, bạn cần thực hiện một số xử lý. “Nhưng bạn không thể sử dụng một loại máy gia tốc duy nhất để tăng tốc mọi thứ. Bạn phải xây dựng một tập hợp toàn bộ các máy gia tốc khác nhau cho các đường ống khác nhau. CPU trở thành người giám hộ của quá trình thực thi quản lý. Nó thiết lập, thực thi DMA và đưa ra quyết định giữa hai Quy trình. Hiểu và phân tích các thuật toán và xác định cách bạn muốn tối ưu hóa quá trình xử lý của chúng là một nhiệm vụ kiến ​​trúc hoàn chỉnh. ”

Một phần của quá trình yêu cầu phân vùng. “Không có loại bộ xử lý duy nhất nào có thể được tối ưu hóa cho từng tác vụ của bộ xử lý - FPGA không tốt, CPU không tốt, GPU không tốt, DSP cũng cần thiết,” Uhm nói. “Chúng tôi đã tạo ra một loạt các thiết bị có chứa tất cả những thứ này, nhưng khó khăn ở phía khách hàng là họ phải cung cấp thông tin thông minh để xác định phần nào của hệ thống tổng thể sẽ được nhắm mục tiêu vào bộ xử lý hoặc logic có thể lập trình, hoặc trong AI. Động cơ. Mọi người đều muốn Công cụ ma thuật tự động đó, một công cụ có thể ngay lập tức quyết định đưa nó vào CPU, đưa nó lên FPGA và đưa nó lên GPU. Công cụ đó không tồn tại cho đến ngày nay ”.

Tuy nhiên, CPU sẽ luôn đóng một vai trò nào đó. Frank nói: “CPU cần thiết để thực thi các phần không thường xuyên của chương trình. “Khả năng lập trình chung của CPU có lợi thế của nó. Nếu bạn có cấu trúc dữ liệu chuyên biệt hoặc các phép toán, nó sẽ không hoạt động tốt. CPU là một bộ xử lý đa năng và nó không được tối ưu hóa cho bất cứ thứ gì. Nó chẳng hay ho gì cả ”.

Thay đổi "trừu tượng"

Trước đây, ranh giới phần cứng / phần mềm được xác định bởi ISA và bộ nhớ liên tục có thể định địa chỉ. Khi có nhiều bộ xử lý, chúng thường được căn chỉnh theo bộ nhớ.

Frank nói: “Nhất quán là một hợp đồng. “Loại nhất quán này rất quan trọng và sẽ không biến mất. Nhưng bạn có thể tưởng tượng rằng trong một công cụ luồng dữ liệu, tính nhất quán không quan trọng lắm, bởi vì bạn chuyển dữ liệu đang di chuyển ở rìa trực tiếp từ bộ gia tốc này sang bộ gia tốc khác. Nếu bạn Phân vùng tập dữ liệu, tính nhất quán sẽ trở thành một trở ngại vì bạn sẽ tốn thêm chu kỳ. Bạn phải kiểm tra thông tin. Bạn phải cung cấp thông tin cập nhật. ”

Điều này yêu cầu một kiến ​​trúc bộ nhớ khác. “Bạn phải suy nghĩ về cấu trúc bộ nhớ, bởi vì bạn chỉ có rất nhiều bộ nhớ được kết hợp chặt chẽ với nhau,” Uhm nói. “Bạn có thể truy cập bộ nhớ liền kề, nhưng bạn sẽ nhanh chóng hết bộ nhớ liền kề và không thể truy cập kịp thời. Điều này phải được hiểu trong thiết kế. Khi công cụ trưởng thành, công cụ sẽ bắt đầu tìm hiểu thêm. Ngày nay, nó được thực hiện bởi trí thông minh của con người, có thể hiểu được kiến ​​trúc và áp dụng nó. ”

Mức độ trừu tượng cao hơn cũng là cần thiết. Thomas nói: “Một số khuôn khổ có thể ánh xạ hoặc biên dịch các mạng đã biết để nhắm mục tiêu phần cứng. “Bạn có một tập hợp các hạt nhân hoặc API cấp thấp sẽ được sử dụng trong ngăn xếp phần mềm và sau đó cuối cùng được sử dụng bởi trình ánh xạ của mạng thần kinh. Dưới đây, bạn có thể có các loại phần cứng khác nhau, tùy thuộc vào những gì bạn muốn đạt được, tùy thuộc vào chi tiết sản phẩm của Bạn. Nó đạt được cùng một chức năng, nhưng nó không sử dụng cùng một phần cứng hoặc cùng một PPA. "

Điều này gây rất nhiều áp lực cho các trình biên dịch đó. "Câu hỏi chính là làm thế nào để bạn lập trình máy gia tốc trong tương lai?" Frank hỏi. “Bạn đã triển khai một công cụ có dây cứng như thế hệ GPU đầu tiên chưa? Hay bạn đã xây dựng một công cụ nhỏ có thể lập trình với bộ hướng dẫn của riêng bạn? Bây giờ bạn phải lập trình những thứ này riêng biệt và đặt chúng vào Mỗi thứ trong số chúng được kết nối với luồng dữ liệu để thực hiện các tác vụ. Một bộ xử lý có một tập con nhất định của toàn bộ tập lệnh và bộ xử lý kia có một tập con khác và tất cả chúng sẽ chia sẻ một số phần chồng chéo của luồng điều khiển. Bạn có thể có một số Sản phẩm có khả năng tăng tốc hơi khác. Trình biên dịch hoặc các thư viện hiểu được nó sẽ ánh xạ theo đó ”.

Tóm tắt

Kiến trúc của bộ vi xử lý không thay đổi. Họ vẫn đi theo những lựa chọn giống nhau đã tồn tại trong 40 năm qua. Điều thay đổi là cách cấu tạo con chip. Giờ đây, chúng chứa một số lượng lớn các bộ xử lý không đồng nhất với bộ nhớ và thông tin liên lạc được tối ưu hóa cho một tập hợp con các tác vụ ứng dụng. Mỗi chip đưa ra một lựa chọn khác nhau cho chức năng của bộ xử lý và mục đích tối ưu hóa của nó, thông lượng dữ liệu cần thiết và luồng dữ liệu mà nó thường thấy.

Mọi nhà cung cấp phần cứng đều muốn phân biệt chip của mình với các chip khác, nhưng việc quảng bá thông qua thương hiệu sẽ dễ dàng hơn nhiều so với việc nói về các chi tiết kỹ thuật bên trong. Vì vậy, họ đặt cho nó một cái tên, gọi nó là cái tên đầu tiên, nhanh nhất và lớn nhất, và liên kết nó với những dạng vấn đề ứng dụng cụ thể. Các từ viết tắt gồm ba chữ cái này đã trở thành tên tác vụ ứng dụng, nhưng chúng không xác định kiến ​​trúc phần cứng.