32 điểm bởi xguru 2020-12-04 | 17 bình luận | Chia sẻ qua WhatsApp
  • M1 không phải là một CPU đơn lẻ, mà là cả một hệ thống gồm nhiều chip nằm trong một gói silicon lớn. CPU chỉ là một phần trong đó

→ SoC (System on a Chip) gom CPU, GPU, bộ nhớ, bộ điều khiển I/O, v.v.

  • Thay vì nhồi thật nhiều lõi đa dụng, nó đưa vào các chip chuyên biệt cho từng loại tác vụ

→ CPU: chạy OS và ứng dụng

→ GPU: xử lý đồ họa, như UI của ứng dụng, game 2D/3D

→ ISP (Image Processing Unit): tăng tốc xử lý hình ảnh

→ DSP (Digital Signal Processor): thực hiện các tác vụ thiên về toán học hơn CPU, như giải nén tệp nhạc

→ NPU (Neural Processing Unit): tăng tốc machine learning, nhận diện giọng nói, xử lý camera, v.v.

→ Video Encoder/Decoder: xử lý tệp/định dạng video với điện năng thấp

→ Secure Enclave - mã hóa, xác thực, bảo mật

→ UMA (Unified Memory Architecture): giúp CPU, GPU và các lõi khác trao đổi thông tin nhanh

Đó là lý do các chip kiểu này rất mạnh trong chỉnh sửa ảnh/video và mã hóa video dung lượng lớn

  • Unified Memory Architecture (UMA) có gì đặc biệt?

→ Các chip tích hợp CPU/GPU trước đây vốn chậm

Quảng cáo

Hai bên dùng các vùng nhớ khác nhau theo những cách khác nhau.

Ngoài ra GPU còn tỏa nhiệt mạnh, nên các card lớn với quạt tản nhiệt lớn mới thường có hiệu năng cao

Nhưng như vậy thì phải sao chép rất nhiều dữ liệu qua lại, nên cần bus như PCIe

→ Unified Memory không cấp phát riêng cho CPU/GPU mà dùng chung luôn.

Khác với Shared Memory, CPU và GPU có thể truy cập đồng thời, chỉ cần trao đổi thông tin vị trí là truy cập được nên không cần sao chép

  • Nếu cách làm SoC này tốt như vậy thì sao các hãng khác không làm?

→ Họ có làm. AMD bắt đầu tạo APU với CPU/GPU nằm trên cùng một die silicon

→ Nhưng thực tế rất khó. Vì SoC là đưa cả máy tính lên một con chip, nên hợp với các hãng làm máy tính như HP hay Dell hơn

→ Mô hình kinh doanh của Intel và AMD là CPU đa dụng để người dùng cắm vào bo mạch chủ PC,

còn thị trường SoC mới không phải là lấy các sản phẩm vật lý từ nhiều vendor khác nhau rồi lắp lại, mà là lắp ghép IP (Intellectual Property)

→ Liệu Intel, AMD, Nvidia có thể cấp phép IP cho Dell hay HP không?

→ Tất nhiên Intel và AMD có thể bán SoC hoàn chỉnh, nhưng có thể phát sinh xung đột lợi ích giữa nhà sản xuất CPU / hãng PC / MS (ví dụ nên đưa gì vào)

→ Nhưng với Apple thì đây là chuyện đơn giản. Họ tự làm mọi thứ. "They control the whole widget"

  • Thách thức căn bản nhất để làm CPU nhanh
Quảng cáo

→ Firestorm, lõi CPU đa dụng nhanh của M1, thực sự rất nhanh. Đây chính là khác biệt so với ARM trước đây vốn chậm hơn AMD/Intel

→ Firestorm đánh bại phần lớn lõi Intel/AMD Ryzen về tốc độ, điều mà theo lẽ thường rất khó xảy ra.

→ Chiến lược để làm CPU nhanh là gì?

  1. Thực thi lệnh tuần tự nhanh hơn

  2. Thực thi nhiều lệnh song song

