Như bạn đã biết, CPU xử lý phần mềm để mọi thứ hoạt động trong hệ thống máy tính. Chương trình được tạo thành từ các lệnh và dữ liệu; các lệnh chỉ ra thao tác nào phải được thực hiện trên dữ liệu để đạt được kết quả mong muốn. Và đó là cách mọi thứ được thực thi. Một trong những đơn vị quan trọng nhất của CPU là ALU hay FPU, chịu trách nhiệm thực hiện các phép toán. Và, trong các bộ xử lý hiện tại, chẳng hạn như Intel, các đơn vị chức năng có khả năng thực thi các lệnh vector với độ dài dữ liệu lên đến 512 bit đã được tích hợp, chẳng hạn như AVX-512 mà chúng ta sẽ thảo luận ở đây.
Các phần mở rộng này nhằm mục đích tăng tốc độ xử lý một số khối lượng công việc nhất định, đặc biệt là khối lượng công việc khoa học, đòi hỏi một lượng lớn thao tác thuộc loại này. Tuy nhiên, khi AVX-512 xuất hiện, Không phải tất cả đều là những đánh giá tốt cho Intel, cũng có nhiều người không thích sự bổ sung này chút nào, thậm chí còn gặp phải một số vấn đề như chúng ta sẽ thấy…
Bạn cũng có thể quan tâm đến:
ALU hoạt động như thế nào?
Trước khi tìm hiểu thêm về bộ lệnh AVX-512, trước tiên bạn cần hiểu cách thức hoạt động của bộ lệnh. ALU (Đơn vị số học logic), nghĩa là một đơn vị xử lý số học và logic.
Nghĩa là, trong đơn vị này chúng được thực hiện các phép tính bao gồm các phép toán như cộng, nhân, chia, v.v.Để thực hiện các tác vụ này, ALU sử dụng các mạch số cụ thể được điều khiển bởi bộ điều khiển CPU. Khi nó tiếp nhận một lệnh cần xử lý từ bộ nhớ và giải mã nó, nó sẽ gửi một mã lệnh đến ALU, cho biết phải làm gì với hai mục dữ liệu được nạp vào các thanh ghi. Ví dụ, lệnh ADD sẽ cộng, lệnh SUB sẽ trừ, lệnh MUL sẽ nhân, lệnh DIV sẽ chia, v.v.
Ngoài ra, ALU này, giống như các đơn vị CPU còn lại, sẽ hoạt động theo tốc độ do tần số đồng hồ. Ví dụ, nếu là 5 GHz, thì nói một cách đơn giản, chúng sẽ thực hiện 5.000 tỷ phép tính mỗi giây.
Tuy nhiên, khi tốc độ xung nhịp CPU tăng, lượng nhiệt do CPU sinh ra cũng tăng theo. Do đó, việc tăng tần số ngày càng cao không phải là giải pháp duy nhất để tăng hiệu suất. Do đó, các nhà thiết kế CPU phải tìm kiếm các giải pháp thay thế để tăng hiệu suất, chẳng hạn như song song cấp lõi, đổi tên thanh ghi, dự đoán và suy đoán, thực thi ngoài lệnh, hệ thống siêu vô hướng, v.v. Và trong số các biện pháp tăng sức mạnh tính toán cũng có việc sử dụng hướng dẫn gọi là SIMD, tức là vectơ, có khả năng hoạt động trên các tập dữ liệu lớn hơn.
Một ví dụ về những điều này hướng dẫn là AVX-512Trong khi các đơn vị còn lại hoạt động với dữ liệu 64 bit, các đơn vị đặc biệt dành cho các phần mở rộng này hoạt động với độ dài dữ liệu 512 bit, tức là chúng có thể xử lý cùng lúc 8 lần kích thước từ thông thường. Để làm được điều này, chúng cần ALU (số nguyên) hoặc FPU (nếu là số dấu phẩy động) lớn hơn và phức tạp hơn, cuối cùng dẫn đến bề mặt chip lớn hơn, do đó chi phí cao hơn và nhiều biến chứng khác…
Dữ liệu được đưa đến ALU bằng cách nào?
Vâng, bây giờ bạn đã có hiểu biết cơ bản về ALU là gì và cách thức hoạt động của nó, cũng như mục đích sử dụng AVX-512 ở mức cơ bản, bước tiếp theo là tìm hiểu cách dữ liệu đến ALU, vì điều này cũng sẽ giúp bạn hiểu về các phần mở rộng này.
Để đến được ALU, dữ liệu phải di chuyển qua các hệ thống lưu trữ khác nhau. Hành trình dữ liệu này dựa trên hệ thống phân cấp bộ nhớ của hệ thống máy tính. Mô tả ngắn gọn về hệ thống phân cấp này sẽ như sau:
- Bộ nhớ thứ cấp: Đây là phương tiện lưu trữ khối, tức là ổ cứng HDD hoặc SSD, trong số các ổ đĩa khác cũng có thể được kết nối với hệ thống I/O, chẳng hạn như phương tiện quang học, v.v. Chúng lưu trữ một lượng lớn thông tin, nhưng bộ nhớ của chúng chậm hơn so với tốc độ CPU. Do đó, việc truy cập các phương tiện này sẽ phải chịu một hình phạt, độ trễ lớn hơn. Do đó, để tránh những hình phạt này, chúng ta cần tải dữ liệu này vào bộ nhớ chính, chúng ta sẽ thảo luận ở phần tiếp theo. Ví dụ, để bạn hiểu rõ hơn, hãy tưởng tượng bạn đã cài đặt Word trên ổ cứng và muốn chạy nó. Phần mềm đó sẽ bao gồm một loạt các tệp thực thi hoặc tệp nhị phân chứa các hướng dẫn và dữ liệu cần thiết để CPU thực thi chúng. Cũng có thể xảy ra trường hợp phần mềm bạn muốn chạy không nằm trên ổ cứng, chẳng hạn như khi bạn cài đặt hệ điều hành từ ổ đĩa flash USB hoặc DVD. Các tệp nhị phân thực thi có các hướng dẫn và dữ liệu đó cũng sẽ được tìm thấy ở đó.
- Bộ nhớ chính: Hệ thống lưu trữ chính bao gồm bộ nhớ truy cập ngẫu nhiên (RAM). Hệ thống lưu trữ này nhanh hơn hệ thống lưu trữ thứ cấp, nhưng không thể lưu trữ nhiều thông tin như vậy, cũng không thể lưu trữ vĩnh viễn, vì nó là bộ nhớ tạm, lưu trữ thông tin trong khi máy tính đang được bật. Nghĩa là, mỗi khi bạn tắt máy tính, các chương trình bạn đã cài đặt không bị xóa, mà nội dung của RAM này sẽ bị xóa. Như tôi đã nói, khi một tiến trình hoặc chương trình được tải vào RAM, thực chất là việc chuyển các lệnh và dữ liệu của tệp nhị phân thực thi từ bộ nhớ thứ cấp sang bộ nhớ chính này, nơi CPU có thể truy cập nhanh hơn.
- Bộ nhớ đệm: Bộ nhớ đệm được nhúng trong CPU và là hệ thống bộ nhớ nhanh nhất, nhưng nó cũng có dung lượng rất nhỏ và dễ thay đổi. Hệ thống bộ nhớ này thường được chia thành ba phần: L1, L2 và L3. Bất kỳ dữ liệu nào cần được ALU xử lý đều được chuyển từ ổ cứng sang RAM và sau đó đến bộ nhớ đệm. Tuy nhiên, ALU không thể truy cập dữ liệu trực tiếp từ bộ nhớ đệm. Đó là lý do tại sao nó cần một bộ nhớ khác, thậm chí nhỏ hơn và nhanh hơn, đó chính là điểm tiếp theo...
- Thanh ghi CPU: Thanh ghi CPU là một bộ nhớ rất đơn giản được tạo thành từ các phần tử flip-flop cực nhanh. Tùy thuộc vào kiến trúc CPU, các thanh ghi có thể thay đổi kích thước. Ví dụ, chúng có thể là 8 bit, 16 bit, 32 bit, 64 bit, v.v. Hơn nữa, số lượng của chúng có thể thay đổi và tất cả chúng tạo nên cửa sổ hoặc tệp thanh ghi của CPU. Chính trong các thanh ghi này, các đơn vị tính toán, chẳng hạn như ALU hoặc FPU, có thể truy cập dữ liệu được tải vào chúng. Vì vậy, khi một lệnh được lấy từ RAM đến CPU trong chu kỳ lấy lệnh, lệnh sẽ được giải mã hoặc diễn giải bởi đơn vị điều khiển, đơn vị này sẽ xác định việc thực thi lệnh đó đòi hỏi những gì. Ví dụ: ADD r1, r2, r3 có thể cộng dữ liệu trong thanh ghi r2 + r3 và lưu trữ kết quả trong r1. Theo cách này, đơn vị điều khiển sẽ gửi mã lệnh này đến ALU, yêu cầu nó cộng các giá trị và vị trí của dữ liệu, trong trường hợp này là các thanh ghi cần thiết. Sau đó, ALU truy cập dữ liệu và thực hiện thao tác cộng. Đây chính là cách hệ thống phân cấp này hoạt động.
Ngoài ra, như bạn có thể biết, dữ liệu và hướng dẫn Các tệp được sử dụng thường xuyên nhất sẽ được lưu vào bộ nhớ đệm để có thể truy cập nhanh hơn nếu cần dùng lại trong tương lai. Như bạn có thể thấy, mỗi cấp độ bộ nhớ đệm sẽ nhanh hơn:
- L1: Đây là cấp độ đầu tiên, nhanh nhất trong tất cả, với độ trễ thấp nhất. Điều này có nghĩa là ít chu kỳ xung nhịp bị lãng phí khi truy cập vào nó. Hơn nữa, bộ nhớ này thường được chia thành L1D hoặc L1 cho dữ liệu và L1I hoặc L1 cho lệnh. Điều này có nghĩa là lệnh và dữ liệu không bị trộn lẫn.
- L2: Đây là cấp độ bộ nhớ đệm tiếp theo, có dung lượng lớn hơn L1, nhưng chậm hơn một chút, do đó cần nhiều chu kỳ hơn để truy cập. Ở đây, cả dữ liệu và lệnh sẽ được trộn lẫn, vì nó được thống nhất.
- L3: Cấp độ này có dung lượng lớn hơn L2, nhưng thậm chí còn chậm hơn L2. Và giống như L2, nó cũng được hợp nhất, lưu trữ cả dữ liệu và lệnh. Nếu L3 là cấp độ cuối cùng, nó còn được gọi là LLC (Last Level Cache), mặc dù các hệ thống khác có thể có các cấp độ khác, chẳng hạn như L4, v.v.
Như bạn có thể hình dung, khi CPU cần tìm kiếm dữ liệu hoặc lệnh nào đó, để tăng hiệu suất, trước tiên nó sẽ tìm kiếm trong L1, vì nó cần ít chu kỳ xung nhịp nhất để truy cập. Nếu không có, nó sẽ tìm kiếm trong L2, là tốc độ nhanh thứ hai. Và nếu cũng không có, nó sẽ tìm kiếm trong L3. Nếu cũng không có, nó sẽ tìm kiếm trong RAM, v.v.
AVX-512 là gì và nó hoạt động như thế nào?
Bộ Hướng dẫn AVX-512 Đây là phiên bản thứ hai của AVX và xuất hiện trên bộ xử lý Intel vào năm 2013. AVX là viết tắt của Advanced Vector Extensions và được giới thiệu lần đầu tiên trong Xeon Phi (Knights Landing) của Intel và sau đó xuất hiện trên máy chủ của Intel với Xeon dựa trên Skylake-X.
Ngoài ra, bộ lệnh AVX-512 cũng đã đến được các thiết bị tiêu dùng, tức là máy tính cá nhân, với Kiến trúc hồ Cannon và sau đó hỗ trợ kiến trúc Ice Lake và Tiger Lake. Có lẽ đây là một trong những bước đi bị chỉ trích nhiều nhất mà lẽ ra không nên thực hiện, một mặt vì không có đủ phần mềm để tận dụng các hướng dẫn này, mặt khác vì nó làm tăng thêm độ phức tạp cho các đơn vị này.
Như đã giải thích ở trên, ALU/FPU chỉ có thể truy cập dữ liệu có trong Thanh ghi CPUBộ lệnh AVX làm tăng kích thước của các thanh ghi này. Sự gia tăng này cho phép xử lý nhiều điểm dữ liệu chỉ bằng một lệnh, giúp tăng hiệu suất.
Mục tiêu chính của bộ hướng dẫn này là tăng tốc các tác vụ liên quan đến nén dữ liệu, xử lý hình ảnh và tính toán mật mãBằng cách cung cấp sức mạnh tính toán gấp đôi so với AVX-256, bộ lệnh AVX-512 mang lại những cải tiến hiệu suất đáng kể. Tuy nhiên, hiệu suất trên các CPU Intel này không tăng gấp đôi như nhiều người vẫn nghĩ.
Tại sao Intel ngừng sản xuất AVX-512?

