19 điểm bởi xguru 2020-12-21 | 8 bình luận | Chia sẻ qua WhatsApp

"M1 sẽ giúp RISC-V bằng cách mở ra một cuộc chuyển dịch mô hình, nhưng có lẽ không theo cách bạn nghĩ"

Bài viết tiếp theo của kỹ sư từng viết "Vì sao chip M1 lại nhanh đến vậy?". Tác giả dự đoán tương lai của RISC-V từ một góc nhìn thú vị.

Các yếu tố tạo nên hiệu năng của M1:

  1. Nhiều decoder và thực thi ngoài thứ tự OoO

  2. Nhiều chip chuyên dụng như GPU, NPU, DSP

Bài viết này đi sâu hơn vào mục số 2, tức điện toán Heterogeneous (dị thể).

Các chip chuyên dụng có thể được gọi bằng nhiều tên khác nhau, nhưng ở đây đều được gọi chung là Coprocessor (bộ đồng xử lý) hoặc cũng có thể gọi là Accelerator.

  • Bộ đồng xử lý không phải là một xu hướng hoàn toàn mới

  • Ngay cả Amiga 1000 ra mắt năm 1985 cũng đã có bộ đồng xử lý cho âm thanh/đồ họa, GPU cũng là một bộ đồng xử lý,

Google TPU (Tensor Processing Unit) cũng là một bộ đồng xử lý được tối ưu cho machine learning

[ Coprocessor là gì ]

  • Khác với CPU, nó không thể tồn tại độc lập. Chỉ thêm bộ đồng xử lý thì chưa thể thành một máy tính; nó đơn giản là bộ xử lý mục đích chuyên biệt làm tốt một số tác vụ nhất định

  • Ví dụ ban đầu là 8087 Floating Point Unit (FPU) của Intel. Intel 8086 xử lý số nguyên tốt nhưng xử lý dấu chấm động không giỏi

  • Có thể mô phỏng phép toán dấu chấm động bằng tính toán số nguyên nhưng sẽ chậm. Điều này giống với các vi xử lý đời đầu chỉ làm được cộng/trừ mà không làm được nhân, nên phải lặp lại phép cộng nhiều lần để xử lý phép nhân

  • Nói cách khác, "các phép toán học phức tạp có thể được xử lý bằng cách lặp lại những thao tác đơn giản"

  • Mọi bộ đồng xử lý đều làm việc theo cách tương tự. CPU vẫn có thể làm việc mà bộ đồng xử lý làm; chỉ cần lặp lại các thao tác đơn giản

  • Lý do ban đầu cần GPU là vì việc lặp lại cùng một phép tính trên hàng triệu polygon/pixel sẽ tốn rất nhiều thời gian nếu dùng CPU

[ Dữ liệu đi vào/ra bộ đồng xử lý như thế nào ]

  • Tất cả bộ đồng xử lý, từ chuột/bàn phím/màn hình đến GPU/FPU/Neural Engine, đều giống nhau ở chỗ đọc và ghi dữ liệu bằng cách truy cập một vùng bộ nhớ nhất định

  • Các công việc này do Device Driver xử lý nên lập trình viên phần mềm thông thường không cần quan tâm

→ Đây là việc mà DMA (Direct Memory Access) controller đảm nhiệm

  • Trong thời DOS, với C/C++ có thể truy cập trực tiếp địa chỉ bộ nhớ video bằng con trỏ để thay đổi pixel

  • Bộ đồng xử lý hoạt động theo kiểu này; NPU, GPU, T1 v.v. đều có các địa chỉ riêng để giao tiếp với chúng và có thể giao tiếp bất đồng bộ

  • CPU sẽ liệt kê toàn bộ lệnh cần gửi đến Neural Engine hoặc GPU vào bộ nhớ rồi thông báo địa chỉ đó cho Neural Engine/GPU

  • CPU không cần phải chờ bộ đồng xử lý xử lý xong các lệnh và dữ liệu đó, nên lúc này interrupt trở nên cần thiết