Vào thập niên 80 điều này còn dễ. Chỉ cần tăng xung nhịp là lệnh chạy nhanh hơn.

Máy tính làm việc theo từng chu kỳ xung nhịp, và cái "việc" đó rất nhỏ, nên một lệnh có thể cần nhiều chu kỳ mới xong

Nhưng đến thời hiện đại thì việc tăng xung nhịp đã có giới hạn.

"Sự kết thúc của định luật Moore"

Vì vậy, giờ điều quan trọng là thực thi được nhiều lệnh song song nhất có thể

  • Multi-core hay Out-of-Order processors?

→ Có hai cách tiếp cận để thực thi song song

  1. Thêm nhiều lõi CPU hơn (ở góc nhìn developer là thêm nhiều thread hơn)
Quảng cáo
 Về lý thuyết, lõi của processor có thể chạy nhiều thread (software thread)

 Thực chất là luân phiên chuyển đổi giữa các thread, nên chỉ hữu ích khi đang chờ I/O hay mạng

 Hardware thread có thể làm tăng tốc độ, nhưng developer phải viết code để tận dụng nó.

 Mô hình này phù hợp với server/cloud.

 Vì thế mới có các công ty như Ampere làm CPU ARM cho cloud như Altra Max với 128 lõi.

 Apple thì hoàn toàn ngược lại. Apple là công ty làm thiết bị cho người dùng đơn lẻ

 Phần lớn phần mềm desktop không được tạo ra để tận dụng nhiều lõi.

 Game có thể cải thiện trên 8 lõi, nhưng 128 lõi thì chỉ là lãng phí.

 Vì vậy, điều cần thiết là ít lõi hơn nhưng mạnh hơn
  1. Thực thi không theo thứ tự (Out-of-Order Execution, OoO) cũng cho phép chạy nhiều lệnh song song hơn, nhưng không cần phải dùng tường minh như đa luồng
 Ở góc nhìn developer, nó chỉ giống như mỗi lõi chạy nhanh hơn thôi

 Lấy dữ liệu từ một vị trí nào đó trong bộ nhớ là việc chậm

 Nhưng lấy 1 byte hay 128 byte thì độ trễ không khác nhau

 Dữ liệu di chuyển qua data bus, và nếu bus đủ rộng thì có thể đọc nhiều byte cùng lúc

 Khi CPU thực thi, nó xử lý nhiều cụm lệnh cùng lúc, dù các lệnh này vốn được viết để chạy tuần tự

 Các vi xử lý hiện đại đều thực hiện Out-of-Order.

 Tức là phân tích nhiều lệnh để xác định xem chúng có phụ thuộc lẫn nhau hay không.

    01: mul r1, r2, r3    // r1 ← r2 × r3

    02: add r4, r1, 5     // r4 ← r1 + 5

    03: add r6, r2, 1     // r6 ← r2 + 1

 Trong ví dụ trên, lệnh 1 và 2 có phụ thuộc, nhưng lệnh 3 thì hoàn toàn không liên quan.

 Khi đó processor Out-of-Order có thể chạy song song lệnh số 3 vì nó không phụ thuộc vào các lệnh kia.

 Trên thực tế CPU có thể xác định phụ thuộc không phải giữa một hai lệnh mà giữa hàng trăm lệnh.

 CPU nối các lệnh thành đồ thị nút, phân tích nó để biết lệnh nào có thể thực hiện song song và chỗ nào phải chờ kết quả trước khi chạy

 Lý do lõi Firestrom của M1 đạt tốc độ khủng là vì nó thực hiện Out-of-Order cực kỳ tốt.

 Có lẽ vượt trội hơn bất kỳ ai khác trong thị trường mainstream, kể cả Intel/AMD.
  • Vậy tại sao Out-of-Order của AMD và Intel lại chậm hơn M1?

