x86 에뮬레이션의 골칫거리

1 hour ago 2

ARM에서 x86 프로그램을 실행하려면 x86-TSO 메모리 모델을 재현해야 하며, ARM의 느슨한 메모리 순서 규칙과의 차이가 성능과 정확성 모두에 부담을 줌 FEAT_LRCPC는 일반적인 메모리 읽기 성능을 크게 개선하지만, 비정렬 접근과 쓰기까지 모두 해결하지는 못함 비정렬 메모리 접근은 FEX가 메모리 배리어나 예외 처리 경로로 우회하게 만들며, 지원 하드웨어와 접근 경계에 따라 성능 차이가 매우 커짐 캐시라인 경계를 넘는 원자적 연산인 split-lock은 성능뿐 아니라 정확성도 미해결 과제이며, FEX의 현재 구현에서는 일부 상황에서 데이터 찢어짐이 발생할 수 있음 GPU에 데이터를 전달하는 쓰기 결합 메모리에서는 ARM의 TSO 에뮬레이션 쓰기 대역폭이 x86보다 최대 816배 낮았으며, 캐시 일관성을 지원하는 UMA 시스템과 달리 PCIe GPU 환경은 우회하기도 어려움 x86-TSO와 ARM 메모리 모델의 차이 메모리 모델은 단일 스레드와 다중 스레드 환경에서 읽기와 쓰기가 서로 어떤 순서로 관찰되는지 규정함 x86-TSO는 강한 순서 제약을 제공함 ARM의 약한 순서 모델은 일반 읽기와 쓰기에 더 많은 재정렬 여지를 주어 하드웨어 최적화를 허용함 일관성과 원자성은 관련 있지만 서로 다른 속성임 일관성은 다른 프로세서가 메모리 접근을 어떤 순서로 관찰하는지와 관련됨 원자성은 한 접근의 중간 상태나 변경 전후 데이터가 섞인 값을 관찰하지 않도록 보장하는 성질임 ARMv7 이전 계열은 메모리 순서를 보장하기 위해 비용이 큰 메모리 배리어를 사용했으며, 이후 load-acquire/store-release 명령어가 이 부담을 줄임 C++의 std::atomic에서 memory_order_acquire, memory_order_release에 각각 대응함 ARM 용어상 이 명령어 자체를 원자적 연산으로 분류하지는 않으며, FEX도 과거에는 이를 atomic-load/atomic-store라고 불렀음 ARM의 RCsc(Release Consistency sequentially consistent) 모델은 acquire 읽기와 release 쓰기에 순서 제약과 barrier-ordered-before 의미론을 적용함 이전처럼 매번 별도 배리어 명령어를 사용하는 비용을 피할 수 있음 ARMv8.0의 기본 경로와 LRCPC의 개선 FEX는 ARMv8.0-a에서 모든 x86 읽기를 load-acquire, 쓰기...

Read Entire Article