Công nghệ máy tính không còn xa lạ với những từ viết tắt: CPU, GPU, RAM, SSD, BIOS, CD-ROM, v.v. Những cái mới thường xuyên xuất hiện trong bối cảnh, như một phần của nhiệm vụ không ngừng nhằm cải thiện các tính năng và khả năng của các thiết bị máy tính của chúng tôi.
Trọng tâm của ngày hôm nay sẽ là giải thích các tiện ích mở rộng bộ hướng dẫn bộ xử lý phổ biến MMX, SSE và AVX và xem liệu đây có phải là những tính năng thú vị cần có hay chỉ là mánh lới quảng cáo tiếp thị vô nghĩa.
Hãy bắt đầu phần giải thích này bằng cách quay ngược thời gian, đến giữa những năm 1980. Thị trường CPU khá giống với hiện tại, với Intel chiếm thị phần lớn nhất về doanh số bán hàng, nhưng phải đối mặt với sự cạnh tranh gay gắt từ AMD. Máy tính gia đình, chẳng hạn như Commodore 64, đang sử dụng bộ xử lý 8 bit cơ bản, trong khi máy tính để bàn bắt đầu chuyển từ chip 16 bit sang 32 bit.
Các con số đề cập đến kích thước của các giá trị dữ liệu có thể được xử lý bằng toán học, với các giá trị lớn hơn giúp mang lại độ chính xác và khả năng tốt hơn. Nó cũng xác định kích thước của các thanh ghi mục đích chung trong chip: một lượng nhỏ bộ nhớ, được sử dụng để lưu trữ dữ liệu đang hoạt động.
Những CPU như vậy cũng có bản chất là số nguyên và số nguyên – nhưng điều này chính xác có nghĩa là gì? Vô hướng là nơi bất kỳ hoạt động toán học nào diễn ra trên chỉ các giá trị dữ liệu đơn lẻ: nó thường được mô tả là SISD (chỉ lệnh đơn, dữ liệu đơn).
Vì vậy, một hướng dẫn để cộng hai giá trị dữ liệu lại với nhau, chỉ được xử lý cho hai số đó. Nếu bạn muốn làm điều gì đó như thêm cùng một số vào một nhóm 16 số, thì bạn cần đưa ra 16 bộ hướng dẫn để làm như vậy. Không tuyệt vời, nhưng đó là hạn chế của những bộ xử lý như vậy hồi đó.

Số nguyên là thuật ngữ toán học cho một số nguyên , chẳng hạn như 8 hoặc -12. Bộ xử lý 80386SX của Intel không có khả năng bẩm sinh để thêm, chẳng hạn như 3,80 và 7,26 – những loại số này được gọi là số float (viết tắt của dấu phẩy động). Để xử lý chúng, bạn cần một bộ xử lý khác, chẳng hạn như 80387SX, và một tập lệnh riêng – danh sách các lệnh cho CPU biết phải làm gì.
Đối với các CPU thời đó, các lệnh x86 dành cho các phép tính số nguyên và x87 dành cho số float; ngày nay, chúng tôi sử dụng thuật ngữ x86 để chỉ cả hai, bởi vì tất cả đều được thực hiện bởi cùng một con chip.
Thường được gọi là bộ đồng xử lý, việc sử dụng các bộ xử lý riêng biệt để xử lý các hoạt động số nguyên và số thực là tiêu chuẩn cho đến khi Intel phát hành 80486: CPU máy tính để bàn đầu tiên của họ có đơn vị dấu phẩy động tích hợp (FPU).