→ Điều nói ở trên thực ra liên quan đến ROB (Reorder Buffer), và không phải là các lệnh machine code thông thường (thứ CPU lấy từ bộ nhớ để chạy)

Các lệnh đó thuộc CPU Instruction Set Architecture (ISA), tức những gì ta gọi là x86, ARM, PowerPC.

→ Bên trong, CPU chạy bằng một tập lệnh hoàn toàn khác mà programmer không thấy, gọi là micro-operations (vi lệnh, micro-ops hay μops), và ROB được lấp đầy bằng các micro-ops này

→ Có thể xem lệnh ARM/x86 là public API, còn micro-ops là private API.

→ Với CISC, vì lệnh lớn và phức tạp nên gần như bắt buộc phải dùng micro-ops, còn RISC thì có thể chọn dùng hay không.

(Ví dụ, các CPU ARM nhỏ có thể không dùng micro-ops. Nhưng điều đó không có nghĩa là chúng không làm được OoO)

→ Tại sao điều này quan trọng? Vì "tốc độ phụ thuộc vào việc có thể lấp đầy ROB nhanh và nhiều đến mức nào"

→ Càng lấp đầy nhanh thì càng có nhiều cơ hội thực thi nhiều lệnh song song, nên hiệu năng tăng lên

→ Machine code được decoder tách thành micro-ops.

Quảng cáo

→ Lõi Intel/AMD có 4 decoder,

còn Apple có tới 8 decoder "điên rồ", và ROB lớn gấp 3 nên về cơ bản có thể chứa nhiều lệnh hơn gấp 3

  • Vậy sao Intel và AMD không thêm nhiều decoder lệnh hơn?

→ Đây là lúc đòn phản công của RISC bắt đầu. Việc lõi M1 Firestorm dùng ARM RISC là rất quan trọng.

→ Độ dài lệnh x86 là 1~15 byte, còn RISC có kích thước cố định

→ Nếu mọi lệnh đều dài như nhau thì chỉ cần cắt ra và ném vào 8 decoder khác nhau là xong

→ Nhưng với x86, không thể biết lệnh tiếp theo bắt đầu từ đâu, nên thực tế không còn cách nào khác ngoài việc phải phân tích từng lệnh

→ Intel và AMD xử lý vấn đề này theo kiểu brute-force: giải mã ở mọi vị trí bắt đầu có thể có của lệnh

Tức là phải liên tục vứt bỏ các phỏng đoán sai hoặc kết quả sai.

Vì thế rất khó thêm nhiều decoder hơn, trong khi với Apple thì dễ hơn nhiều

→ Về cơ bản, đây là lý do ở cùng xung nhịp, nó có thể xử lý số lệnh gấp đôi CPU AMD/Intel

→ Trong thực tế, x86 hiếm khi dùng các lệnh CISC phức tạp và thường dùng lệnh ngắn giống RISC, nhưng vì vẫn phải xử lý được cả các lệnh dài 15 byte đó nên độ phức tạp vẫn còn.

  • Nhưng lõi Zen3 của AMD vẫn nhanh hơn mà?

→ Trong benchmark, Zen3 nhanh hơn Firestorm, nhưng Zen3 chạy ở 5GHz còn Firestorm là 3.2GHz

Quảng cáo

→ Apple không tăng xung nhịp vì chip sẽ nóng lên.

→ Về cơ bản, lõi Firestorm ưu việt hơn Zen3

→ Zen3 có thể dùng cho game bằng cách tiêu thụ nhiều điện hơn và tỏa nhiều nhiệt hơn, nhưng "Apple đã chọn không làm như vậy"

→ Nếu Apple muốn hiệu năng cao hơn, họ sẽ thêm nhiều lõi hơn. Cách này có thể cho hiệu năng cao hơn với điện năng thấp hơn

  • Tương lai

→ AMD/Intel đã tự dồn mình vào góc ở hai khía cạnh

  1. Không có mô hình kinh doanh để thúc đẩy thiết kế SoC và heterogeneous computing

  2. Tập lệnh x86 CISC phức tạp đã trở thành gánh nặng legacy, khiến việc cải thiện hiệu năng OoO trở nên khó khăn

