본문 바로가기
개념공부/임베디드 C 프로그래밍 최적화

임베디드 C 프로그래밍 속도 최적화 - 반복문 최적화 2

by Zach Choi 2024. 7. 16.
728x90
반응형

1. 루프 변수에 네이티브 데이터 타입을 사용하자.

 네이티브 데이터 타입을 사용하면 데이터 버스와 메모리의 접근성이 좋아져 빠르게 동작할 수 있다. (네이티브 데이터 타입이란 프로세서의 한 워드의 크기 = 데이터 버스의 크기이다.) 반복문 제어에 사용되는 변수는 자주 사용되므로 네이티브 데이터 타입을 사용하면 성능을 높일 수 있다.

 

 예를 들어 32bit 마이크로프로세서의 경우, 네이티브 데이터 타입은 int (32bit)이다. int 형 중에서도 부호를 사용하지 않는 unsigned int가 더 빠르기 때문에 반복문의 제어 변수로 unsigned int를 사용하는 것이 좋다.


728x90
반응형

 

2. 함수와 반복문의 위치

 함수를 호출하면 자원이 사용된다. 분기 명령, 필요한 값들 스택에 저장 등등.

 반복문에서 함수를 호출하게 되면, 반복적인 분기가 이중으로 발생하게 된다. 그래서 거꾸로 함수 안에 루프를 넣어 사용하면, 함수를 반복적으로 호출하는 비용을 줄일 수 있게 된다.

 

 아래 코드에서 foo() 함수는 반복문 내부에 위치한다. 매 반복문마다 함수 호출을 위한 자원이 사용되고 분기가 발생한다. 반면, boo() 함수는 함수 내부에 반복문이 있다. 각 함수의 기능은 변수 k를 1씩 증가시키는 것으로 동일하다.

 

 반복문을 100,000번 수행한 결과, 반복문 내에서 함수를 호출하면 0.002s가 소요되고 함수 내에서 반복문을 호출하면 더 작은 시간이 소요되는 것을 알 수 있다. 이렇게 반복문에서 함수가 호출된다면, 반복문을 함수에 넣을 수 있는지 고려해 보아야 한다.

 


 

 아래 포스팅은 반복문 최적화 1번 포스팅이다.

 

임베디드 C 최적화 - 반복문 최적화 1

1. 루프 풀기 아래 2가지 형태의 for 문을 비교해보자. 아래 코드는 크기가 100인 배열에 값을 저장하는 코드이다. 첫번째 for 반복문은 일반적인 반복문이고 두번째 반복문은 루프 풀기를 적용한

iridescentboy.tistory.com

 

출처 : 임베디드 C프로그래밍 최적화, 김유진 저, 한빛미디어

728x90
반응형