Vi xử lí 64-bit là gì và nó giúp ích như thế nào cho các thiết bị điện
toán?
Trong thời gian qua chúng ta đã được nghe nói rất nhiều về vi xử lí64-bit, không chỉ đối với CPU cho máy tính mà còn cho cả thiết bị di động. Điện toán 64-bit đang là xu thế không thể tránh khỏi trong lĩnh vực thiết bị và phần mềm công nghệ. Vậy bộ xử lí 64-bit là gì, nó khác với 32-bit như thế nào và nó giúp ích gì cho những thiết bị mà chúng ta dùng hằng ngày?
Phân biệt kiến trúc 64-bit nói chung với x86-64
Có một số khái niệm mà bạn cần phân biệt rõ trước khi tiếp tục tìm hiểu bài viết, bao gồm:
x86: Đây là tên của một bộ tập lệnh chỉ dẫn do Intel và AMD phát triển. Nó được xây dựng dựa trên vi xử lí Intel 8086, một con chip ra mắt năm 1978. Lý do có chữ "x86" đó là vì những model kế nhiệm cho 8086 cũng được đặt tên có đuôi là "86". Trước đây x86 hỗ trợ điện toán 16-bit, giờ đây là 32-bit. Đối thủ cạnh tranh với x86 chính là ARMv7, tập lệnh chỉ dẫn do hãng ARM của Anh phát triển và hiện đang được dùng cực kì nhiều trong các thiết bị di động như smartphone, tablet.
x86-64: còn có tên khác là x64, x86_64 hoặc amd64. Đây là cái tên dùng để chỉ phiên bản 64-bit của tập chỉ dẫn x86 mà mình mới nói tới. Cấu hình x86-64 ban đầu được tạo ra bởi AMD. Lúc mới ra mắt, AMD gọi x86-64 là AMD64, Intel thì gọi bằng cái tên IA-32e và EMT64. Cách gọi tập chỉ dẫn này cũng khác nhau với các hãng phần mềm, Apple thì gọi là x86_64, Sun Microsystem (giờ đã thuộc về Oracle) và Microsoft thì gọi là x64, nhiều bản distro Linux lại dùng chữ AMD64. AMD K8 là vi xử lí đầu tiên trên thế giới sử dụng x86-64. Đối thủ của x86-64 là ARMv8, phiên bản hỗ trợ điện toán 64-bit tiếp nối cho ARM v7.
Nói về hệ điều hành: Windows 95, 98, XP, Vista, 7 chỉ chạy được trên chip x86/x64, Windows 8 có bản cho x86/x64 và ARM. Linux, Android thì có thể chạy cả trên chip x86/64 lẫn chip ARM. iOS hiện chỉ mới có thiết bị dùng CPU ARM.
IA-64: kiến trúc này sử dụng trong dòng vi xử Intel Itanium, chủ yếu xuất hiện trong những máy chủ doanh nghiệp hoặc hệ thống tính toán hiệu năng cao chứ ít dùng trong máy tính cá nhân. IA-64 hoàn toàn khác biệt và cũng không tương thích với các lệnh của tập lệnh x86 hay x86-64.
32-bit và 64-bit: Hai con số này dùng để chỉ độ dài thanh ghi (register) của CPU và là một loại hình điện otán chứ không phải là một tập kiến trúc lệnh như ba thứ mà bạn vừa đọc ở trên. Người ta có thể dùng khái niệm 32-bit và 64-bit để chỉ CPU hoặc phần mềm. Chi tiết về 64-bit sẽ được giải thích ở bên dưới.
Về cơ bản, CPU dùng để thực hiện những phép tính toán. Những phần mềm mà chúng ta sử dụng hằng ngày thực chất cũng là mỗi chuỗi rất rất nhiều các phép toán chứ không phải khi nào bạn chạy app calculator mới gọi là tính. Chẳng hạn, nếu muốn một cái nút xuất hiện thì hệ điều hành hoặc phần mềm phải dùng dữ liệu để tính và vẽ nó ra, với tọa độ và kích thước như mong muốn. Hoặc khi bạn nhập liệu, máy tính phải "dịch" các bit 010101 để chuyển nó thành kí tự cho chúng ta xem. Tương tự khi chơi game, việc tính toán bước đi, đường đạn,… cũng đều là chuỗi các phép tính.
CPU gồm nhiều bộ phận, nhưng ở đây chúng ta sẽ miêu tả hoạt động của nó qua 2 thành phần chính: ALU (Arithmetic logic unit - bộ xử lý tính toán) và registers (thanh ghi). Register, APU, và một số linh kiện khác hợp thành một nhân CPU. ALU có thể thực hiện những phép toán thông thường như cộng trừ, nhân, chia; ngoài ra còn có thể chạy những phép logic như so sánh 'hoặc', 'và'. Những CPU đời mới còn có phần xử lí dấu chấm động riêng (FPU) để thực hiện những phép tính rất phức tạp.
Trong khi đó, register thực chất là một loại bộ nhớ được tích hợp thẳng vào CPU và nó có tốc độ hoạt động bằng hoặc gần sát với CPU. Dung lượng của register thường rất nhỏ. Có nhiều loại register lắm, ví dụ như data register (chứa dữ liệu số học, dấu chấm động, kí tự, mảng dữ liệu), address register (chuyên dùng để chứa địa chỉ của dữ liệu nào đó trên bộ nhớ), general purpose register (có thể chứa cả dữ liệu và địa chỉ), vector register (chứa dữ liệu để xứ lí vector), integer register (chuyên chứa số thực), SIMD (dùng để tính toán song song)...
Về con số 32-bit hay 64-bit, những CPU 32-bit sẽ có bộ ALU và register với độ rộng là 32-bit, còn CPU 64-bit thì sẽ có độ rộng của những thành phần này là 64-bit.
Cấu trúc bộ nhớ máy tính
Vậy tại sao đã có RAM là bộ nhớ, lại có thêm register và cache (L1, L2, L3) để làm gì? Register và cache ra đời để khắc phục hiện tượng nghẽn cổ chai khi mà tốc độ CPU quá nhanh, trong khi tốc độ RAM thì không bằng nên gây ra "thời gian chết" vì RAM không kịp đưa dữ liệu cho CPU xử lí. Như đã nói ở trên, register có tốc độ họa động cực nhanh, gần như bằng với CPU, cache thì có tốc độ thấp hơn một chút nhưng vẫn nhanh hơn nhiều so với RAM. Nếu trong register không có dữ liệu CPU cần, nó sẽ tìm trong cache. Nếu có thì xử lí, nếu không thì tiếp tục lấy từ RAM. Tương tự, nếu trong RAM vẫn chưa có dữ liệu mà CPU cần, nó sẽ tìm trong ổ lưu trữ vĩnh viễn, chính là HDD, SSD, thẻ nhớ, chip eMMC,... Càng tìm nhiều thì mất thời gian càng nhiều. Kim tự tháp ở trên chính là cấu trúc bộ nhớ máy tính và CPU sẽ tìm lần lượt từ trên xuống dưới.
Ở trong hình là sơ đồ giản lược của một CPU. Ngoài ALU và register, bạn cần biết một số khái niệm quan trọng khác như:
Address bus: là chiếc xe buýt để "chở" địa chỉ nơi cất giữ giá trị trên bộ nhớ (RAM hoặc ROM) đến với CPU. Đây thực chất là một tập hợp các dây dẫn. Bus có kích thước, hay còn gọi là độ rộng (width), tương tự như số chỗ ngồi trên xe. Ví dụ, nếu width của bus là 16-bit thì nó có thể chuyên chở 16 bit dữ liệu cùng lúc. Ngoài ra bus còn có tốc độ của riêng mình và được đo bằng đơn vị MHz. Đây chính là con số theo sau RAM mà bạn hay thấy, ví dụ DDR3 1333MHz, 1600MHz.
Data bus: chiếc xe buýt "chở" dữ liệu thật sự từ bộ nhớ đến CPU hoặc ngược lại. Data bus cũng có kích cỡ và tốc độ như đã nói ở trên.
Read (RD) và Write (WR) line: CPU sẽ dùng hai dòng này để nói với bộ nhớ rằng nó đang muốn lấy dữ liệu (read) hay đang muốn ghi dữ liệu (write) lên địa chỉ đã định trước.
Mình sẽ miêu tả hoạt động của CPU qua 1 phép tính rất đơn giản: 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, và chiếc xe buýt đó sẽ chở dữ liệu của biến a đến 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 biến 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ả từ registerC đến gán cho biến c. Khi đó giá trị của biến c sẽ được lưu trên RAM và phần mềm yêu cầu thực hiện phép tính sẽ biết được kết quả phép tính là bao nhiêu.
32-bit hay 64-bit đóng vai trò gì trong kiến trúc của CPU?
Như đã nói ở trên, 32-bit và 64-bit chính là độ dài của register, 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à các 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 và cho ra kết quả ngay lập tức, khỏi phải tính từng bước.
Còn về độ dài địa chỉ thì 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à có tối đa 1 triệu số điện thoại khác biệt nhau. Tương tự vậy, mỗi byte dữ liệu trên RAM cần 1 địa chỉ để liên lạc và chứa dữ liệu. Với kiến trúc 32-bit, như đã nói ở trên, ta sẽ có 2^32 = 4294967296 số địa chỉ, tức khoảng 4,29 tỉ địa chỉ, và cũng tương ứng với dung lượng 4GB. Trong trường hợp này, nếu có nhiều hơn 4GB RAM thì phần nhiều hơn đó sẽ không có địa chỉ, và CPU không cách gì "liên lạc" đến chúng được.
Do nhu cầu sử dụng bộ nhớ ngày càng lớn hơn nên người ta mới cần đến kiến trúc 64-bit. Khi đó, chúng ta sẽ có 2^64 địa chỉ có thể xài được, tức khoảng 1.8446744 x 10^19 địa chỉ, tương đương dung lượng 16 exbibyte, lớn hơn rất rất rất nhiều so với kiến trúc 32-bit. Ngày nay bạn có thể bắt gặp những chiếc máy tính RAM 6GB, 8GB, 16GB, 32GB một cách dễ dàng. Chưa kể đến các máy chủ, chúng có đến hàng trăm GB RAM. Tất nhiên là tổng số địa chỉ (dung lượng RAM) mà hệ điều hành 64-bit hỗ trợ thì không đạt đến con số rất lớn như trên, giới hạn phần cứng trên mainboard cũng là yếu tố khác, nhưng nhìn chung thì vẫn vượt xa mức 4GB của các OS 32-bit. Bên dưới là bảng dung lượng RAM tối đa mà Windows 7, Windows 8 và OS X có thể hỗ trợ.
Lợi ích và hạn chế của vi xử lí 64-bit
1. Lợi điểm của vi xử lí 64-bit
- Với phép tính dài, bạn sẽ thực hiện nhanh gấp đôi như ví dụ phép tính 12 + 34 ở trên.
- CPU sẽ có thể truy cập được nhiều địa chỉ trên RAM hơn. Điều này đã tỏ ra hữu ích trong bối cảnh máy tính giờ đây đã có nhiều model sử dụng 6GB, thậm chí là 8GB và 16GB RAM. Trong thời gian tới, thiết bị di động rồi cũng sẽ được trang bị RAM trên 4GB và đó là lúc vi xử lí 64-bit trở thành điều bắt buộc.
- Ngoài tra, tranh thủ việc thay đổi kiến trúc lên 64-bit, số lượng register và số lượng câu lệnh chỉ dẫn (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 xong thì bạn sẽ phải xoá dữ liệu trên thanh ghi đó để có thể tiếp tục thực hiện phép tính khác. 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 cũng được.
- 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 đó bốn phép 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.)
2. Nhược điểm của chip 64-bit
- Việc địa chỉ của dữ liệu dài gấp đôi sẽ gây không ít bất lợi cho việc thiết kế hệ thống điện toán. 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.
- Không 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 thì sao? lúc này cả 2 CPU 32-bit và 64-bit đều có tốc độ như nhau mà thôi.
- Rắc rối với phần mềm: Phần mềm 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 trên hệ điều hành 64-bit, nó vẫn chạy tốt, dù không được tối ưu. Nhưng nếu là phần mềm 64-bit thì nó sẽ không thể hoạt động với CPU hay hệ điều hành 32-bit. Đây chính là lý do mà Microsoft và rất nhiều hãng phát triển phải đưa ra hai phiên bản cho cùng một phần mềm. Ví dụ: Windows 7 và Windows 8 32-bit và 64-bit; Microsoft Office 32-bit và 64-bit.
- Đối với thiết bị di động, điều này sẽ khiến các hãng làm app ngại viết ứng dụng cho vi xử lí 64-bit vì nó sẽ chỉ chạy được trên một số lượng rất nhỏ, ít nhất là tính đến thời điểm hiện tại. Còn nếu họ vẫn chỉ viết app cho 32-bit thì sẽ không tận dụng được lợi thế của CPU 64 bit. Do đó, cũng như trên PC, nếu lập trình viên muốn app của mình tối ưu hóa cho 64-bit thì phải làm ra hai phiên bản khác nhau, và tốn thời gian, công sức, tiền của hơn rất nhiều trong việc bảo trì và nâng cấp về sau.
64-bit trên trên thiết bị di động
Như đã nói ở trên, vi xử lí 64-bit đã chứng tỏ được năng lực và lợi ích của mình với máy tính, cả PC lẫn server hay những siêu máy tính cỡ to. CPU 64-bit sẽ giúp các máy tính tận dụng được dung lượng RAM trên mức 4GB, vốn đã trở nên cực kì phổ biến hiện nay. Nhiều máy còn xài 6GB, thậm chí là 32GB nữa kìa. Kiến trúc 64-bit cũng giúp các ứng dụng xử lí dữ liệu nhanh hơn (hay nói cách khác là chạy nhanh hơn), và có thể thấy rõ hiệu quả này ở những phền mềm đồ sộ để dựng phim, vẽ hình ảnh 3D, lập trình, cơ sở dữ liệu,… CPU 64-bit hiện nay cũng đã xuất hiện rất nhiều trên thị trường. Hầu hết chip Intel Core i, Celeron, Pentium, các dòng APU và CPU của AMD đều là chip 64-bit. Hệ điều hành 64-bit thì cả Windows, OS X, Linux đều có cả, và chúng ta cũng đã sử dụng chúng rất nhiều trong khoảng 3 năm trở lại đây. Chip Intel trong tương lai cũng sẽ hỗ trợ nhân Android 64-bit.
Sự xuất hiện của ARMv8
Còn trên thiết bị di động thì sao? ARM đã giới thiệu ARMv8, phiên bản 64-bit cho tập chỉ dẫn của họ từ năm 2011. So với ARMv7 vốn chỉ hỗ trợ 32-bit, kiến trúc mới này hỗ trợ thêm tập lệnh A64 để tận dụng sức mạnh của điện toán 64-bit. Tất nhiên nó vẫn có tập lệnh 32-bit để đảm bảo những app 32-bit có thể chạy bình thường trên chip 64-bit. Đến năm 2012, ARM tiếp tục công bố Cortex-A53 và Cortex-A57, hai nhân xử lí đầu tiên trên thế giới được thiết kế dựa vào ARMv8. Theo sau đó, Qualcomm, NVIDIA, Samsung, AMD, Applied Micro, Broadcom, ST Microelectronics và nhiều công ty bán dẫn khác cũng lên kế hoạch đưa ARMv8 vào sản phẩm của mình.
Đến tháng 9/2013, Apple tung ra vi xử lí Apple A7 dựa trên ARMv8 dùng trong điện thoại iPhone 5s. Ở thời điểm đó, Apple A7 là con chip ARM 64-bit đầu tiên chính thức xuất hiện trên một thiết bị được bán ra thị trường, còn Cortex-A53 hay A57 thì vẫn chưa xuất hiện trong chiếc smartphone hay tablet nào cả. iOS 7 đã hỗ trợ cho điện toán 64-bit, và Android cũng thế. Windows RT thì chưa, vẫn còn đang dừng ở mức 32-bit.
Với chip A7, Apple đã giành được vị trí dẫn đầu trong việc tích hợp vi xử lí 64-bit vào thiết bị di động, và theo chuyên gia Nathan Brookwood từ hãng tư vấn Insight 64 thì Apple đang cũng dẫn trước các đối thủ Android của mình từ 9 đến 12 tháng, tức khoảng 1 thế hệ smartphone, nhờ sử dụng ARMv8. Những thiết bị mới nhất và mạnh mẽ nhất của các đối thủ Sony, LG, Samsung vẫn còn đang sử dụng tập lệnh ARMv7 trên con chip của mình (Exynos 5 Octa, Snapdragon 600/800,...), và phải sang đến năm sau thì chúng ta mới chứng kiến sự thay đổi sang nền tảng mới từ những hãng này. Tất nhiên sự khác biệt về hiệu năng sẽ còn phải chờ đánh giá chi tiết chứ chúng ta chưa thể nói Apple A7 là chip "đỉnh của đỉnh" ở thời điểm hiện tại.
Chuyên gia Patrick Moorhead từ công ty nghiên cứu Moor nói thêm rằng "không có lợi và hại khi đem 64-bit lên thiết bị di động", ngoại trừ việc chúng ta sẽ xài được nhiều hơn 4GB RAM. Dung lượng RAM của iPhone đã tăng từ 128MB của iPhone đời đầu lên thành 1GB trong iPhone 5 và có thể là 2GB trên iPhone 5s. Các máy Android cũng thế, Samsung Galaxy Note 3 hiện đang sở hữu 3GB RAM, ngấp nghé việc chuyển lên 4GB và hơn thế nữa.
Về vấn đề tương thích với phần mềm, nhiều app hiện nay vẫn còn được viết dựa vào vi xử lí 32-bit. Như đã nói ở phần nhược điểm của 64-bit, các app 32-bit vẫn sẽ chạy được trên chip mới, có điều không được tối ưu hóa mà thôi. Nói cách khác, kho app hiện tại vẫn có thể sử dụng được trên với các chip ARMv8, không có gì phải bỏ đi.
Còn nếu muốn có nhiều ứng dụng tối ưu hóa để chạy trên 64-bit thì lại là một câu chuyện khác. Các lập trình viên sẽ phải viết lại app để khai thác khả năng của CPU 64-bit, và chuyện đó cần có thời gian. Với Apple, do hãng kiểm soát chặt chẽ iOS và công cụ phát triển app nên hãng có thể đưa hệ sinh thái của mình lên thành 64-bit trong một thời gian tương đối ngắn. Còn với Google thì chúng ta hãy chờ xem sao, nhưng dựa vào sự phát triển với tốc độ chóng mặt của thị trường mobile thì thời gian cần thiết sẽ ngắn hơn rất nhiều so với PC.
Những lợi ích mà ARMv8 mang lại
Như ông Moorhead đã nói, thực chất thì việc hỗ trợ RAM dung lượng lớn hơn của 64-bit là việc của tương lai, còn hiện tại thì những cải tiến của ARMv8 mới thật sự là thứ mang lại lợi ích tức thì. Số lượng register nhiều hơn giúp Apple A7 (và cả những con chip ARMv8 khác từ Samsung, Qualcomm, NVIDIA,...) xử lí dữ liệu một cách tốt hơn, giảm đáng kể thời gian chạy những tác vụ nặng như giải mã hoặc nén video. ARMv8 có 31 register loại general purpose (vừa chứa được địa chỉ, vừa chứa được dữ liệu) sẵn sàng để truy cập bởi CPU bất kì lúc nào, trong khi đó ở chip ARMv7 thì số general purpose chỉ là 16 cái. Điều này có nghĩa là CPU ARMv8 sẽ tốn ít thời gian tìm kiếm dữ liệu từ cache và RAM hơn, đẩy nhanh tốc độ thực thi của hệ thống, ngay cả khi bạn không xài trên 4GB RAM.
Khả năng xử lí dấu chấm động của ARMv8 cũng được nâng cao so với ARMv7 nhờ số register dành riêng cho mục đích này tăng lên gấp 2. Ngoài ra ARM v8 còn hỗ trợ thêm các lệnh mã hóa và giải mã theo chuẩn AES SHA-1/SHA-2 sẵn trên chip, điều mà ARMv7 không có. Khả năng tiết kiệm điện tốt hơn khi xử lí một khối lượng dữ liệu lớn cũng là điểm mà ARMv8 làm tốt hơn so với kiến trúc tiền nhiệm.
Có nhiều người nói rằng vi xử lí 64-bit chỉ là thủ thuật marketing, và cả Apple lẫn Samsung hay bất kì hãng nào giới thiệu khái niệm 64-bit chung với thiết bị của mình đều là "ảo" hết. Thực chất thì không đúng như thế, và họ không thấy được một bức tranh toàn cảnh của thị trường thiết bị di động. Hiện nay ngày càng nhiều người xài smartphone, tablet cho những công việc mà trước đây họ chỉ làm trên máy tính, ví dụ như soạn thảo các tài liệu có nhiều hình ảnh, xử lí ảnh, thậm chí là dựng phim. Nói cách khác, chúng ta đang có một chiếc máy tính thứ hai trong túi và có thể làm gần như mọi thứ, miễn là có phần mềm để làm. Và để tốc độ trở nên nhanh hơn, chip ARMv8 là điều cần thiết, ngay cả khi bạn không xài trên 4GB RAM. Apple, Samsung, Qualcomm, NVIDIA và các hãng làm chip đều nhìn rõ xu hướng này, và họ đang tiến theo nó.