ARM의 구조에 따른 효율적인 코딩
출처 : mds 아카데미 - ARM 프로세서 ARM11
Toolchain Option
컴파일러의 Optimization level을 설정 할 수 있다.
옵션
-O0 : optimaization을 하지 않는다. 불필요한 코드 존재. Debugging에 적합
-O1 : O0와 O2의 중간단계
-O2 : full optimization, Code density가 좋음
-g : O레벨과 상관없이 O0으로 컴파일 한다.
최적하를 할 경우 기본적인 코드 최적화 및 core에서 최대 성능을 내도록 명령어 순서 재배치가 이루어 진다.
소프트웨어 최적화
- ARM 프로세서의 특징을 알아야 한다.
- 성능 향상을 위해서는 프로그래머의 주의를 요구한다.
- ARM에는 Division을 할 수 있는 하드웨어가 없다.
- Unaligned acess를 지원하지 않는다.
- ARM 명령은 조건부 실행이 가능하다.
- 스택의 사용이 많으면 시스템 성능 감소한다.
- ATPCS에 argumet가 전달된다.
Diviation(나눗셈) Modulo(나머지) 연산
- ARM에는 Division을 위한 하드웨어가 없다.
- Diviation 연산 : 최대한 power of 2로 나누어 질 수 있도록 한다. Inline barrel shifter가 사용되어 성능 감소가 없다.
- Modulo 연산
Count = count ++ % 10 - > if(count++>=10) count=0;
add r1, r0, #`
mov r0, #10 -O1 or -O2 add r0, r0, #1
bl __rt_udiv - > cmp r0, #10
mov r0,r1 movcs r0, #0
Loop의 종료
- Loop 명령 : for(), while(), do{}while() 등
- 0으로 decrement를 하면 최적화가 가능하다.
for(loop=1; loop<=total; loop++) -> for(loop=total; loop!=0; loop--)
add r1, r1, #1
cmp r1, r0 -> subs r1, r1, #1
ble __loop bne __loop
Inline 함수에 의한 성능 향상
- Subroutine 함수과 같이 사용이 편리
- static _-inline void func (int a1, int a2)
- 사용되지 않는 코드는 포함되지 않는다.
스택 사용 시 주의 사항
Argument 전달
변수 사용
Global과 static 변수의 메모리 배치
'리눅스 > 기타' 카테고리의 다른 글
.bashrc에서 예약어 등록하기 (0) | 2019.07.08 |
---|---|
리눅스 7z 압축풀기 (0) | 2019.07.08 |
MCU 선정, Cortex 시리즈, 보드 선정 (0) | 2016.03.09 |
bash shell (0) | 2016.01.25 |