Khả năng Prefetch của CPU và Hạn chế Kiến trúc Bộ nhớ được Tiết lộ trong Các Bài kiểm tra Hiệu suất Truy cập Ngẫu nhiên

Nhóm Cộng đồng BigGo
Khả năng Prefetch của CPU và Hạn chế Kiến trúc Bộ nhớ được Tiết lộ trong Các Bài kiểm tra Hiệu suất Truy cập Ngẫu nhiên

Một phân tích hiệu suất gần đây so sánh các mẫu truy cập bộ nhớ tuần tự và ngẫu nhiên đã khơi mào cuộc thảo luận sôi nổi về bản chất thực sự của tối ưu hóa CPU hiện đại và các nút thắt cổ chai bộ nhớ. Nghiên cứu đo lường mức độ chậm hơn của truy cập ngẫu nhiên so với truy cập tuần tự trên các kích thước mảng khác nhau, tiết lộ những hiểu biết đáng ngạc nhiên về khả năng prefetch của CPU và hành vi phân cấp bộ nhớ.

Kết quả So sánh Hiệu suất

Cấu hình Hệ thống Truy cập Tuần tự Truy cập Ngẫu nhiên Tỷ lệ Hiệu suất
MacBook M1 (16GB RAM) ~1 ns mỗi phần tử ~4 ns mỗi phần tử Chậm hơn 4 lần
Linux AMD Ryzen 5 3600X (24GB RAM) ~0.5 ns mỗi phần tử ~8-16 ns mỗi phần tử Chậm hơn 8-16 lần

Ngưỡng Kích thước Cache

  • MacBook M1 : Hiệu suất bắt đầu suy giảm ở mức 8MB (giới hạn SLC )
  • Linux Desktop : Hiệu suất bắt đầu suy giảm ở mức 4MB (mặc dù có cache L3 32MB )
  • Cả hai hệ thống: Sụt giảm hiệu suất nghiêm trọng khi dữ liệu vượt quá RAM khả dụng

Prefetch của CPU Che giấu Chi phí Truy cập Ngẫu nhiên Thực sự

Cộng đồng đã đặt ra những câu hỏi quan trọng về việc liệu benchmark có thực sự đo lường hiệu suất truy cập ngẫu nhiên hay không. Vấn đề chính nằm ở cách các CPU hiện đại xử lý prefetch bộ nhớ khi các chỉ số được lưu trữ trong một mảng liền kề. Ngay cả khi các vị trí dữ liệu đích được ngẫu nhiên hóa, CPU vẫn có thể prefetch các chỉ số sắp tới và sử dụng thực thi suy đoán để tải nhiều địa chỉ đích song song.

Bằng cách có một mảng chỉ số liền kề để xem xét, mảng đó có thể được prefetch khi nó tiến hành, và thực thi suy đoán sẽ đảm nhiệm việc tải nhiều chỉ số sắp tới của mảng đích song song.

Điều này có nghĩa là sự khác biệt hiệu suất từ 4 đến 16 lần được quan sát giữa truy cập tuần tự và ngẫu nhiên thực tế có thể đánh giá thấp chi phí thực sự của các mẫu bộ nhớ ngẫu nhiên trong các ứng dụng thực tế. Một bài kiểm tra thực tế hơn sẽ bao gồm các chuỗi phụ thuộc trong đó mỗi vị trí bộ nhớ chứa địa chỉ tiếp theo để truy cập, ngăn CPU dự đoán các yêu cầu bộ nhớ trong tương lai.

Ghi chú Kỹ thuật : Thực thi suy đoán cho phép CPU dự đoán và thực thi các lệnh trước khi chúng thực sự cần thiết, trong khi prefetch tải dữ liệu vào cache trước khi được yêu cầu.

Kiến trúc Bộ điều khiển Bộ nhớ Ảnh hưởng đến Kết quả