Như đã giải thích ở trên, bộ lệnh AVX-512 cung cấp một số lợi thế trong tính toán điện toán, nhưng không phải mọi thứ đều được chào đónĐúng là các thư viện phổ biến như TensorFlow sử dụng bộ lệnh để cung cấp khả năng tính toán nhanh hơn trên CPU hỗ trợ bộ lệnh đó.
AMD lần đầu tiên áp dụng AVX-512 trong các bộ vi xử lý Zen 4. Một sự thay đổi hoàn toàn giữa hai công ty…
Vậy tại sao Intel lại vô hiệu hóa AVX-512 trên các bộ xử lý Alder Lake gần đây? Thực ra, chúng chưa bị loại bỏ hoàn toàn. Ví dụ, trong Hồ Alder Chúng ta phải tạo nên một kiến trúc đa lõi không đồng nhất, với lõi P hiệu suất cao và lõi E hiệu quả cao.
Trong khi P-Core dựa trên kiến trúc vi mô Golden Cove và có khả năng thực hiện các lệnh này, thì trong E-Core dựa trên kiến trúc vi mô Gracemont, Những hướng dẫn này không được phép thực hiệnBộ lập lịch cho các lõi này sẽ từ chối các lệnh như vậy để giữ cho các lõi này nhỏ hơn và tiết kiệm năng lượng hơn.
Tuy nhiên, CPU Alder Lake trở đi không hỗ trợ tập lệnh AVX-512, vì nếu không sẽ có các E-Core không thể chạy một số chương trình nhất định. Tuy nhiên, chúng có thể được sử dụng trong các CPU khác mà Intel chưa tích hợp các lõi này, chẳng hạn như trong trường hợp Xeon cho HPC và máy chủ, và thậm chí trong một số máy tính được phép. vô hiệu hóa E-cores từ BIOS/UEFI.
Có cần AVX-512 trên CPU dành cho người tiêu dùng không?

