다음을 통해 공유


Arm64EC - Arm에서 네이티브 성능을 위한 앱 빌드 및 포트

Arm64EC("에뮬레이션 호환")를 사용하면 새로운 네이티브 앱을 빌드하거나 기존 x64 앱을 증분 방식으로 전환하여 향상된 전력 소비, 배터리 수명 및 가속 AI 및 ML 워크로드를 포함하여 Arm 기반 디바이스에서 가능한 기본 속도와 성능을 활용할 수 있습니다.

Arm64EC는 Windows 11을 사용하는 Arm 디바이스에서 실행되는 앱에 대한 새로운 ABI(애플리케이션 이진 파일 인터페이스)입니다. Windows 11 SDK를 사용해야 하며 Arm의 Windows 10에서는 사용할 수 없는 Windows 11 기능입니다.

상호 운용성

Arm64EC로 빌드된 코드는 동일한 프로세스 내에서 에뮬레이션에서 실행되는 x64 코드와 상호 운용할 수 있습니다. 프로세스의 Arm64EC 코드는 네이티브 성능으로 실행되지만 모든 x64 코드는 Windows 11과 함께 기본 제공되는 에뮬레이션으로 실행됩니다. 앱이 Arm을 아직 지원하지 않는 기존 종속성 또는 플러그인을 사용하는 경우에도 앱의 일부를 Arm64EC로 다시 빌드하여 네이티브 성능의 이점을 얻을 수 있습니다.

Arm64EC는 호출 규칙, 스택 사용량, 데이터 구조 레이아웃 및 전처리기 정의를 비롯한 x64 소프트웨어 규칙에 따라 x64와의 상호 운용성을 보장합니다. 그러나 Arm64EC 코드는 다른 소프트웨어 규칙 집합을 사용하는 Arm64로 빌드된 코드와는 호환되지 않습니다.

Arm의 Windows 11 운영 체제 자체는 Arm64EC의 상호 운용성에 크게 의존하여 x64 애플리케이션을 실행을 활성화합니다. Arm의 Windows 11에서 실행되는 x64 앱에 의해 로드된 대부분의 운영 체제 코드는 Arm64EC로 컴파일되어 애플리케이션을 모르고 해당 코드에 대한 네이티브 성능을 사용할 수 있습니다.

x64 또는 Arm64EC 프로세스는 x64 및 Arm64EC 이진 파일을 로드 및 호출할 수 있으나, Arm64 프로세스는 Arm64 이진 파일만 로드할 수 있습니다. 두 아키텍처 모두 x64 및 Arm64 모두에 대한 코드가 포함되어 있으므로 Arm64X 이진 파일을 로드할 수 있습니다.

프로세스 아키텍처 x64 이진 파일 Arm64EC 이진 파일 Arm64 이진 파일
x64/Arm64EC
Arm64

✔ = 지원됨, ❌ = 지원되지 않음

마찬가지로, 빌드 시 Arm64EC 이진 파일은 x64 및 Arm64EC 라이브러리 모두에서 연결할 수 있지만 Arm64 이진 파일은 Arm64 라이브러리에서만 연결할 수 있습니다.

PE 아키텍처 x64 lib Arm64EC lib Arm64 lib
Arm64EC
Arm64

✔ = 지원됨, ❌ = 지원되지 않음

Arm64EC ABI가 상호 운용성을 가능하게 하는 방법에 대한 자세한 내용은 Arm64EC ABI 및 어셈블리 코드 이해를 참조하세요.

Arm64EC를 사용하여 Arm의 Windows 11에서 기존 앱을 더 빠르게 만들기

Arm64EC를 사용하면 기존 앱의 코드를 에뮬레이트에서 네이티브로 점진적인 전환을 할 수 있습니다. 각 단계에서 애플리케이션은 한 번에 다시 컴파일할 필요 없이 계속 잘 실행됩니다.

Arm64EC를 사용하여 Arm 성능에 대한 증분 업데이트 효과를 보여 주는 예제 그래프

위의 이미지는 완전히 에뮬레이트된 x64 워크로드의 간소화된 예제를 보여 줍니다. 그러면 Arm64EC를 사용하여 점진적으로 개선됩니다.

  1. 완전히 에뮬레이트된 x64 워크로드로 시작
  2. 가장 CPU 집약적인 부분을 Arm64EC로 다시 컴파일한 후
  3. 시간이 지남에 따라 더 많은 x64 모듈을 계속 다시 컴파일한 후
  4. 완전히 네이티브인 Arm64EC 앱의 종료 결과

x64에서 Arm64EC까지 가장 많은 시간이 걸리거나 CPU를 많이 사용하는 모듈을 다시 컴파일하면 결과 워크로드는 각 단계마다 최소한의 노력으로 가장 많이 개선합니다.

앱 종속성

Arm64EC를 사용하여 애플리케이션을 다시 빌드하는 경우, Arm64EC 버전의 종속성을 사용하려고 하지만 x64 버전의 종속성을 사용할 수도 있습니다. Arm64 버전의 종속성은 사용할 수 없습니다.

Arm64EC 프로세스의 종속성 코드를 포함한 모든 x64 코드는 앱에서 에뮬레이션으로 실행됩니다. 가장 CPU 집약적인 종속성을 x64에서 Arm64EC로 전환하는 우선 순위를 지정하면 앱 성능 향상에 매우 큰 영향을 미칩니다.

Arm64EC 이진 파일 및 앱 식별

Arm의 Windows 11에서 실행되는 앱은 마치 x64 이진 파일인 것처럼 Arm64EC 이진 파일과 상호 작용합니다. 앱은 이진 파일의 코드가 Arm64EC로 다시 컴파일된 정도를 알 필요가 없습니다. 

이러한 이진 파일을 식별하는 데 관심이 있는 개발자는 link /dump /headers을(를) 사용하여 개발자 명령 프롬프트에서 확인할 수 있습니다.

File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
    8664 machine (x64) (ARM64X)

(x64) 및 (ARM64X)의 조합은 이진 파일이 여전히 x64인 것처럼 보이지만 이진 파일의 일부가 Arm64EC로 다시 컴파일되었음을 나타냅니다. (ARM64) 및 (ARM64X)가 포함된 컴퓨터 헤더가 있는 이진 파일은 x64 및 Arm64 앱 모두에 로드할 수 있는 Arm64X PE 파일입니다.

Windows 작업 관리자 를 사용하여 앱이 Arm64EC로 컴파일되었는지 확인할 수도 있습니다. 작업 관리자의 세부 정보 탭에서 아키텍처 열은 기본 실행 파일이 부분적으로 또는 완전히 Arm64EC로 컴파일된 애플리케이션에 대해 ARM64(x64 호환 가능)를 표시합니다.

아키텍처 세부 정보의 ARM64(x64 호환)를 보여 주는 작업 관리자의 스크린샷

다음 단계

Arm64EC를 사용하여 Win32 앱을 빌드하거나 업데이트하는 방법을 알아보려면 Arm64EC 시작 방법을 참조하세요.