Như hình ảnh trên cho thấy, nó chiếm khá nhiều kích thước tổng thể của bộ xử lý, nhưng lợi ích về hiệu năng của việc nó được đóng gói bên trong là rất lớn.
Tuy nhiên, toàn bộ thiết lập vẫn là vô hướng và nó vẫn đúng với người kế nhiệm của 80486: Intel Pentium ban đầu.
Chà, đó là trường hợp cho đến 3 năm sau khi phát hành dòng CPU cụ thể đó. Tháng 10 năm 1996, Intel ra mắt “ Pentium với công nghệ MMX ”.
Trong thế giới toán học, các số có thể được nhóm lại với nhau thành các tập hợp có hình dạng và kích cỡ khác nhau – một nhóm cụ thể được gọi là vectơ . Cách tốt nhất để nghĩ về những điều này là một danh sách các giá trị, chạy theo chiều ngang hoặc chiều dọc. Điều mà công nghệ MMX mang lại cho thế giới CPU là khả năng thực hiện phép toán véc-tơ.
Tuy nhiên, nó khá hạn chế khi bắt đầu vì nó chỉ có sẵn cho các số nguyên. Hệ thống thực sự đã sử dụng các thanh ghi dành riêng cho FPU để thực hiện điều này, vì vậy các lập trình viên muốn kích hoạt một số lệnh MMX sẽ phải lưu ý rằng không thể thực hiện bất kỳ phép tính float nào cùng một lúc.
FPU của Pentium có các thanh ghi có kích thước 64 bit và đối với các hoạt động MMX, mỗi thanh ghi có thể được đóng gói bằng hai số nguyên 32 bit, bốn 16 bit hoặc tám số nguyên 8 bit. Chính các nhóm số này là các vectơ và mọi lệnh được đưa ra để xử lý trên chúng sẽ được thực hiện trên tất cả các giá trị trong nhóm.
Loại hệ thống này được gọi là SIMD (một lệnh, nhiều dữ liệu) và đánh dấu bước tiến lớn về khả năng của CPU được sử dụng trong máy tính để bàn.
Vì vậy, những ứng dụng được hưởng lợi từ việc sử dụng một hệ thống như vậy? Khá nhiều thứ liên quan đến việc thực hiện cùng một phép tính cho các nhóm số, nhưng đáng chú ý nhất là một số tác vụ xử lý đồ họa 3D, đa phương tiện và tín hiệu chung.
Ví dụ: MMX có thể được sử dụng để tăng tốc độ nhân ma trận trong xử lý đỉnh hoặc trộn hai nguồn cấp dữ liệu video trong khóa màu hoặc tổng hợp alpha.

Thật không may, việc sử dụng MMX diễn ra khá chậm do tác động tiêu cực của nó đối với hiệu suất dấu phẩy động. AMD đã khắc phục một phần sự cố này bằng cách tạo phiên bản riêng của họ, được gọi là 3DNow! khoảng hai năm sau khi MMX xuất hiện – nó cung cấp nhiều hướng dẫn SIMD hơn và cũng có thể xử lý các số dấu phẩy động, nhưng nó cũng không được các lập trình viên tiếp thu.
Ồ, và cái tên? Theo Intel, MMX không đại diện cho bất cứ điều gì!
Các vấn đề được cải thiện vào năm 1999, với sự ra mắt của bộ xử lý Pentium III của Intel. Tính năng vectơ sáng bóng của nó có dạng SSE (Tiện ích mở rộng SIMD trực tuyến); lần này có thêm một bộ tám thanh ghi 128 bit, tách biệt với các thanh ghi trong FPU và một chồng các lệnh bổ sung có thể xử lý các số float.
Việc sử dụng các thanh ghi riêng biệt có nghĩa là FPU không còn bị ràng buộc nhiều nữa, mặc dù Pentium III không thể đưa ra các lệnh SSE cùng lúc với các lệnh của FP. Tính năng mới cũng chỉ hỗ trợ một loại dữ liệu trong sổ đăng ký: bốn số float 32 bit.
Nhưng động thái cung cấp hướng dẫn SIMD dấu phẩy động đã kích hoạt phạm vi để có hiệu suất cao hơn trong các ứng dụng như mã hóa/giải mã video, xử lý hình ảnh và âm thanh, nén tệp và nhiều ứng dụng khác.

Một phiên bản cập nhật, SSE2, xuất hiện vào năm 2001 với Pentium 4 và lần này hỗ trợ kiểu dữ liệu tốt hơn nhiều: bốn float 32-bit hoặc hai 64-bit, cũng như mười sáu 8-bit, tám 16-bit, bốn 32 bit hoặc hai số nguyên 64 bit. Các thanh ghi MMX vẫn còn trong bộ xử lý, nhưng tất cả các hoạt động của MMX và SSE có thể được thực hiện bằng cách sử dụng các thanh ghi SSE 128-bit riêng biệt.
SSE3 ra đời vào năm 2003, có nhiều hướng dẫn hơn và khả năng thực hiện một số phép toán giữa các giá trị nằm trong cùng một sổ đăng ký.
Kiến trúc Intel Core xuất hiện 3 năm sau đó, mang đến một bản sửa đổi khác của công nghệ SIMD (SSSE3 – SSE bổ sung) với phiên bản cuối cùng, SSE4, ra mắt vào cuối năm đó.

