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

임베디드 C 프로그래밍 최적화

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

임베디드 C 프로그래밍 최적화란

 CPU, 메모리 등 가용 자원이 제한적인 임베디드 환경에선 코드 최적화가 필수적이다. 코드 최적화는 속도, 메모리, 가독성 등의 요소를 최대화 하는 것을 의미한다. 각 최적화 요소는 trade-off 관계이기 때문에, 일반적으로 모든 요소의 향상을 추구할 수는 없다. 프로젝트 목표나 임베디드 환경에 따라 다른 요소의 성능은 포기하면서, 원하는 성능을 달성해야 한다. (하지만 문제에 따라 특정 알고리즘을 사용해 속도와 메모리의 성능을 모두 끌어올릴 수도 있다.)

 

 임베디드 C 프로그래밍에서 최적화 여부를 확인하는 기초적인 방법인 디스어셈블리 코드를 확인하는 것이다. 디스어셈블리 코드란 우리가 작성한 코수준 코드를 기계어로 변경하기 이전에, 컴파일러가 어셈블리 코드로 만든 것이다. 일반적으로 어셈블리 코드 수가 많을 수록, 연산이 많은것이므로 코드의 속도가 느리다고 판단할 수 있다. Visual Studio와 같은 IDE 에서는 디스어셈블리 코드를 확인할 수 있으므로 아래 확인 방법을 참고하자.

 

 

[IDE] 비주얼 스튜디오 디스어셈블리 코드 확인 방법

C, C++ 코드 성능을 확인하거나 동작 방식을 로우 레벨에서 확인해야할 때 어셈블리 코드를 직접 보는 것이 도움된다. Visual Studio 에서는 컴파일된 어셈블리 코드를 확인할 수 있는 창을 제공한다.

iridescentboy.tistory.com

 


 

 임베디드 C 프로그래밍 최적화 방법은, 김유진 저의 임베디드 프로그래밍 C 코드 최적화 (한빛미디어 출판) 서적을 참고했다. 2000년도 후반에 나온 굉장히 오래된 책이지만, 훌륭한 내용이 잘 정리되어 있는 책이다. 이미 절판되어 새 책을 구할 순 없는데 중고 서적들은 가격이 2~3배에 형성되어 있다.

 

 아래 포스팅 글들은 위 서적을 참고해, 속도 최적화 부분만 정리한 것이다. (내가 필요한 부분이 속도 최적화라 ㅎㅎ)

 

 

임베디드 C 프로그래밍 속도 최적화 - 포인터 최적화

1. 함수의 인자로 포인터를 사용해 속도를 향상하자. 구조체처럼 부피가 큰 것은 함수의 인자로 넘길 때 call by value, call by reference 중 어떤 방식을 사용해야 할까. 구조체를 함수의 인자로 넘기는

iridescentboy.tistory.com

 

 

 

임베디드 C 프로그래밍 속도 최적화 - 변수 사용 최적화

1. 적절한 데이터 타입 선택이 중요하다. 임베디드 환경에서 프로세서는 가장 잘 다룰 수 있는 데이터 타입이 있는데 이를 네이티브 데이터 타입이라고 한다. 네이티브 데이터 타입은 해당 프로

iridescentboy.tistory.com

 

 

 

임베디드 C 프로그래밍 속도 최적화 - 분기문 최적화

1. 다중 분기문의 비교문에 공통된 연산이 있다면, 연산 결과를 변수에 저장하여 사용하자. 아래 코드는 다중 if 분기문이고 각 비교문은 동일한 연산이 반복되는 코드이다. 디스어셈블리 코드

iridescentboy.tistory.com

 

 

 

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

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

iridescentboy.tistory.com

 

 

 

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

1. 루프 변수에 네이티브 데이터 타입을 사용하자. 네이티브 데이터 타입을 사용하면 데이터 버스와 메모리의 접근성이 좋아져 빠르게 동작할 수 있다. (네이티브 데이터 타입이란 프로세서의

iridescentboy.tistory.com

 

 

 

임베디드 C 프로그래밍 속도 최적화 - 기타 방법들

1. 실수의 나누기는 곱의 형태로 바꾸어 보자. 실수의 나누기 연산은 더하기, 곱하기 연산에 비해 두배 이상 느릴 수 있다. 그래서 나누기 연산을 상수를 이용한 곱 연산으로 바꾸는 것이 좋다.

iridescentboy.tistory.com

 


728x90
반응형

 

728x90
반응형