Sau việc Apple giới thiệu chip A7 với kiến trúc 64 bits, mình đã thấy có nhiều tranh luận trong diễn đàn về đề tài này. Fan Apple thì ra sức tung hô về sự ưu việt của nó, "như 1 dường cao tốc có 64 làn xe thay vì 32 làn xe như trước kia" , trong khi antifan lại ra sức dìm hàng, cho rằng 64 bits là vô ích khi iPhone chỉ có 1Gb RAM. Nhưng điểm chung của cả 2 phe mình nghĩ đều là khá mập mờ và muốn biết rõ thêm về 1 cái khái niệm tưởng như rất quen(với PC) mà cũng rất lạ.
Dĩ nhiên để giải thích cụ thể, chi tiết và chính xác nhất về vấn đề này thì mình nghĩ các bạn cần học nguyên 1 khoá về kiến trúc máy tính. Với những thuật ngữ vấn đề chuyên môn phức tạp và sẽ chẳng thú vị dễ nuốt gì với những người ko theo ngành máy tính. Vì vậy mình sẽ cố giải thích bằng những ví dụ đơn giản để các bạn có thế nào hiểu được.
Trước tiên, bạn cần biết CPU để làm gì, và nó làm điểu đó ra sao?
http://static.ddmcdn.com/gif/microprocessor1.gif
Về cơ bản CPU dùng để thực hiện những phép tính toán. Nó gồm nhiều bộ phận, nhưng ở đây chúng ta chỉ miêu tả hoạt động của nó qua 2 thành phần chính. ALU (bộ xử lý tính toán) và registers(thanh ghi). Mình sẽ miêu tả hoạt động của nó qua 1 phép tính rất đơn giản:
Để thực hiện phép toán trên thực ra cần rất nhiều bước:
Dĩ nhiên để giải thích cụ thể, chi tiết và chính xác nhất về vấn đề này thì mình nghĩ các bạn cần học nguyên 1 khoá về kiến trúc máy tính. Với những thuật ngữ vấn đề chuyên môn phức tạp và sẽ chẳng thú vị dễ nuốt gì với những người ko theo ngành máy tính. Vì vậy mình sẽ cố giải thích bằng những ví dụ đơn giản để các bạn có thế nào hiểu được.
Trước tiên, bạn cần biết CPU để làm gì, và nó làm điểu đó ra sao?
http://static.ddmcdn.com/gif/microprocessor1.gif
Về cơ bản CPU dùng để thực hiện những phép tính toán. Nó gồm nhiều bộ phận, nhưng ở đây chúng ta chỉ miêu tả hoạt động của nó qua 2 thành phần chính. ALU (bộ xử lý tính toán) và registers(thanh ghi). Mình sẽ miêu tả hoạt động của nó qua 1 phép tính rất đơn giản:
Code:
int c=a+b;
Để thực hiện phép toán trên thực ra cần rất nhiều bước:
Bước 1: CPU cần biết địa chỉ, nơi cất giữ giá trị của biến a trong bộ nhớ(RAM). CPU sau đó sẽ chuyển địa chỉ đó cho 1 chiếc xe buýt😁 (bus)(chắc nhiều bạn mua RAM vẫn hay quan tâm bus bao nhiêu, chính là tốc độ chiếc xe buýt này đây), và chiếc xe buýt đó sẽ chở dữ liệu của a đến 1 thanh ghi registerA trên CPU.
Bước 2: Điều tương tự sẽ diễn ra với b, dữ liệu của b được ghi vào thanh ghi registerB.
Bước 3: ALU sẽ thực hiện phép cộng và ghi kết quả vào thanh ghi registerC.
Bước 4: CPU lại gọi bus và chuyển kết quả đó đến cho biến c.
Vậy thì 32bit hay 64bit đóng vai trò gì trong kiến trúc của CPU?
32 bit và 64 bit chính là độ dài của thanh ghi, và đồng thời là độ dài của địa chỉ mà CPU sử dụng.
Để đơn giản thì mình ví dụ độ dài của thanh ghi lần lượt là 1,2 chữ số thập phân. Để thực hiện phép tính 12+34 trên CPU có thanh ghi độ dài 1, ALU sẽ phải thực hiện 2 phép tính: 1+3 và 2+4, sau đó nối kết quả lại với nhau. Nếu CPU có độ dài là 2 thì nó sẽ có thể thực hiện phép tính 12+34 ngay lập tức.
Còn về độ dài đia chỉ thì chắc mọi người sẽ thấy dễ hiểu, nó giống như độ dài số điện thoại. nếu số điện thoại của bạn chỉ có 6 chữ số nghĩa là chỉ có tối đa 1triệu người có số điện thoại=> Nếu có nhiều thuê bao hơn, nhà mạng sẽ phải có số đt dài hơn. Tương tự vậy, mỗi byte dữ liệu trên RAM cần 1 địa chỉ để liên lạc, với 32bit, ta sẽ có 2^32=4GB số địa chỉ. Như vậy nếu có nhiều hơn 4G RAM thì phần nhiều hơn đó sẽ ko có số địa chỉ, ko thể "liên lạc" đến nó được.
Vậy 64 bit có lợi thế + hạn chế gì:
Lợi:
- Với phép tính dài, bạn sẽ thực hiện nhanh gấp đôi như ví dụ ở trên.
- CPU sẽ có thể truy cập được nhiều địa chỉ trên RAM hơn.
- Ngoài tra, tranh thủ việc thay đổi kiến trúc lên 64 bits, số lượng thanh ghi và số lượng câu lệnh(instructions) cũng được tăng lên. Về số lượng thanh ghi thì như ví dụ ở trên, nếu bạn chỉ có 3 thanh ghi, sau khi thực hiện câu lệnh bạn sẽ phải xoá dữ liệu trên thanh ghi đó. Nếu sau đó bạn có phép tính gì đến biến c chẳng hạn bạn sẽ phải lại gọi bus chở dữ liệu lại cho bạn, mất thời gian hơn. Còn nếu có nhiều thanh ghi, bạn cứ để tạm những cái biến kia ở đó để sau này dùng lại.
- Lợi ích của việc tăng số lượng câu lệnh: ví dụ như chip của bạn chỉ có câu lênh thực hiện phép cộng. Khi đó muốn tính 3+3+3+3 bạn sẽ phải chạy câu lệnh (+) 3 lần. Nếu máy tính của bạn có câu lệnh nhân, bạn chỉ cần chạy 1 lệnh 3x4 là xong. (Tuy nhiên, bản thân Chip di động đã là giản lược rất nhiều câu lệnh so với chip máy tính. Nên dù tăng thêm số câu lệnh, độ dài câu lệnh vẫn ko thay đổi, vẫn là 32 bit.)
Quảng cáo
- Việc địa chỉ của dữ liệu dài gấp đôi sẽ gây ko ít bất lợi. Cứ tưởng tượng việc tự nhiên giờ nhà mạng thay đổi bắt mỗi số điện thoại 20 chữ số bạn sẽ thấy.
- Ko hẳn là hại, nhưng như ví dụ ở trên nếu phép cộng là 12+34, CPU có thanh ghi dài hơn có ưu thế, nhưng nếu phép tính là 1+2? lúc này cả 2 CPU đều như nhau thôi.
- Rắc rối với phần mềm: Phầm mềm sẽ là người ra lệnh cho CPU làm gì. Như ví dụ 12+34 ở trên thì phần mềm 32 bit sẽ bảo CPU thực hiện 1+3,2+4, rồi ghép kết quả lại. Phần mềm 64 bit sẽ bảo CPU tính thẳng 12+34 luôn. Bạn sẽ thấy là nếu phần mềm 32 bit chạy với CPU 64 bit, nó vẫn chạy tốt, dù ko được tối ưu. Nhưng nếu phần mềm 64bit chạy với CPU 32 bit sẽ nguy to. Điều này sẽ khiến các hãng phần mềm ngại viết app cho 64 bit, vì nó sẽ chỉ chạy được trên 1 số lượng rất nhỏ sản phẩm iOS: chỉ có iPhone5S. Còn nếu họ vẫn chỉ viết app cho 32bit thì sẽ ko tận dụng được lợi thế của cái CPU 64 bit kia.=> Với những phần mềm thực sự cần sự tối ưu của 64bit, nhà sản xuất sẽ buộc phải có 2 phiên bản của 1 phền mềm trên AppStore.
- Cái này mình ko có dữ liệu cụ thể, nhưng với cảm tính trực quan thì cũng có thể thấy sản xuất chip 64 bit dĩ nhiên tốn kém hơn sản xuất chip 32 bit. Tốn kém ở đây là cả về mặt kinh phí lẫn công nghệ. Ví dụ như để sản xuất chip 64 bit với cùng 1 xung với chip 32 bit cần gấp đôi số transitor. Thì với số transitor gấp đôi đó bạn cũng có thể làm 1 chip 32 bit có số nhân gấp đôi, hoặc tăng xung lên chẳng hạn. So sánh giữa 2 cách này, (gấp đôi số nhân, hay gấp đôi số bit) cách nào hiệu quả hơn thì ko dễ. Nhưng cũng có thể thấy rằng ko phải gấp đôi số bit là cách duy nhất để tăng sức mạnh cho chip vào lúc này.
Nếu ai đó nói iphone5S 64bit mà RAM 1G ko có tác dụng thì ko đúng. Chỉ cần chạy benchmark sẽ thấy ngay là A7 chạy nhanh hơn A6 rồi. Tuy nhiên nếu cho rằng lên 64 bit là cách duy nhất để chạy nhanh hơn vào lúc này cũng ko đúng. Dù sao, kiến trúc 64bit ARM v8 cũng đã được giới thiệu từ năm ngoái, ko sớm thì muộn sẽ đến lúc các hãng cần sử dụng chip 64bit.
Như cách Apple nói chip của họ 64bit là "Desktop class" cũng là dễ gây hiểu nhầm cho người ko rành. Mặc dù cùng là 64 bit nhưng chip A7 và chip x64 của PC có kiến trúc hoàn toàn khác nhau. Cũng như việc chip A6 trở về trước với các chip x86 của PC vậy.
Về cơ bản, việc hỗ trợ chip 64 bit của iOS sẽ khó khăn hơn nhiều so với Android.(Nếu có người thắc mắc mình sẽ giải thích lý do cụ thể sau). Vì vậy Apple nhân lúc đang nâng cấp iOS 1 cách triệt để này kết hợp thêm support 64 bit vào cũng là hợp lý. Việc là người đầu tiên hỗ trợ 64 bit cũng sẽ giúp cho nhà sản xuất phần mềm cho iOS có thêm thời gian để hỗ trợ.
Mình cũng từng nghe người thắc mắc là như bên Android toàn chạy đua theo số nhân nhưng phầm mềm của nó đa số chỉ code trên 1 luồng(thread) thì có tác dụng gì đâu? Nhiều nhân chỉ để làm màu. Nếu mọi người hứng thú mình cũng sẽ giải thích về chuyện này sau.