Bộ lệnh AVX-512 làm tăng kích thước thanh ghi của CPU để cải thiện hiệu suất của nó. Điều này tăng hiệu suất cho phép CPU xử lý số nhanh hơn, cho phép người dùng chạy các thuật toán nén video/âm thanh với tốc độ nhanh hơn.
Điều đó nói rằng, sự gia tăng hiệu suất này chỉ có thể được quan sát khi các hướng dẫn được xác định trong một chương trình là được tối ưu hóa để chạy trong bộ lệnh AVX-512. Nếu không, chúng sẽ hoàn toàn vô dụng, và do AVX-512 ít được sử dụng nên điều này ít khi xảy ra.
Vì lý do này, các kiến trúc tập lệnh như AVX-512 phù hợp hơn với khối lượng công việc của máy chủ và HPC, nhưng không dành cho người tiêu dùng trung bình. Do đó, việc làm như vậy không có nhiều ý nghĩa.
Vậy tại sao AMD lại tích hợp chúng vào thời điểm này? Vào thời điểm đó, họ đã làm tốt khi tránh xa để không gặp phải những vấn đề tương tự như Intel đã từng gặp phải. Nhưng giờ đây, họ đã đi theo hướng ngược lại và cũng đã áp dụng chúng. Và điều đó có thể là do các vi kiến trúc do AMD thiết kế, chẳng hạn như Thiền 4, được sử dụng cho cả chip Ryzen, Threadripper và EPYC, và có lẽ họ đã tạo ra cùng một bộ xử lý cho tất cả các chip, như Intel đã làm vào thời điểm đó. Bằng cách này, AMD giờ đây cũng có thể hoạt động với AVX-512 trên máy chủ, máy trạm và HPC để cạnh tranh với Xeon.
Tại sao Intel lại loại bỏ chúng khỏi Alder Lake?

