Debian: x86-64 sử dụng hướng dẫn nào?


7

Tôi muốn biết liệu nhị phân có sử dụng (được biên dịch cho) các tập lệnh đặc biệt như SSE 4.1 / 4.2, AVX, F16C hay không. Làm thế nào tôi có thể tìm hiểu xem một nhị phân trong một gói có sử dụng các tập lệnh nhất định không?

Tôi biết rằng tôi có thể kích hoạt các hướng dẫn như vậy bằng cách sử dụng các configurecông tắc khi biên dịch các gói bằng tay, nhưng khi sử dụng các gói được biên dịch trước từ kho lưu trữ Debian thì phải có một mặc định.

Có thể các tệp nhị phân không được biên dịch với các tập lệnh quá cụ thể vì chúng không thể được sử dụng trên bất kỳ hệ thống nào hoặc tùy thuộc vào nhị phân, chúng được biên dịch với các chương trình con thay thế "mô phỏng" việc xử lý với các hướng dẫn cơ bản để hỗ trợ CPU thiếu các tính năng đó.

Tôi biết rằng tôi có thể xem xét rulestệp của gói nguồn Debian nhưng tôi quan tâm nếu có cách dễ dàng hơn để làm điều này.

  • Các hướng dẫn CPU có phải là nhị phân x86-64 sử dụng rất hạn chế không?
  • Các gói có thể sử dụng các bộ hướng dẫn khá cụ thể, chúng có thể có các dự phòng sử dụng các hướng dẫn nguyên thủy hơn không?

Câu trả lời:


6

Để trả lời câu hỏi của bạn nói chung, /superuser/726395/how-to-check-if-a-binary-requires-sse4-or-avx-on-linux đưa ra một kịch bản có thể được phân tách nhị phân (đầu ra của objdump) và sẽ cố gắng tìm ra tập lệnh yêu cầu tối thiểu. Kỹ thuật này nhất thiết phải gần đúng, vì một nhị phân nhất định có thể có các đường thực thi khác nhau tùy thuộc vào tập lệnh có sẵn và một nhị phân như vậy sẽ xuất hiện để yêu cầu tập lệnh "tốt nhất" mà nó hỗ trợ, mặc dù nó thực sự có thể chạy mà không cần.

Cụ thể liên quan đến các gói Debian, mọi thứ được đóng gói cho amd64(tập lệnh "PC" 64 bit) phải có thể chạy trên mọi CPU tương thích AMD64 hoặc x86-64; điều này có nghĩa là nó có thể sử dụng tập lệnh 64 bit tiêu chuẩn đầy đủ, bao gồm SSE2, nhưng nó chỉ có thể sử dụng các tính năng khác (bao gồm cả các tính năng bạn liệt kê) nếu nó cung cấp dự phòng cho CPU không hỗ trợ chúng. Có các trường hợp ngoại lệ, nhưng các gói phải chỉ ra rằng trong mô tả gói (xem ví dụ rr).

Bản thân nhân Linux có thể điều chỉnh các tính năng của nó với các CPU mà nó tự chạy. Nếu nó được biên dịch cho x86-64, nó giả định rằng nó có thể sử dụng TSC, CMPXCHG64, CMOV (tìm bất cứ thứ gì phụ thuộc vào X86_64liên kết đó). Nhưng nó có thể được biên dịch để kiểm tra tại thời điểm chạy xem các tính năng như AES-NI, AVX, AVX2 có khả dụng hay không và đặc biệt sử dụng chúng để tăng tốc tính toán tiền điện tử. Điều này có thể có lợi cho bất kỳ chương trình nào sử dụng các tính năng này (với chi phí chuyển đổi ngữ cảnh vào kernel).

Trong một số trường hợp, trình liên kết động cũng có thể giúp cung cấp các lựa chọn thay thế tùy thuộc vào CPU: do đó libc6-i686cung cấp một bộ thư viện cho i386kiến trúc sẽ được sử dụng tự động thay vì tương đương xương trần trên CPU tương thích với tập i686lệnh (và hỗ trợ CMOV).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.