Trong nhiều phép thử tương tự ngoài đời thực, chip M1 không chỉ “tiệm cận” khả năng xử lý của những máy Mac trang bị chip Intel, mà còn đánh bại chúng. Rất nhiều người trên toàn thế giới đều phải đưa ra câu hỏi đầy bất ngờ, nhờ đâu mà điều này lại thành hiện thực được? Nếu bạn là một trong số những người đó, có lẽ bạn đã đến đúng chỗ rồi đấy. Ở đây tôi dự định sẽ giải thích một cách dễ hiểu nhất những gì Apple đã làm với chip M1. Show
Cụ thể hơn, những câu hỏi rất nhiều người đều đưa ra là:
Chip vi xử lý (CPU) là gì?
Bản chất ý tưởng instruction register cũng đã tồn tại từ rất lâu. Lấy ví dụ như chiếc máy tính cơ học trên đây, register cơ học là thứ lưu trữ giá trị số nguyên bạn dùng để tính toán cộng trừ. Đấy cũng chính là thứ tạo ra khái niệm máy tính tiền (cash register). Thanh ghi là nơi bạn “ghi” giá trị số liệu nhập đầu vào. Nhưng chip M1 không phải chỉ là một con CPU!
Về cơ bản, M1 là cả một chiếc máy tính trong hình dạng của một chip bán dẫn. Bên trong nó có CPU, có bộ xử lý đồ họa (GPU), bộ nhớ, điều khiển đầu vào và đầu ra, cùng rất nhiều thứ khác hợp thành cả một chiếc máy tính. Khái niệm này được gọi là System on a Chip (SoC). Hôm nay nếu bạn ra tiệm mua một con chip của Intel hay của AMD sản xuất, bạn sẽ chỉ có được một gói chip bán dẫn bên trong đó có nhiều vi xử lý trong một gói, một con chip cầm trên tay. Trong quá khứ máy tính được trang bị nhiều chip vi xử lý độc lập trên bo mạch chủ. Nhưng nhờ tiến bộ công nghệ, con người có thể tạo ra hàng tỷ transistor trên bề mặt một die chip bán dẫn. Điều này dẫn đến việc Intel và AMD bắt đầu đưa nhiều vi xử lý vào chung một chip. Những vi xử lý trong cùng một con chip đó về sau chúng ta gọi là nhân. Một nhân là một chip vi xử lý độc lập, có thể đọc hướng dẫn từ bộ nhớ để thực hiện ra các phép tính. Trong một thời gian dài, để tăng hiệu năng xử lý cho máy tính, các hãng chỉ có một chiến lược duy nhất là trang bị càng nhiều nhân vi xử lý trong một chip CPU càng tốt. Nhưng hiện tại xu hướng này đang dần bị xóa bỏ, bời một cái tên duy nhất: Apple. Chiến lược chip xử lý tính toán không đồng nhất của Apple
Đây hoàn toàn không phải kiến thức mới mẻ gì. Trong nhiều năm qua, những chip bán dẫn đặc dụng như GPU đã được trang bị cho những card đồ họa của Nvidia và AMD, xử lý những phép tính liên quan tới đồ họa máy tính nhanh hơn nhiều so với CPU đa dụng. Điều mà Apple đã làm không phải mới mẻ, nhưng lại là hướng đi đột phá theo đúng hướng mà Nvidia và AMD đang làm. Thay vì trang bị cho M1 một số lượng nhân vi xử lý đa dụng, M1 được trang bị rất nhiều chip đặc dụng:
Kiến trúc bộ nhớ hợp nhất có gì đáng nói?
Trong một thời gian rất dài, những hệ thống máy tính giá rẻ đều có bộ vi xử lý CPU và bộ xử lý đồ họa GPU nằm trên cùng một die chip bán dẫn. Chúng chậm, rất chậm. Trong quá khứ nếu nói “đồ họa tích hợp”, hẳn các bạn cũng hiểu được phần nào hiệu năng của GPU trang bị trong chiếc máy tính đó. Nhưng GPU tích hợp chậm cũng có lý do cả. Những vùng khác nhau trong bộ nhớ được dành riêng cho CPU và GPU. Nếu CPU có một khoảng dữ liệu nó muốn GPU sử dụng, CPU sẽ không thể nói rằng “đây, dùng tạm một phần bộ nhớ của CPU đi”. Nó sẽ phải copy hết đống dữ liệu đang nằm ở khu vực bộ nhớ dành riêng cho CPU sang khu vực bộ nhớ dành riêng cho GPU để bộ xử lý đồ họa hoạt động. Cả CPU lẫn CPU đều không muốn bộ nhớ được xử lý theo cùng một cách. Hãy làm một phép so sánh vui và ngốc nghếch. CPU và GPU giống như hai thực khách vào nhà hàng. Vấn đề thứ hai khi trang bị GPU mạnh vào SoC, đó là chip GPU kích thước lớn, tạo ra rất nhiều nhiệt năng, và sẽ không dễ gì trang bị nó vào chung một die bán dẫn cạnh CPU mà không đưa ra được giải pháp tản nhiệt hiệu quả. Những card đồ họa rời thường trông như hình dưới đây: Kích thước đồ sộ, với cả quạt lẫn heatsink. Chúng có cả bộ nhớ riêng rẽ để phục vụ cho chip GPU tham lam trang bị bên trong. Điều đó đưa chúng ta đến với kiến trúc Unified Memory Architecture của Apple. UMA cố gắng giải quyết tất cả những vấn đề kể trên, mà không có bất kỳ bất lợi nào liên quan đến giải pháp chia sẻ bộ nhớ giữa CPU và GPU theo kiểu cũ. Để làm được điều này, Apple đã thiết kế lại kiến trúc bộ nhớ theo những hướng sau:
Nhưng bù lại, Apple muốn phần nào giảm thiểu tác động của việc không thể nâng cấp RAM bằng cách cho phép chip M1 tương tác với SSD ở tốc độ rất cao, cao tới mức SSD có thể trở thành bộ nhớ cho cả hệ thống máy tính. Nếu SoC ngon thế, sao Intel và AMD không bắt chước?
Nhưng có một lý do rất quan trọng khiến cho AMD, Intel hay những hãng khác không làm được điều như Apple. SoC là cả một hệ thống máy tính chỉ trong một con chip bán dẫn. Những sản phẩm như thế trở nên hợp lý hơn trong mắt những nhà sản xuất máy tính, ra mắt sản phẩm trọn gói, như PC của Dell, HP, hay chính bản thân Apple. Nếu mô hình kinh doanh đang chỉ dừng lại ở việc sản xuất và bán chip xử lý, thì việc chuyển sang sản xuất cả hệ thống máy tính hoàn chỉnh sẽ không mấy hợp lý. Trong khi đó đối với ARM, đó hoàn toàn không phải vấn đề. Những hãng máy tính hoàn toàn có thể mua bản quyền thiết kế kiến trúc chip bán dẫn của ARM, rồi mua tài sản trí tuệ để sản xuất những chip khác, để đưa vào SoC của họ bất kỳ chip đặc dụng nào họ muốn, như Apple đã làm với M1. Tiếp theo, họ giao hợp đồng cho những đơn vị fab chip bán dẫn như TSMC, Samsung hay GlobalFoundries, cũng là những bên đang sản xuất chip cho Apple, AMD hay Nvidia. Nhưng chúng ta có lẽ đang rời xa thế giới PC hoạt động theo mô hình như vậy. Trong thế giới mới của những SoC, bạn sẽ không còn cần phải tìm từng linh kiện khác nhau từ các hãng khác nhau nữa. Thay vào đó, các hãng sẽ “lắp ráp” các tài sản trí tuệ của các đơn vị khác mà họ đã mua. Họ sẽ mua thiết kế GPU, CPU, modem, IO controller và những thứ khác để tự tạo ra một SoC in-house. Rồi sau đó chỉ cần tìm foundry để sản xuất ra con chip đps. Đến đây chúng ta sẽ có một vấn đề lớn, vì Intel, AMD hay Nvidia đều sẽ không chịu bán tài sản trí tuệ cho Dell hay HP để cho phép họ tự sản xuất SoC trang bị trong các hệ thống desktop hay laptop đóng mác Dell và HP. Sẽ đến lúc, Intel hay AMD sẽ đơn giản là bắt đầu thiết kế, sản xuất và bán ra thị trường những SoC hoàn thiện. Nhưng bên trong những SoC đó liệu sẽ có những linh kiện và chip đặc dụng nào? Mỗi nhà sản xuất PC đều có ý tưởng và nhu cầu riêng về những linh kiện bên trong một SoC. Sẽ tới lúc Intel và AMD xuất hiện ra những bất đồng với không chỉ các nhà sản xuất PC mà còn với cả Microsoft, về việc trong một SoC cần có những bộ phận nào cấu thành. Còn đối với Apple, chuyện rất đơn giản. Họ chỉ cần kiểm soát toàn bộ hệ thống, từ phần cứng tới phần mềm. Lấy ví dụ họ đem đến cho các lập trình viên thư viện Core ML để phát triển những hệ thống machine learning. CoreML chạy trên CPU, hay trên chip xử lý neural, điều đó các dev không cần quan tâm. Thử thách cơ bản khi tạo ra một CPU hiệu năng cao
Firestorm, trái lại, đánh bại hầu hết những CPU Intel và suýt chút nữa đánh bại luôn cả CPU mạnh nhất của AMD Ryzen. Trước khi nói về lý do vì sao Firestorm lại mạnh đến như vậy, chúng ta phải hiểu được giải pháp cơ bản để giúp một nhân vi xử lý tăng hiệu năng làm việc. Về cơ bản, để tạo ra một nhân CPU mạnh, các nhà sản xuất phải cùng lúc hoàn thành hai chiến lược: Và giải pháp để tăng hiệu năng CPU giờ chỉ còn một cách, đó là làm cách nào xử lý cùng lúc càng nhiều instruction càng tốt. Chọn CPU Multi-core hay Out-of-Order bây giờ?
Trên nguyên tắc, một vi xử lý có thể chỉ cần một nhân và chạy nhiều luồng xử lý. Trong trường hợp này, nhân xử lý sẽ tạm thời ngừng làm việc một luồng tác vụ, lưu tạm kết quả dang dở trước khi chuyển sang luồng tác vụ khác, xong thì quay lại làm nốt tác vụ đang dở. Xử lý theo kiểu này thực tế không khiến hiệu năng tăng lên, và chỉ được sử dụng khi một luồng xử lý thường xuyên bị ngừng lại để chờ lệnh từ người dùng, chờ dữ liệu trong trường hợp kết nối tốc độ chậm, v.v… Đây là luồng xử lý phần mềm. Luồng xử lý phần cứng đồng nghĩa với việc bạn sẽ có thêm những phần cứng vật lý, như thêm nhân xử lý để tăng tốc độ làm việc với máy tính. Vấn đề với nhiều luồng xử lý phần cứng là lập trình viên sẽ phải viết phần mềm để tối ưu khả năng xử lý của nhiều nhân CPU cùng lúc. Một vài tác vụ như phần mềm máy chủ rất dễ viết theo kiểu này. Những tác vụ xử lý qua máy chủ gần như độc lập với nhau, khi ấy CPU máy chủ càng nhiều nhân thì càng xử lý được cho nhiều người dùng. Ấy vậy nên những chiếc như Xeon hay Threadripper là lựa chọn tuyệt vời cho những dịch vụ điện toán đám mây. Apple, trái lại, nằm ở thái cực hoàn toàn ngược lại so với những nhà sản xuất CPU phục vụ máy chủ đám mây. Apple sản xuất thiết bị tiêu dùng cho người dùng đầu cuối. Nhiều nhân, rất nhiều nhân xử lý không phải lợi thế quan trọng nhất. Thiết bị của họ dùng để xử lý hình ảnh, video, phát triển phần mềm… Họ muốn máy tính của mình sở hữu những hình họa và chi tiết đồ họa đẹp nhất có thể. Thêm nữa, phần mềm máy tính cá nhân thường không được tối ưu cho hàng chục, hàng trăm nhân xử lý đồng thời. Một trong những tác vụ nặng nhất đối với máy tính hiện tại là chơi game, nó có thể tối ưu tốt cho những CPU 8 nhân, nhưng 128 nhân thì chưa chắc, dùng CPU ấy chơi game quá phí. Đối với máy tính cá nhân, các bạn sẽ cần những nhân CPU mạnh hơn, nhưng số lượng nhân ít hơn máy chủ nhiều. Điều thú vị là, xử lý tác vụ theo kiểu không có trật tự (Out-of-Order – OoO) là một cách để CPU xử lý nhiều lệnh hơn cùng một lúc, mà không cần đến nhiều luồng xử lý. Các lập trình viên cũng không cần viết phần mềm để tự tối ưu cho cách xử lý OoO. Nhìn từ góc nhìn của lập trình viên, chỉ cần hiểu đơn giản là mỗi nhân CPU chạy nhanh hơn mà thôi. CPU khi ấy nhận được một loạt những instruction để xử lý cùng lúc. Nhưng chúng được lập trình để thực hiện lần lượt. Còn những vi xử lý hiện đại thì có một khả năng gọi là xử lý không theo trình tự, Out-of-Order. Điều này đồng nghĩa với việc các CPU có thể phân tích một lượng instruction rất nhanh và định hình xem phép tính nào liên quan tới nhau. Ví dụ: Lấy ví dụ cho vui vậy thôi, chứ CPU hiện đại giờ có thể thực hiện hàng tỷ tỷ phép tính như thế mỗi giây, mỗi chu kỳ xung nhịp có thể xử lý hàng trăm hàng nghìn instruction lần lượt, và cũng biết tương quan giữa từng phép tính xem instruction nào liên quan tới nhau. Lấy ví dụ, lệnh add r4, r1, 5 phụ thuộc vào dữ liệu r1, tạo ra từ phép tính mul r1, r2, r3. Lập trình viên có thể đưa hai phép tính này vào một bảng tính để CPU làm việc từ từ. Nhiều phép tính có thể hoàn thành sớm nhưng không thể lấy kết quả làm giá trị chính thức. Chúng được đưa xuống tầng dưới trong chuỗi instruction CPU phải xử lý. Vi xử lý sẽ cứ tiếp tục thực hiện lần lượt những tác vụ theo thứ tự, tác vụ nào chưa đạt giá trị thỏa mãn thì cho xuống dưới, nhường chỗ cho tác vụ mới làm việc, tất cả chỉ hoàn thành khi tất cả các phép tính đều được giải quyết xong. Giải thích thì ngắn gọn, nhưng đó là nền tảng của cơ chế xử lý Out-of-Order. Về cơ bản thành quả sẽ trông giống như CPU chỉ cần 1 luồng xử lý tất cả mọi công việc, còn đối với lập trình viên, Out-of-Order cho phép họ ứng dụng những tác vụ song song xử lý rất nhanh. Và cũng chính nhờ đó, nhân CPU Firestorm trong chip M1 của Apple mới có được hiệu năng đáng nể như vậy. Về cơ bản nó khỏe hơn gần như tất cả những sản phẩm tiêu dùng từ phía Intel và AMD, không cần bàn đến những đối thủ khác trên thị trường chip bán dẫn. Vì sao khả năng xử lý Out-of-Order của CPU Intel và AMD kém hơn Apple M1?
Có một khái niệm gọi là Reorder Buffer (Bộ nhớ đệm sắp xếp lại – ROB), và phần này không chứa những hướng dẫn xử lý tác vụ thông thường. Nó không phải thứ CPU lấy từ bộ nhớ để xử lý. Chúng là những instruction bên trong kiến trúc tập lệnh (ISA – Instruction Set Architecture). Đó chính là những kiến trúc mà chúng ta gọi tên là x86, là ARM hay PowerPC. Tuy nhiên, CPU vận hành dựa trên một bộ kiến trúc tập lệnh hoàn toàn độc lập, được gọi là micro-operations (micro-ops hoặc μops). ROB chứa đầy những tập lệnh nhỏ như vậy. Các tập lệnh này rất rộng, và có thể chứa nhiều dạng siêu thông tin khác nhau. Bạn sẽ không thể thêm những dạng thông tin như thế vào kiến trúc tập lệnh ARM hay x86, vì một trong vài hậu quả dưới đây sẽ xảy ra:
Đối với những CPU CISC, gần như không có cách nào khác ngoài việc phải làm việc với những micro-ops đó, nếu không những tập lệnh phức tạp của kiến trúc CISC sẽ tạo ra đường hầm cố định cho các tác vụ, khiến việc xử lý thông qua giải pháp Out-of-Order gần như bất khả thi. Trong khi đó, những CPU kiến trúc RISC lại có lựa chọn riêng. Ví dụ những CPU ARM nhỏ gần như không dùng micro-ops, và cũng đồng nghĩa với việc không thể ứng dụng Out-of-Order. Những dòng khó hiểu ở trên thì có ý nghĩa gì khi so sánh Intel và AMD với Apple M1? Lý do rất đơn giản, hiệu năng của CPU nhanh đến đâu, hoàn toàn phụ thuộc vào tốc độ lấp đầy bộ nhớ đệm ROB, và lấp đầy chúng với bao nhiêu lệnh tính toán micro-ops. ROB ghi dữ liệu càng nhanh, càng nhiều, thì cơ hội để CPU “nhặt” ra những tập lệnh để xử lý song song cũng cao hơn, dẫn đến một hệ quả đơn giản mà ai cũng muốn: Hiệu năng xử lý tăng. Đó cũng là điểm khác biệt lớn giữa Apple M1 so với bất kỳ CPU nào của Intel và AMD. Những con chip CPU khủng nhất của Intel và AMD cùng lắm cũng chỉ có 4 decoder, nghĩa là cùng lúc có thể dịch 4 tập lệnh trở thành micro-ops để CPU xử lý. Còn M1 thì có đến 8 decoder, còn kích thước ROB thì lớn hơn đến 3 lần. Hiểu đơn giản, bạn có thể lưu gấp 3 lần số tập lệnh để CPU làm việc. Không có một con chip xử lý nào trên thị trường hiện giờ có ngần ấy decoder cả. Vậy tại sao Intel và AMD không cho thêm decoder dịch tập lệnh vào CPU của họ? Đây là lúc chúng ta được thấy kiến trúc RISC trỗi dậy trả thù CISC, với nhân CPU Firestorm trong SoC M1. Một tập lệnh x86 có thể dài từ 1 đến 15 bytes. Trên kiến trúc RISC, kích thước tập lệnh là cố định. Khi ấy, bẻ gãy một lượng dữ liệu thành những tập lệnh và gửi vào 8 “máy dịch” trong CPU của chip M1 cùng lúc trở nên đơn giản vô cùng, khi mỗi tập lệnh đều có độ dài như nhau. Tuy nhiên trên CPU x86, decoder hoàn toàn không biết tập lệnh kế tiếp bắt đầu từ đâu. Nó phải phân tích cụ thể từng tập lệnh để biết chúng dài cỡ nào. CPU của Intel và AMD xử lý bước này đúng kiểu “bạo lực”, khi chúng cố gắng dịch tập lệnh ở mọi điểm khởi đầu có thể. Điều đó đồng nghĩa với khả năng phải đối mặt với rất nhiều lần CPU đoán sai, hay những lỗi cơ bản khiến quá trình decode instruction phải bỏ đi làm lại. Điều này tạo ra giai đoạn dịch tập lệnh vô cùng phức tạp và rối như canh hẹ, cùng lúc rất khó đưa nhiều decoder vào CPU để song song xử lý. Còn đối với Apple, những điều đó không xảy ra, nên cứ thêm decoder vào CPU là làm việc mặc định nhanh hơn. Thực tế đối với kiến trúc x86, thêm quá 4 decoder tạo ra quá nhiều vấn đề phiền toái, đến mức theo chính lời của AMD, con số 4 là lượng decoder tối đa có thể trang bị trong một CPU. Đó chính là một phần lý do giúp cho Firestorm trong M1 xử lý gấp đôi lượng tập lệnh cùng lúc so với CPU Intel và AMD vận hành ở cùng xung nhịp. Sẽ có nguời cho rằng, tập lệnh của kiến trúc CISC được dịch ra làm nhiều micro-ops, mật độ dày hơn nên giải mã một tập lệnh x86 cũng giống như giải mã 2 tập lệnh ARM. Vấn đề là ngoài đời thực, “lý thuyết” kiểu này không đúng lắm. Những dòng lệnh x86 được tối ưu tốt hiếm khi dùng những tập lệnh CISC phức tạp, mà thậm chí đôi khi chúng đơn giản hệt như RISC. Dù vậy, CPU của Intel lẫn AMD đều phải được thiết kế decoder để xử lý những tập lệnh phức tạp và dài nhất, ở ngưỡng 15 bytes, dù không phải tập lệnh nào cũng phức tạp như vậy. Chính vì cái chuỗi nguyên nhân hệ quả như vậy, CPU của Intel và AMD không được trang bị quá 4 decoder để vận hành. Nhưng mà Zen 3 của AMD hiện giờ vẫn nhanh hơn Firestorm của M1 đúng không? Đúng, nhưng để đổi lại hiệu năng nhanh hơn chip M1, nhân CPU của chip kiến trúc Zen 3 từ AMD phải vận hành ở xung nhịp 5 GHz, còn Firestorm trong M1 chỉ chạy ở xung nhịp 3.2 GHz mà thôi. Xung nhịp nhanh hơn 60%, nhưng hiệu năng benchmark của CPU Ryzen kiến trúc Zen 3 chỉ nhỉnh hơn SoC M1 một chút. Vậy tại sao Apple không tăng luôn xung nhịp của 4 nhân CPU Firestorm để đánh bại AMD luôn cho tiện? Vì nếu làm thế, hệ thống tản nhiệt sẽ phải gánh nguồn nhiệt năng khổng lồ mà con chip tạo ra. Đấy cũng chính là một phần lợi thế mà Apple không ngần ngại khoe khoang. Máy tính của Apple, không như những cỗ máy trang bị CPU Intel hay AMD, gần như không cần quạt tản nhiệt. Nếu muốn hiệu năng tăng lên, Apple sẽ tăng lượng nhân CPU hiệu năng cao, thay vì nâng xung nhịp của chip. Nhờ đó, điện năng sử dụng sẽ được giữ ở mức lý tưởng, trong khi hiệu năng thì vẫn cứ tăng. Tương lai của AMD và Intel
Vấn đề của việc trang bị nhiều nhân vi xử lý trong một con chip CPU là đối với những tác vụ thông thường của người dùng đầu cuối, lợi ích sẽ giảm dần khi có quá nhiều nhân, không bù lại được so với chi phí bỏ ra. Dĩ nhiên những chip 64 hay 128 nhân vẫn quá tuyệt cho mục đích vận hành máy chủ đám mây. Nhưng cùng lúc, những tập đoàn như Amazon hay Ampere cũng đang tấn công mô hình kinh doanh của Intel với những CPU quái vật trang bị 128 nhân. May mắn thay cho cả AMD lẫn Intel, Apple chỉ sản xuất chip M1 phục vụ cho nhu cầu “tự sản tự tiêu”, không bán nó ra thị trường. Vì thế thị trường PC về cơ bản vẫn sẽ phải chung sống với những sản phẩm AMD và Intel ra mắt hàng năm. Sẽ có người dùng PC nhảy tàu sang Mac, nhưng quá trình đó sẽ diễn ra rất chậm. Người dùng sẽ không đành lòng từ bỏ một nền tảng mà họ đã đầu tư quá nhiều tiền để đổi sang một nền tảng khác. Nhưng đối với những người làm việc chuyên nghiệp, có tiền để đầu tư, và bị gắn bó quá mật thiết vào một trong hai nền tảng PC và Mac, họ sẽ có thể chọn giải pháp Apple nhiều hơn trong tương lai, từ đó giúp Apple tăng thị phần người dùng chuyên nghiệp hoặc thiết bị cao cấp, và dần dà là cả thị trường PC nói chung. |