Intel hỗ trợ các lệnh AVX-512 với bộ xử lý Alder Lake đó là một chuyện mờ ámBan đầu, công ty tuyên bố tính năng này sẽ không hoạt động trên bộ vi xử lý thế hệ thứ 12 mới nhất hoặc các phiên bản sau đó. Tuy nhiên, sau đó, họ đã thay đổi quyết định khi các nhà cung cấp bo mạch chủ tìm ra nhiều giải pháp thay thế để kích hoạt các lệnh này từ phần mềm hệ thống.
Bằng cách này, bạn có thể Bật hoặc tắt tùy chọn này từ BIOS/UEFI của bo mạch chủ, do đó cung cấp cho người dùng tùy chọn sử dụng AVX-512 hay không, tùy thuộc vào nhu cầu khối lượng công việc của họ.
Tuy nhiên, có vẻ như Intel đang bán một số đơn vị không phải K, tức là những đơn vị không được mở khóa để ép xung, với AVX-512 bị vô hiệu hóa theo mặc địnhVà mặc dù có vẻ như nó không bị xóa khỏi phần cứng của các sản phẩm này, nhưng lệnh chặn này sẽ ngăn người dùng sử dụng chúng.
Nhưng có vẻ như Intel đã chơi với chuột và chuột, vì cuối cùng có vẻ như công ty Mỹ đã chọn hỗ trợ người khuyết tật về thể chất Các lệnh AVX-512 đang được sử dụng trong chip tiêu dùng ở cấp độ silicon, do đó không thể làm gì để sử dụng các lệnh này, tất cả đều nhằm mục đích tăng hiệu quả sử dụng năng lượng.
Nói tóm lại, những thay đổi mà Intel đã thực hiện là:
- Ông nói với báo chí rằng AVX-512 sẽ không tương thích với bộ xử lý lai mới.
- Trước khi phát hành, một hướng dẫn tối ưu hóa đã xuất hiện để chỉ cách sử dụng tính năng này.
- Intel một lần nữa phủ nhận việc hỗ trợ những hướng dẫn này, có lẽ vì những lời chỉ trích mà họ đã nhận được trong quá khứ. Sau đó, họ đã xóa các tài liệu tham khảo khỏi hướng dẫn này.
- Khi Alder Lake ra mắt, người ta phát hiện ra rằng các hướng dẫn này hoạt động trên một số bo mạch chủ có firmware phù hợp. Đây là điều mà các nhà sản xuất bo mạch chủ đã làm trái với mong muốn của Intel.
- Ban đầu, Intel vẫn giữ im lặng, mặc dù họ đã nói với báo chí Đài Loan rằng hỗ trợ AVX-512 có sẵn, mặc dù không phải là mặc định, vì vậy nếu ai đó muốn sử dụng nó với rủi ro của riêng mình, họ có thể, giống như họ chấp nhận rủi ro khi ép xung…
- Năm ngoái, Intel đã thông báo rằng họ cuối cùng đã vô hiệu hóa AVX-512 bằng bản cập nhật chương trình cơ sở hoặc vi mã mới.
- Cùng tuần đó, bản phát hành BIOS/UEFI đã xuất hiện và vô hiệu hóa tùy chọn AVX-512.
- MSI đã tìm ra cách để vượt qua khóa Intel AVX-512 này, cho phép dễ dàng thay đổi BIOS/UEFI.
- Intel không hài lòng với điều này và cuối cùng đã quyết định vô hiệu hóa tập lệnh trong phần cứng, để nó không thể bị can thiệp theo bất kỳ cách nào. Do đó, nó sẽ có sẵn trên các bản dựng Alder Lake đời đầu, nhưng sẽ không có sẵn trên các bản dựng Alder Lake đời sau.
Vì vậy, nếu bạn muốn bật AVX-512, thì bạn phải mua Intel Xeon, tất nhiên là đắt hơn.
Trong suốt thời gian này opera xà phòngHiện tại, AMD đang bổ sung hỗ trợ AVX-512 cho tất cả các chip Zen 4, kể cả chip dành cho người dùng phổ thông. Vì vậy, nếu bạn muốn sở hữu một bộ xử lý cho PC có AVX-512, lựa chọn tốt nhất hiện tại của bạn là Ryzen 7000 (Zen 4).
VNNI là gì?