Bản cập nhật nhỏ cho phiên bản đó đã được phát hành cùng với dòng bộ xử lý Nehalem Core vào năm 2008, Intel gọi nó là SSE4.2 (vì vậy phiên bản gốc được gọi là SSE4.1). Không có bản cập nhật nào mang lại bất kỳ thay đổi nào đối với sổ đăng ký, nhưng nhiều hướng dẫn hơn đã được đưa vào bảng, mở ra phạm vi hoạt động toán học và logic có thể diễn ra.
AMD đã đề xuất một bản sửa đổi tiếp theo, SSE5, nhưng thay vào đó, họ chọn chia nó thành ba phần mở rộng riêng biệt, một trong số đó sẽ gây ra một số vấn đề đau đầu – sẽ nói thêm về điều này trong giây lát.
Đến cuối năm 2008, cả Intel và AMD đều cung cấp các CPU có thể xử lý MMX cho đến các bộ hướng dẫn SSE4.2 và nhiều ứng dụng (chủ yếu là trò chơi) bắt đầu yêu cầu các tính năng này để chạy.
Năm 2008 cũng là năm Intel thông báo rằng họ đang thực hiện một bản cập nhật quan trọng cho thiết lập SIMD của mình và vào năm 2011, dòng CPU Sandy Bridge đã được ra mắt, có tính năng AVX (Phần mở rộng Vector nâng cao).
Mọi thứ đều được nhân đôi về số lượng: gấp đôi số thanh ghi vectơ và kích thước gấp đôi.
Mười sáu thanh ghi 256 bit chỉ có thể nhận tám số float 32 bit hoặc bốn số float 64 bit, do đó, nó hạn chế hơn một chút so với SSE về định dạng dữ liệu, nhưng tập lệnh đó vẫn khả dụng. Vào thời điểm này, hỗ trợ phần mềm cho các hoạt động của vectơ CPU đã được thiết lập tốt, từ thế giới cơ bản của trình biên dịch, cho đến các ứng dụng phức tạp.

Và vì lý do chính đáng: những thứ như Core i7-2600K, chạy ở tốc độ 3,8 GHz, có khả năng tạo ra hơn 230 GFLOPS (tỷ phép tính dấu phẩy động mỗi giây), khi thực hiện các lệnh AVX – không tệ đối với một bổ sung tương đối nhỏ vào tổng thể Kích thước khuôn của CPU.
Hoặc nó sẽ là như vậy, nếu nó thực sự chạy ở tốc độ 3,8 GHz. Một phần của vấn đề khi sử dụng AVX là tải trên chip quá cao nên Intel đã yêu cầu chúng tự động giảm xung nhịp ở chế độ này, khoảng 20%, để giảm mức tiêu thụ điện năng và mức nhiệt. Thật không may, đây là cái giá phải trả để bất kỳ SIMD nào hoạt động trong một CPU hiện đại.
Một cải tiến khác được cung cấp với AVX là khả năng làm việc với ba giá trị cùng một lúc. Trong tất cả các phiên bản của SSE, các hoạt động diễn ra giữa hai giá trị, với câu trả lời sau đó thay thế một trong số chúng trong sổ đăng ký. Khi thực hiện các hướng dẫn SIMD, AVX giữ an toàn các giá trị ban đầu và lưu kết quả vào một thanh ghi riêng.