Chi tiết cấu hình phần cứng đã nổi lên như các nguồn tiềm năng của các bất thường đo lường. Hệ thống kiểm tra Linux đã sử dụng cấu hình RAM 24GB bất thường với ba module 8GB, tạo ra một thiết lập dual-channel không cân bằng. Cấu hình bộ nhớ bất đối xứng này có thể gây ra các hiện tượng hiệu suất bất ngờ, đặc biệt khi dữ liệu trải rộng trên cả hai kênh bộ nhớ.

Các bộ xử lý AMD hiện đại bao gồm các prefetcher phụ thuộc dữ liệu tinh vi có thể nhận ra các giá trị giống như con trỏ và bắt đầu tải những địa chỉ đó trước khi CPU yêu cầu một cách rõ ràng. Tuy nhiên, các tính năng này có thể bị vô hiệu hóa vì lý do bảo mật do lo ngại về các cuộc tấn công kênh phụ, thêm một biến số khác vào các phép đo hiệu suất.

Thông số kỹ thuật hệ thống kiểm tra

MacBook Pro 2020

  • Bộ xử lý: Chip Apple M1
  • RAM: 16GB
  • Lưu trữ: SSD 1TB
  • Bộ nhớ đệm: 8MB System Level Cache (SLC)

Máy tính để bàn Linux

  • Bộ xử lý: AMD Ryzen 5 3600X
  • RAM: 24GB Corsair Vengeance LPX DDR4 3000MHz (cấu hình 3x8GB)
  • Lưu trữ: Western Digital 1TB 3D NAND SATA SSD
  • Bộ nhớ đệm: 32MB L3 cache

Hành vi Phân cấp Cache Khác với Kỳ vọng

Kết quả cho thấy những khác biệt thú vị giữa các giới hạn cache lý thuyết và các chuyển đổi hiệu suất thực tế. Trên hệ thống Linux với cache L3 32MB, hiệu suất truy cập ngẫu nhiên bắt đầu suy giảm khi các mảng vượt quá 4MB thay vì ngưỡng 32MB dự kiến. Điều này cho thấy rằng hành vi cache trong các phân cấp đa cấp phức tạp hơn so với các tính toán kích thước đơn giản có thể dự đoán.

Các đường cong hiệu suất cũng tiết lộ rằng việc xử lý tệp ánh xạ bộ nhớ khác nhau đáng kể giữa các hệ điều hành. macOS dường như xử lý các tệp ánh xạ bộ nhớ lớn kém hiệu quả hơn Linux, mặc dù sự khác biệt này biến mất khi sử dụng các phương pháp đọc tệp trực tiếp.

Ý nghĩa Hiệu suất Thực tế

Những phát hiện này có ý nghĩa thực tế đối với các ứng dụng tính toán hiệu suất cao, đặc biệt là các thuật toán đồ thị và hệ thống cơ sở dữ liệu thường xuyên thực hiện truy cập bộ nhớ ngẫu nhiên. Phương pháp benchmark được sử dụng ở đây - với các mảng chỉ số có thể dự đoán - có thể không đại diện chính xác cho các đặc tính hiệu suất của các ứng dụng như tra cứu bảng băm hoặc duyệt đồ thị nơi mỗi lần truy cập bộ nhớ phụ thuộc vào kết quả trước đó.

Cuộc thảo luận cũng làm nổi bật cách môi trường điện toán đám mây thêm một lớp phức tạp khác. Tài nguyên CPU được chia sẻ và chi phí ảo hóa có thể ảnh hưởng đáng kể đến hiệu suất cache và các mẫu truy cập bộ nhớ, làm cho các kỹ thuật tối ưu hóa này ít có thể dự đoán hơn trong các triển khai đám mây.

Nghiên cứu nhấn mạnh sự phức tạp ngày càng tăng của các kiến trúc CPU hiện đại, nơi hàng tỷ transistor hoạt động cùng nhau theo những cách ngày càng khó dự đoán mà không có phép đo trực tiếp. Như một thành viên cộng đồng đã lưu ý, cách duy nhất đáng tin cậy để hiểu hành vi CPU cho một khối lượng công việc cụ thể là thực sự chạy khối lượng công việc đó và đo lường kết quả.

Tham khảo: How much slower is random access, really?