[ Cách interrupt hoạt động ]

  • Card đồ họa/card mạng được cắm vào PC và có đường interrupt được chỉ định

  • Nó hoạt động như một đường nối trực tiếp với CPU; khi được kích hoạt, CPU sẽ tạm dừng việc đang làm để xử lý interrupt

  • Trên thực tế, CPU sẽ lưu vị trí hiện tại và các thanh ghi vào bộ nhớ để có thể quay lại sau

  • Sau đó nó tìm công việc cần thực thi trong bảng interrupt. Bảng này chứa địa chỉ chương trình sẽ chạy khi interrupt được kích hoạt

  • Với lập trình viên, những thứ này không hiện ra trực tiếp mà trông giống như callback function được đăng ký cho một sự kiện cụ thể. Device driver xử lý những thứ này ở tầng thấp

  • Lý do giải thích điều này là vì cần biết điều gì xảy ra khi dùng bộ đồng xử lý thì mới hiểu được việc giao tiếp thực tế sẽ kéo theo những gì

  • Khi dùng interrupt, nhiều việc có thể diễn ra song song.

→ Trong lúc CPU bị ngắt bởi chuột, ứng dụng có thể đang lấy ảnh từ card mạng; khi chuột di chuyển xong, CPU nhận tọa độ mới rồi gửi sang GPU để vẽ con trỏ ở vị trí mới. Trong lúc GPU vẽ con trỏ chuột, CPU bắt đầu xử lý hình ảnh lấy từ mạng

  • Bằng cách dùng các interrupt này, có thể gửi các tác vụ machine learning phức tạp đến Neural Engine của M1 để nhận diện khuôn mặt từ webcam. Vì Neural Engine xử lý dữ liệu hình ảnh, máy tính và CPU trong thời gian đó vẫn có thể làm việc khác và phản hồi người dùng

[ Sự trỗi dậy của RISC-V ]

  • Năm 2010, phòng thí nghiệm điện toán song song của UC Berkeley phát triển theo hướng sử dụng nhiều bộ đồng xử lý hơn

  • Họ nhận ra sự kết thúc của định luật Moore ở chỗ không còn dễ dàng tăng hiệu năng chỉ bằng cách vắt kiệt các lõi CPU đa dụng

→ Cần đến các bộ đồng xử lý là phần cứng chuyên dụng

  • Xung nhịp không thể dễ dàng tăng thêm vì nhiệt lượng và mức tiêu thụ điện

→ Một cách là dùng nhiều decoder và thực thi ngoài thứ tự OoO

→ Xem bài "Vì sao chip M1 lại nhanh đến vậy?" https://vi.news.hada.io/topic?id=3315

[ Nên dùng ngân sách transistor cho lõi CPU hay cho Coprocessor? ]

  • Tăng lên 128 lõi cũng không khiến một hệ thống desktop trở nên hiệu quả hơn

  • Đầu thập niên 80, nếu có ngân sách 20.000 transistor thì chỉ cần dùng 15.000 để làm CPU là được

  • Nếu CPU làm 100 loại công việc khác nhau, và để tạo một bộ đồng xử lý cho một trong số đó cần 1.000 transistor, thì làm đủ bộ đồng xử lý cho mọi tác vụ sẽ cần 100.000 transistor và vượt quá ngân sách

[ Khi transistor tăng lên, chiến lược thay đổi ]

  • Ở các thiết kế ban đầu, cần tập trung vào điện toán đa dụng, nhưng ngày nay số transistor đã trở nên cực kỳ lớn đến mức không biết nên dùng chúng vào việc gì

  • Vì thế, thiết kế bộ đồng xử lý trở thành việc quan trọng. Có rất nhiều nghiên cứu nhằm tạo ra nhiều bộ đồng xử lý mới đa dạng

  • Nhiều nghiên cứu trong số này phải bắt đầu từ nền tảng rất sơ khai, gần như một bộ tăng tốc còn "ngốc nghếch"

  • Khác với CPU, chúng không đọc và xử lý lệnh qua mọi giai đoạn, nên không biết cách truy cập hay sắp xếp bộ nhớ

  • Giải pháp cho việc này là dùng một CPU đơn giản làm controller

  • Nói cách khác, toàn bộ bộ đồng xử lý được cấu thành như các mạch tăng tốc chuyên biệt do một CPU đơn giản điều khiển để tăng tốc tác vụ cụ thể