Phần tiếp theo, AVX2 đã được ra mắt với kiến trúc Haswell của bộ xử lý Core thế hệ thứ 4 vào năm 2013 và đây là một bản cập nhật quan trọng nhờ bao gồm một phần mở rộng khác: FMA (tích lũy nhân hợp nhất).
Mặc dù đây là một tính năng riêng biệt của AVX2, nhưng khả năng đưa ra một lệnh mà sau đó sẽ thực hiện hai phép toán cực kỳ có lợi cho các ứng dụng thực hiện phép toán vectơ hoặc ma trận, mặc dù nó cũng hoạt động trên các phép toán vô hướng.
Tuy nhiên, phần mở rộng FMA của Intel khác với phần mở rộng của AMD; rất nhiều, chúng hoàn toàn không tương thích. Điều này là do FMA của Intel là một hệ thống ba toán hạng, tức là nó hoạt động với 3 giá trị riêng biệt – giá trị này có thể ở dạng 2 số nguồn và một câu trả lời riêng biệt hoặc 3 giá trị nguồn và một câu trả lời thay thế một trong số chúng.
AMD là toán hạng bốn, vì vậy có thể làm toán trên 3 số và không phải viết câu trả lời trên một trong số chúng. Mặc dù FMA4 tốt hơn về mặt toán học so với FMA3, nhưng việc triển khai nó phức tạp hơn một chút, cả về lập trình và tích hợp tính năng này vào bộ xử lý.
Khi AVX2 mới bắt đầu tham gia vào thị trường CPU, Intel đã lên kế hoạch cho phiên bản kế nhiệm của nó, AVX-512 và chủ đề chung sẽ là ‘nhiều hơn, nhiều hơn nữa’. Sẽ không chỉ có gấp đôi số lượng đăng ký một lần nữa, mà chúng còn tăng gấp đôi về kích thước và sẽ có một chồng các hướng dẫn mới và hỗ trợ kế thừa.
Lô chip đầu tiên tung ra bộ tính năng AVX-512 là dòng Xeon Phi 7200 – thế hệ thứ hai của bộ vi xử lý nhiều lõi khổng lồ của Intel, nhắm đến thế giới siêu máy tính.

Không giống như các lần lặp lại trước đó, tập lệnh vectơ mới bao gồm 19 tập hợp con: nền tảng cốt lõi, AVX-512F, phải được cung cấp để tuân thủ và sau đó là một loạt các tập hợp con rất cụ thể. Các bộ bổ sung này bao gồm các hoạt động như toán đối ứng, FMA số nguyên hoặc thuật toán mạng thần kinh tích chập.
Ban đầu, AVX-512 chỉ là sản phẩm dành riêng cho những con chip lớn nhất của Intel, nhằm vào các máy trạm và máy chủ, nhưng giờ đây, kiến trúc Ice Lake và Tiger Lake gần đây của họ cũng cung cấp nó. Vâng, đúng vậy: bạn có thể mua một chiếc máy tính xách tay nhẹ với bộ xử lý có các đơn vị véc tơ 512-bit.
Điều này có vẻ như là một điều tốt, nhưng có thể không phải vậy, tùy thuộc vào quan điểm của bạn. Các thanh ghi trong CPU thường được nhóm lại với nhau trong khuôn, trong cái được gọi là tệp thanh ghi, như được đánh dấu trong hình ảnh chip Intel Skylake lõi kép bên dưới.

Hộp màu vàng làm nổi bật tệp đăng ký vectơ; hộp màu đỏ là vị trí có khả năng nhất của tệp thanh ghi số nguyên. Lưu ý xem vectơ lớn hơn bao nhiêu? Skylake sử dụng các thanh ghi 256-bit cho AVX2, do đó, với cùng tỷ lệ khuôn, các thanh ghi AVX-512 sẽ lớn hơn bốn lần – 2 lần để nhân đôi số bit và 2 lần nữa để nhân đôi số lượng thanh ghi.
Liệu một con chip nhỏ, được thiết kế càng nhỏ càng tốt cho thị trường di động, có thực sự cần sử dụng nhiều không gian đó cho các thanh ghi véc-tơ không? Mặc dù nó không phải là một phần lớn trong dấu chân của mỗi lõi, nhưng mỗi milimet vuông đều có giá trị khi sử dụng tốt nhất không gian có sẵn.
Và do việc sử dụng AVX, dưới bất kỳ hình thức nào, dẫn đến xung nhịp tự động giảm, việc sử dụng AVX-512 trên các nền tảng như vậy gần như chắc chắn sẽ kém hơn so với việc sử dụng bất kỳ thiết bị tiền nhiệm nào, vì nó thậm chí còn đòi hỏi nhiều năng lượng hơn khi chạy .