→ Tất nhiên chưa phải game over. Họ vẫn có thể tăng xung, tăng làm mát, dùng nhiều lõi hơn..

→ Intel còn ở tình thế tệ hơn. Họ đã thua Firestorm ở tốc độ lõi, mà GPU đưa vào SoC cũng kém.

→ Nhiều lõi rõ ràng tốt cho server, nhưng Amazon và Ampere đang tấn công bằng 128 lõi. Intel/AMD ở vào thế phải chiến đấu trên cả hai mặt trận

→ May mắn là khác với AMD/Intel, Apple không bán chip ra thị trường

→ Có thể chưa diễn ra ngay, nhưng người dùng PC sẽ dần dần chuyển sang Apple, và Apple sẽ chiếm tỷ trọng lớn hơn trong thị trường PC

17 bình luận

 
shaha 2022-04-05

Bạn viết hay thật đấy

 
hoking337 2020-12-07

Cảm ơn vì đã tóm tắt rất hay và cực kỳ dễ hiểu. Tuyệt vời nhất!

 
dreamydh 2020-12-05

Cảm ơn vì nội dung hay.

 
xguru 2020-12-05

Cảm ơn!!

 
pilgwon 2020-12-04

Tôi đã muốn mua thiết bị M1, nhưng xem ra không phải thế mà là nên mua cổ phiếu..

Cảm ơn vì bài viết hay!

 
xguru 2020-12-05

Tôi cũng đồng ý một phiếu rằng cổ phiếu Apple có giá trị tương lai rất cao.

Có vẻ như rồi sẽ đến lúc Apple Car thật sự ra mắt.

 
functor 2020-12-04

Có vẻ như weak memory model ngày càng trở nên quan trọng hơn.. Apple giờ đúng là đang trở thành một công ty closed có thể tự làm mọi thứ, từ chip, lắp ráp, phần cứng, OS đến ứng dụng (đúng như điều Jobs từng mơ ước).

Tôi cũng đang nghĩ thiết bị tiếp theo sẽ là Mac mini M1 hoặc MacBook Air..

 
xguru 2020-12-05

Tôi cũng từ MacBook Pro 2015 chuyển sang M1.. nghe nói sẽ về vào cuối năm hoặc đầu năm sau!

 
hankpark 2020-12-06

Hôm nay tôi mới kiểm tra thì thấy đã được phát hành trong nước rồi!

 
shawnkim 2020-12-04

Wow! Guru thật sự đỉnh nhất!!

 
xguru 2020-12-05

Cảm ơn ;)

 
ffdd270 2020-12-04

Trong bài đó cũng có phần tác giả viết so sánh RISC/CISC, mình cực kỳ đề cử luôn. Bài giải thích rất trôi chảy về câu hỏi vì sao lại hình thành những cấu trúc lệnh như vậy.

 
xguru 2020-12-06

Có vẻ đây vốn là người viết rất tốt. Bài này cũng khá dài nhưng đọc vẫn rất cuốn.

 
jun0683 2020-12-04

Wow, nội dung rất hay, cảm ơn bạn.

 
xguru 2020-12-05

Cảm ơn!

 
godrm 2020-12-04

Cảm giác như đang học lại môn kiến trúc máy tính vậy haha

Rốt cuộc thì Apple có một cấu trúc buộc họ phải tiếp tục làm ngày càng tốt hơn điều mà Apple giỏi nhất

 
xguru 2020-12-04

Intel và AMD giờ phải làm sao đây..

Trong tập 16 của podcast GeekNews đăng hôm nay, mình đã giới thiệu ngắn gọn về mẹo Memory-Order của chip M1, nhưng bài này lại là một bài viết chi tiết theo một hướng khác.

Có lẽ tuần sau lên podcast lại sẽ còn nhắc đến nữa ^^;