→ Ví dụ, các chip như Neural Engine/Tensor Processing Unit có thể thao tác trên các thanh ghi lớn dùng để lưu trữ ma trận

[ RISC-V được thiết kế riêng để điều khiển Accelerator ]

  • Đó chính là mục đích RISC-V được thiết kế ra

  • Nó có một tập lệnh tối thiểu khoảng 40~50 lệnh cho các công việc CPU thông thường

→ CPU x86 có khoảng 1.500 lệnh

  • Thay vì một tập lệnh cố định lớn, RISC-V được thiết kế xoay quanh khái niệm mở rộng

  • Vì mọi bộ đồng xử lý đều khác nhau, RISC-V có thể được cấu hình với tập lệnh lõi và tập lệnh mở rộng mà từng bộ đồng xử lý cần

Đó là điều bài viết này muốn giải thích

  • Apple M1 sẽ khiến toàn ngành tiến tới một tương lai do bộ đồng xử lý thống trị

  • Và để tạo ra các bộ đồng xử lý đó, "RISC-V sẽ là một mảnh ghép quan trọng của câu đố"

[ Điểm hay khi tạo Coprocessor bằng RISC-V ]

  • Làm chip là việc phức tạp và tốn kém

  • Từ việc xây dựng công cụ để kiểm chứng chip, chạy chương trình kiểm thử, chẩn đoán và nhiều thứ khác đều cần rất nhiều công sức

  • Đây cũng là một phần giá trị của việc dùng ARM ngày nay. Vì có hệ sinh thái lớn nên có thể kiểm chứng và thử nghiệm thiết kế

  • Vì vậy, có tập lệnh riêng của mình không phải là ý tưởng hay

  • RISC-V có tiêu chuẩn để nhiều công ty cùng làm công cụ, hình thành hệ sinh thái để nhiều công ty có thể chia sẻ gánh nặng

  • Vì sao không dùng ARM vốn đã sẵn có? Vì ARM được tạo ra như CPU đa dụng nên có tập lệnh cố định lớn

  • Do yêu cầu từ khách hàng và sự cạnh tranh với RISC-V, ARM cũng đã công bố tập lệnh mở rộng vào năm 2019

  • Nhưng vấn đề vẫn là nó không được thiết kế cho việc này ngay từ đầu

→ Toàn bộ toolchain của ARM giả định rằng tập lệnh ARM lớn được triển khai đầy đủ

→ Nhưng bộ đồng xử lý không muốn hoặc không cần một tập lệnh lớn

→ Bộ đồng xử lý cần một hệ sinh thái công cụ được xây dựng dựa trên ý tưởng tập lệnh nền tảng cố định tối thiểu kèm khả năng mở rộng

  • Có thể thấy rõ lợi ích này qua việc Nvidia dùng RISC-V

→ GPU cỡ lớn cần một loại CPU đa dụng để dùng làm controller

→ Họ đã tạo và dùng một chip tên FALCON : FAst Logic CONtroller

→ Chi phí thấp, hiệu quả cao

  • Vì RISC-V có tập lệnh nhỏ và đơn giản nên vượt trội hơn ARM cũng như mọi đối thủ cạnh tranh khác

  • Việc Nvidia chọn RISC-V giúp tạo ra chip nhỏ hơn với mức điện năng tối thiểu

  • Dùng cơ chế mở rộng thì chỉ cần thêm đúng những lệnh phù hợp với công việc cần thiết

[ ARM sẽ trở thành x86 mới ]

  • Trớ trêu thay, ta có thể sẽ thấy tương lai nơi Mac và PC đều chạy trên ARM

  • Nhưng phần cứng tùy biến xung quanh chúng sẽ do các bộ đồng xử lý bị RISC-V thống trị nắm giữ

  • Khi bộ đồng xử lý trở nên phổ biến, trên SoC sẽ có nhiều chip RISC-V hơn ARM

  • Tương lai sẽ không phải ARM or RISC-V, mà là ARM and RISC-V

