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

+ Recent posts