데비안: x86-64 바이너리는 어떤 명령어를 사용하나요?

데비안: x86-64 바이너리는 어떤 명령어를 사용하나요?

바이너리가 SSE 4.1/4.2, AVX, F16C와 같은 특수 명령어 세트를 사용(컴파일)하는지 알고 싶습니다. 패키지의 바이너리가 특정 명령어 세트를 사용하는지 확인하는 방법은 무엇입니까?

패키지를 수동으로 컴파일할 때 스위치를 사용하여 이러한 지시문을 활성화할 수 있다는 것을 알고 있지만 configure데비안 저장소에서 미리 컴파일된 패키지를 사용할 때는 기본값이 있어야 합니다.

바이너리는 어떤 시스템에서도 작동하지 않기 때문에 너무 구체적인 명령어 세트로 컴파일되지 않을 수도 있고, 바이너리에 따라 이러한 기능이 부족한 CPU를 지원하기 위해 기본 명령어 처리를 "시뮬레이트"하는 대체 서브루틴으로 컴파일될 수도 있습니다. 능력.

나는 rules데비안 소스 패키지의 파일을 볼 수 있다는 것을 알고 있지만, 이를 수행하는 더 쉬운 방법이 있는지 궁금합니다.

  • x86-64 바이너리는 매우 제한된 CPU 명령어를 사용합니까?
  • 패키지는 매우 구체적인 지침 세트를 사용할 수 있으며, 보다 원시적인 지침을 사용할 수 있습니까?

답변1

귀하의 질문에 일반적으로 답변하려면,https://superuser.com/questions/726395/how-to-check-if-a-binary-requires-sse4-or-avx-on-linux디스어셈블된 바이너리(의 출력 objdump)를 입력으로 사용하고 필요한 최소 명령 세트를 찾으려고 시도하는 스크립트가 제공됩니다. 주어진 바이너리는 사용 가능한 명령어 세트에 따라 다른 실행 경로를 가질 수 있고, 이러한 바이너리는 실제로는 명령어 세트 없이 실행될 수 있더라도 지원하는 "최상의" 명령어 세트를 요구하는 것처럼 보이기 때문에 이 기술은 대략적인 것입니다.

특히 데비안 패키지와 관련하여 amd64(64비트 "PC" 명령 세트)용으로 패키지된 모든 항목은 모든 AMD64 또는 x86-64 호환 CPU에서 실행될 수 있어야 합니다.이것은 의미한다SSE2를 포함하여 전체 표준 64비트 명령어 세트를 사용할 수 있지만 해당 기능을 지원하지 않는 CPU에 대한 대체 기능을 제공하는 경우 다른 기능(나열한 기능 포함)만 사용할 수 있습니다. 예외가 있지만 패키지 설명에 패키지를 명시해야 합니다(예:rr).

Linux 커널 자체는 실행되는 CPU의 성능에 맞게 기능을 조정할 수 있습니다. x86-64용으로 컴파일된 경우가설X86_64TSC, CMPXCHG64, CMOV( 해당 링크에 의존하는 모든 항목 찾기)와 함께 작동합니다 . 그러나 AES-NI, AVX, AVX2 등과 같은 기능을 사용할 수 있는지 여부를 런타임에 확인하고 특히 암호화 계산 속도를 높이기 위해 이를 사용하도록 컴파일할 수 있습니다. 이는 이러한 기능을 사용하는 모든 프로그램에 도움이 될 수 있습니다(컨텍스트를 커널로 전환하는 비용으로).

어떤 경우에는 동적 링커가 CPU 기반 대안을 제공하는 데 도움이 될 수도 있습니다.libc6-i686i386아키텍처 에는 명령어 세트와 호환되고 CMOV를 지원하는 CPU의 기본 등가물 대신 자동으로 사용되는 라이브러리 세트가 제공됩니다 .i686

관련 정보