Nhưng không chỉ các CPU di động nhỏ mà AVX-512 có vấn đề. Các nhà phát triển viết mã để chạy trên máy trạm và máy chủ, sẽ thực sự được hưởng lợi từ việc sử dụng tiện ích mở rộng vectơ, sẽ cần tạo nhiều phiên bản. Điều này là do không phải tất cả các CPU AVX-512 đều cung cấp các tập lệnh giống nhau.
Ví dụ: bộ IFMA (tích lũy nhân hợp nhất số nguyên) chỉ khả dụng trên các CPU Cannon, Ice và Tiger Lake – các bộ xử lý sử dụng kiến trúc Cooper và Cascade Lake không cung cấp tính năng này, mặc dù là các sản phẩm máy trạm/máy chủ.
Điều đáng chú ý là AMD không cung cấp hỗ trợ cho AVX-512 và không có kế hoạch làm như vậy. Nó coi nhiệm vụ xử lý các phép tính vectơ lớn là nhiệm vụ của GPU, giống như Nvidia làm và cả hai đều đã phát hành các sản phẩm dành riêng cho các vai trò đó.
Khả năng bổ sung của CPU để xử lý toán học vectơ trong những năm trước đây đã đánh dấu một bước tiến quan trọng. Các bộ xử lý ngày nay cực kỳ có khả năng, cung cấp rất nhiều tập lệnh để xử lý các phép toán số nguyên và dấu phẩy động cho dữ liệu vô hướng, vectơ và ma trận.
Trong trường hợp của hai loại dữ liệu cuối cùng, CPU giờ đây cạnh tranh trực tiếp với GPU – thế giới đồ họa 3D chỉ xoay quanh SIMD, vectơ, số float, v.v. và sự phát triển của bộ tăng tốc đồ họa đã diễn ra nhanh chóng. Vào đầu thập kỷ trước, bạn có thể sở hữu một GPU có thể thực hiện gần 800 tỷ lệnh SIMD mỗi giây với giá chưa đến 500 đô la.
Điều đó thậm chí còn lớn hơn cả những CPU máy tính để bàn tốt nhất hiện có thể xử lý, nhưng chúng không được thiết kế để hoạt động xuất sắc ở mọi vai trò – chúng cần xử lý mã rất tổng quát, thường không lặp lại hoặc dễ dàng song song hóa. Vì vậy, tốt nhất bạn nên coi khả năng SIMD của CPU là một tiện ích bổ sung tiện dụng hơn là một thứ cực kỳ quan trọng.

Nhưng sự gia tăng của GPU không có nghĩa là CPU không cần phải có các đơn vị vectơ quá lớn; đây gần như chắc chắn là lý do tại sao AMD không tìm cách phát triển sản phẩm kế nhiệm AVX2 của riêng họ (một phần mở rộng mà họ đã có trong chip của mình từ năm 2015). Chúng ta cũng đừng quên rằng CPU thế hệ tiếp theo có thể trông giống SoC di động hơn với silicon chuyên dụng cho một số loại tác vụ nhất định. Mặt khác, Intel dường như rất quan tâm đến việc tung ra AVX-512 cho càng nhiều sản phẩm càng tốt.
Vì vậy, chúng ta sẽ thấy một AVX-1024? Có lẽ là không, hoặc ít nhất là không trong nhiều năm nữa. Thay vào đó, Intel có nhiều khả năng sẽ cung cấp các tập hợp con hướng dẫn bổ sung cho AVX-512, để cải thiện tính linh hoạt của nó và để lại hiệu suất SIMD thô cho dòng GPU mới được phát triển của họ.

SSE và AVX hiện là một phần không thể thiếu trong bối cảnh phần mềm: Adobe Photoshop yêu cầu CPU hỗ trợ SSE4.2 ở mức tối thiểu; API máy học TensorFlow yêu cầu hỗ trợ AVX trong CPU; Microsoft Teams chỉ có thể làm hiệu ứng video nền khi có AVX2.
Điều đó chỉ có nghĩa là những thứ này sẽ không sớm biến mất, bất chấp sức mạnh SIMD của GPU, nhưng hy vọng khi thế hệ tiện ích mở rộng vectơ tiếp theo ra mắt, chúng ta sẽ được xem một quảng cáo dayglo khác về chúng.