[ ARM sẽ chỉ huy một đội quân bộ đồng xử lý RISC-V ]

  • Bộ xử lý ARM đa dụng sẽ giữ vị trí trung tâm cùng với một đạo quân bộ đồng xử lý RISC-V đảm nhiệm đồ họa, mã hóa, nén video, machine learning và xử lý tín hiệu

  • Giáo sư David Patterson của UC Berkeley cùng nhóm của ông đã nhìn thấy tương lai đó đang đến và điều chỉnh RISC-V để phù hợp với nó

  • Các loại phần cứng chuyên dụng và vi điều khiển đủ kiểu đều đang rất quan tâm đến RISC-V, và nhiều lĩnh vực hiện do ARM thống trị ngày nay sẽ chuyển sang RISC-V

[ Không thể dùng RISC-V làm CPU chính sao? ]

  • Nhiều người đặt câu hỏi liệu có thể thay thế hoàn toàn ARM bằng RISC-V hay không

  • Có người cho rằng tập lệnh quá đơn giản của RISC-V sẽ không thể cung cấp hiệu năng cao như ARM và x86

  • Nhưng RISC-V hoàn toàn có thể được dùng làm bộ xử lý chính, và hiệu năng không phải vấn đề

→ Chỉ là cần có người làm ra RISC-V hiệu năng cao như ARM

→ Nói cách khác, khả năng là có, nhưng vấn đề là momentum. MacOS và Windows đã chạy trên ARM

→ Trong ngắn hạn, MS hay Apple sẽ không nỗ lực cho thêm một cuộc chuyển đổi phần cứng khác nữa

8 bình luận

 
functor 2020-12-21

Thú vị đấy. Cảm ơn vì bản tóm tắt hay.

Giờ thì đến lúc ngay cả ở trường học, các lớp kiến trúc cũng sẽ được dạy dựa trên arm hoặc risc-v thay vì x86 hay amd64 rồi..

 
kunggom 2020-12-21

Trước đây ở đây từng có bài đăng về việc một kỹ sư xuất thân từ ARM chỉ trích RISC-V.

https://vi.news.hada.io/topic?id=3137

Nếu đúng như nội dung ở trên thì việc tăng sự đa dạng của các chip áp dụng RISC-V hẳn là điều đã được chủ đích.

 
jwstyle 2020-12-21

Càng lúc càng thú vị.

Tôi bắt đầu tò mò về phản ứng của Intel và AMD.

 
cloverhearts 2020-12-21

Tôi biết là Trung Quốc gần như đang all-in vào RISC-V.. Thật sự không thể tưởng tượng nổi tương lai sẽ ra sao nữa

 
xguru 2020-12-21

Tôi cũng nghĩ đến Trung Quốc. Huawei đang liên tục bị Mỹ kiềm chế, nếu họ đứng ra thử làm CPU chính thì sẽ ra sao nhỉ haha

 
kbumsik 2020-12-21

Huawei không chỉ không thể dùng ARM mà còn không thể dùng TSMC, nên có lẽ có thể xem như việc tự phát triển CPU hiệu năng cao về cơ bản đã thất bại rồi. Cùng lắm thì còn có thể dùng cho thiết bị mạng của chính họ, nơi yêu cầu hiệu năng thấp hơn.

Nhưng vì nhiều công ty khác đang dùng RISC-V, nên có vẻ sẽ có thành quả xuất hiện từ các công ty này.

 
xguru 2020-12-22

À, tôi đã không nghĩ tới chuyện bản thân TSMC bị chặn. Có lẽ sẽ khó thật, trừ khi SMIC vượt qua 7nm và làm được quy trình tới 5nm.

 
xguru 2020-12-21

Người này viết hay thật. Tôi cũng đọc bài này rất thú vị.

Đã có nhiều dự đoán rằng RISC-V sẽ trở thành một lựa chọn thay thế khác,

nhưng tôi chưa từng nghĩ đến góc nhìn rằng theo cách này, nó có thể trở thành con chip tốt nhất cho bộ xử lý phụ.