Và, để kết thúc, tôi không muốn kết thúc mà không nói về AVX-512 VNNI, tức là một phần mở rộng được thiết kế đặc biệt để tăng tốc các thuật toán mạng nơ-ron tích chập. Từ viết tắt VNNI là viết tắt của Hướng dẫn mạng nơ-ron Vector.
Những hướng dẫn này mở rộng phần mở rộng AVX-512 ban đầu, với bốn hướng dẫn mới để tăng tốc các vòng lặp mạng nơ-ron. Các hướng dẫn này là:
VPDPBUSD: Hướng dẫn này có thể nhân các byte riêng lẻ (8 bit = 1 byte) của toán hạng nguồn đầu tiên với các byte tương ứng của toán hạng nguồn thứ hai, tạo ra kết quả từ 16 bit được cộng lại và tích lũy thành toán hạng đích từ kép (32 bit).VPDPBUSDS: giống như trên ngoại trừ tổng tràn trung gian bão hòa ở 0x7FFF_FFFF/0x8000_0000 đối với các số dương/âm.VPDPWSSD:Trong hướng dẫn khác này, các từ riêng lẻ (16 bit) của toán hạng nguồn đầu tiên có thể được nhân với từ tương ứng của toán hạng nguồn thứ hai, tạo ra các kết quả từ trung gian được cộng lại và tích lũy trong một từ kép (32 bit) của toán hạng đích.VPDPWSSDS: Như bạn có thể tưởng tượng, nó giống như phần trước ngoại trừ việc tổng tràn trung gian bão hòa ở 0x7FFF_FFFF/0x8000_0000 đối với các số dương/âm.
Động lực chính đằng sau phần mở rộng AVX512 VNNI là nhận định rằng nhiều vòng lặp mạng nơ-ron tích chập chặt chẽ đòi hỏi phải nhân lặp lại hai giá trị 16 bit hoặc hai giá trị 8 bit và tích lũy kết quả trong bộ tích lũy 32 bit. Điều này có thể thực hiện được bằng cách sử dụng hai lệnh: VPMADDWD được sử dụng để nhân hai cặp 16 bit và cộng chúng lại theo sau là một VPADDD điều này sẽ cộng lại giá trị tích lũy.