[Arm프로세서] AAPCS: Armv7: 함수를 호출하기 위한 디자인
By Guillermo Austin Kim | 2021년 5월 24일 |
Armv7 아키텍처 관점으로 AAPCS를 보통 SP 레지스터와 LR 레지스터가 어떻게 바뀌는지 기준으로 설명합니다. 하지만 실제 거의 대부분 임베디드 혹은 시스템 개발자들은 SP와 LR 레지스터를 설정하는 어셈블리 코드를 입력하지 않습니다. 그 이유는 대부분 C 프로그래밍으로 코딩을 하기 때문입니다. SP와 LR 레지스터를 보면 낯설게 느끼기 마련입니다. 이번 절에서는 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 LR 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수를 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 prin
[Arm프로세서] 캐시(Cache): Direct-Mapped 캐시 구조
By Guillermo Austin Kim | 2022년 6월 12일 |
Direct-Mapped 캐시는 가장 단순한 캐시 구조입니다. 사실 이전 절에서 다뤘던 캐시의 구조는 모두 Direct-Mapped 입니다. 이번에는 다음 그림을 보면서 Direct-Mapped 캐시의 구조 배워봅시다. 그림 17.9 Direct-Mapped 캐시의 구조 그림 왼쪽 부분은 캐시, 오른쪽 부분은 메인 메모리의 주소 공간을 나타냅니다. 먼저 왼쪽 부분에 있는 캐시를 보면 캐시 라인은 8개이며 각각 라인은 메모리 주소에 바로 매핑됩니다. Direct-Mapped 캐시는 그림과 같이 구조가 간단하므로 하드웨어 관점으로 회로를 간단하게 구성할 수 있습니다. 또한 데이터를 빠르게 검색할 수 있습니다. 그런데 Direct-Mapped 캐시는 캐시 히트 비율이 떨어진다는 단점이 있습니다. 각각
애플 실리콘(ARM) 맥에 대한 좀더 추가된 생각
By being nice to me | 2020년 7월 3일 |
Mac OS는 Mac OS. 실사용자는 아키텍쳐에 따른 차이점을 거의 느낄 수 없을 듯 합니다. 로제타2역시 정말 특별한 앱이 아니고서는 알아서 자동으로 돌아가기 때문에 사용자 입장에서는 차이를 알아채기 힘들 것 같은데, 벤치마크 결과에서 볼 수 있듯(구버전 하드웨어 주물러 만든 DTK로 최신 서피스 프로X를 안습하게 만들었다는 해외 평가) 실제 퍼포먼스는 기대 이상이라고 볼 수 있을 듯. 물론 로제타2는 에뮬레이터라기 보다 첫 사용시 될수 있는 한 arm64 네이티브 코드로 번역을 해 놓는 물건이라서 실제 Get Info 등으로 인텔 바이너리인지 확인하기 전에는 사용자는 눈치채기 어려울 것입니다. 물론 인텔 특화 명령어를 쓰거나 했다면 안돌아갈 것이니 포기하십쇼. 여기에는 패러럴즈 같은 윈도우 가상화 포
[ARM][ARMv7 아키텍처] 성능: 사이클(cycle) 정보 얻어오기 - [1]
By Guillermo Austin Kim | 2020년 7월 20일 |
이번 포스팅에서는 ARM 프로세서의 성능 측정 지표인, 사이클 정보를 얻는 방법을 정리한다.아쉽게도 관련 문서나 코드를 100% 이해한 내용은 아니나, 리서치한 부분까지 정리한다. 리눅스 커널의 ARM 어셈블리 코드 분석 아래 소스를 열어보면 뭔가 의미있어 보이는 주석이 있다. * Cortex-A8 has up to 4 configurable performance counters and * a single cycle counter. * Cortex-A9 has up to 31 configurable performance counters and * a single cycle counter. * * All counters can be enabled/disabled and IRQ masked separ