12 điểm bởi GN⁺ 2024-11-06 | 6 bình luận | Chia sẻ qua WhatsApp
  • Các ngôn ngữ lập trình bậc cao và trình biên dịch hiện đại giúp đơn giản hóa đáng kể việc phát triển phần mềm và giảm chi phí, nhưng cũng có xu hướng che giấu các khả năng hiệu năng của phần cứng hiện đại do sự kém hiệu quả của API
  • Theo các nhà phát triển FFmpeg, việc dùng mã assembly có thể cải thiện hiệu năng từ 3 lần đến 94 lần tùy theo khối lượng công việc
  • Để tăng tốc một số chức năng cụ thể trong FFmpeg, họ đã tạo ra các đường mã được tối ưu bằng tập lệnh AVX-512, và đạt hiệu năng nhanh hơn rất nhiều so với triển khai tiêu chuẩn
  • AVX-512 sử dụng các thanh ghi 512-bit để xử lý 16 FLOP đơn chính xác hoặc 8 FLOP kép chính xác trong một phép toán, cho phép xử lý song song lượng lớn dữ liệu
  • Theo kết quả benchmark, đường mã AVX-512 viết tay mới nhanh hơn đáng kể so với mã C cơ sở và các triển khai khác dùng các tập lệnh SIMD thấp hơn như AVX2 và SSE3
  • Bản phát triển này đặc biệt hữu ích với người dùng chạy trên phần cứng hỗ trợ AVX-512, giúp xử lý nội dung media hiệu quả hơn nhiều
  • Tuy nhiên, Intel đã vô hiệu hóa AVX-512 trên các bộ xử lý Core thế hệ 12, 13 và 14, khiến chủ sở hữu các CPU này không thể sử dụng tính năng đó
  • Ngược lại, CPU AMD Ryzen 9000 series có FPU AVX-512 được kích hoạt đầy đủ, nên người dùng các bộ xử lý này có thể tận dụng thành quả của FFmpeg
  • Đáng tiếc là do tính phức tạp và chuyên biệt của AVX-512, các tối ưu hóa kiểu này thường chỉ giới hạn ở những ứng dụng mà hiệu năng là yếu tố sống còn, đồng thời đòi hỏi chuyên môn về lập trình mức thấp và vi kiến trúc bộ xử lý
    (Nội dung này được lấy từ bài viết của Tom's Hardware: FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code)

6 bình luận

 
gurugio 2024-11-08

Tôi từng có chút kinh nghiệm làm công việc liên quan trước đây, nên xin nói rằng con số 94 trước hết là câu kéo. Như đã được nêu trong phần bình luận, sự khác biệt hiệu năng lớn xuất phát từ khác biệt giữa mã scalar và mã vector. Tuy nhiên, hầu hết các codec thương mại đều tối ưu hóa bằng cách viết mã assembly. Câu nói "phần lớn mã C được biên dịch thành mã assembly tối ưu" đúng là không sai, nhưng để phát triển sản phẩm thương mại thì phải vượt lên trên mức "phần lớn" đó. Đặc biệt ở phía embedded, điều này còn quan trọng hơn.

 
GN⁺ 2024-11-06
Ý kiến trên Hacker News
  • Khẳng định rằng hiệu năng được cải thiện 94 lần trong một bộ lọc cụ thể của FFmpeg là dễ gây hiểu lầm. Phần lớn người dùng vốn đã dùng AVX/SSE, nên không cần tối ưu mã C
    • Tác nhân sử dụng CPU chính của FFmpeg là mã hóa và giải mã, và cải tiến lần này không ảnh hưởng đến các phần đó
  • Đây không phải là so sánh giữa mã assembly viết tay và mã không viết tay, mà là so sánh giữa mã scalar và mã vector
    • Nếu viết mã C bằng intrinsic AVX thì có thể đạt mức tăng tốc tương tự mà không cần mã assembly
  • Trong một số trường hợp cụ thể, mã assembly viết tay có thể có lợi thế
    • Bộ giải mã video chứa các vòng lặp cực kỳ chặt, nên cần mã assembly để duy trì tính nhất quán về hiệu năng
  • Nhóm FFmpeg cấm dùng intrinsic và yêu cầu mọi mã theo từng nền tảng phải được viết bằng assembly
    • Mã assembly luôn có thể nhanh hơn nếu đầu tư đủ công sức, nhưng intrinsic cũng có thể đạt hiệu năng rất gần với ít công sức hơn nhiều
  • Mức tăng 94 lần là tối ưu hóa của dav1d, và có thể dùng không chỉ trong FFmpeg mà còn trong các chương trình khác
    • Có yêu cầu về tối ưu hóa cho RISC-V (64-bit), đây là cơ hội tốt cho những ai quan tâm
  • Mike Pall của LuaJIT từng giải thích lợi ích của việc viết mã assembly
  • Trong microbenchmark, một hàm đơn lẻ nhanh hơn 94 lần so với mã C
  • Intel đã vô hiệu hóa AVX-512 trên các bộ xử lý Core thế hệ 12, 13 và 14
    • Chưa tìm được lý do rõ ràng cho việc này
  • Trước khi xử lý vấn đề hiệu năng, nhiều khi chưa có đủ công sức được dành ra để xác định nút thắt cổ chai
    • Phần lớn mã C được biên dịch thành mã assembly tối ưu
  • Nguyên nhân của mức tăng hiệu năng không phải là mã assembly viết tay mà là việc sử dụng các lệnh SIMD AVX-512
    • Tôi muốn so sánh với khả năng vector hóa AVX-512 của gcc
 
maclier 2024-11-06

Lỗ hổng mới của Intel Downfall AVX2/AVX-512 và tác động hiệu năng rất lớn do nó gây ra

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

À, hóa ra đây là lý do Intel loại bỏ AVX-512.

 
shlee1503 2024-11-10

Theo tôi biết thì lý do là do E-core không hỗ trợ AVX-512, nên đã bị chặn bằng phần mềm.
P-core trước đây từng hỗ trợ AVX-512 một cách không chính thức.

 
cosine20 2024-11-11

Ra vậy. Cảm ơn bạn đã cho biết :)