배너
닫기

테크노트

배너

IAR 시스템즈의 멀티코어 디버깅 방법

URL복사
[선착순 마감 임박] AI분야 특급 전문가들과 함께 AI로 우리 기업의 미래 경쟁력을 확보하는 방법을 공유합니다. AI 비즈니스 개발 융합 컨퍼런스에서 확인하세요 (5/3, 코엑스3층 E홀)

1. 멀티코어(Multicore)의 형태

 

SIMD(Single Instruction Multiple Data : 단일 명령 다중 데이터 처리)과 멀티코어

 

SIMD는 병렬 컴퓨팅의 한 종류로 하나의 명령어로 여러 개의 데이터를 동시에 계산하는 방식이다. 마치 한 사람의 작업자가 여러 개의 삽을 이용하여 같은 작업을 하는 것으로 비유될 수 있다. 주로 사용되는 분야는 벡터 및 배열 처리기를 많이 사용하는 멀티미디어 분야다.

 

이것은 이미지 처리 등에 적합하지만 한 종류의 계산만 가능하기 때문에 일반적인 응용 프로그램에는 적합하지 않다. 이에 반해 멀티코어 처리 방식은 하나의 칩에 복수의 코어를 탑재해 성능 향상을 도모하는 방법으로 각 코어는 개별적으로 동작하고 다른 코어와 협업 프로세싱도 가능하므로 다방면에 사용이 가능하다. 

 

호모지니어스(Homogeneous : 동종의) 멀티코어

 

호모지니어스 멀티코어는 동종의 복수개의 코어를 사용한 경우를 말한다. 각 코어는 로컬메모리, 캐시, 스택 및 레지스터를 개별적으로 가지고 있고 메인메모리, 주변장치, 인터럽트 컨트롤러 등을 공유할 수 있다. 주로 사용되는 목적은 응용 프로그램의 부하를 분산하는 용도로 사용된다.

 

 

헤테로지니어스(Heterogenous : 이종의) 멀티코어

 

헤테로지니어스 멀티코어는 이종의 복수개의 코어를 사용한 경우를 말한다. 각 코어는 메인 메모리와 주변 장치를 공유할 수 있다. 주로 사용되는 목적은 기능 분산에 있고 실시간 성능과 신호 처리 성능을 모두 요구하는 응용 프로그램에 사용된다.

 

 

대칭형 멀티프로세싱과 비대칭형 멀티프로세싱

 

SMP(대칭형 멀티프로세싱)는 호모지니어스 멀티코어 시스템으로 구현되는데, 각 코어는 동일한 메모리를 사용하고 동일한 코드를 실행한다. 이것은 응용 프로그램의 부하를 분산시켜 전력 소비를 줄이고 전체 시스템의 성능을 높이기 위해 사용된다. 운영체제를 통해 각 태스크를 동적으로 각 코어에 할당한다.

 

AMP(비대칭형 멀티프로세싱)는 호모지니어스 구성과 헤테로지니어스 구성 모두 구현이 가능하며, 각 코어는 응용 프로그램의 일부를 독립적으로 실행한다. 기능을 분산시킴으로써 실시간성을 확보하거나 특정 하드웨어가 연결돼 있는 등 동작하는 코어를 특정할 필요가 있는 경우에 사용된다.

 

 

2. 멀티코어 개발 시 검토해야 할 내용

 

효과적인 병렬화 요소 파악

 

가장 먼저 고려해야 할 점은 자원의 효율적인 분배다. 기존의 싱글 루프 코드를 병렬화하는 경우, 스레드가 너무 적거나 반대로 너무 많게 하는 것도 성능상의 장애 요소가 될 수 있다. 응용 프로그램의 작업 시퀀스를 검토해 스레드의 동작 및 대기 시간을 검토하는 것이 필요하다.

 

SMP 및 AMP 설계

 

SMP 설계 시 여러 작업을 여러 코어로 처리하기 때문에 실시간 성능 예측이 어렵다. 그렇기에 SMP 적용은 실시간보다 처리량이 필요한 응용 프로그램에 적용하는 것이 좋다. AMP 설계는 기존의 멀티 디바이스 프로그램을 거의 그대로 이식하는 것도 가능한데, 코어에 할당하는 작업을 효율적으로 설계해야 할 필요가 있다. 한 코어가 비어 있다고 해서 다른 코어에 해당 작업을 할당할 수 없기 때문이다.

 

병목 현상 줄이기

 

I/O, 메모리 등의 공유 리소스에 대한 독점적인 접근을 관리해야 합니다. 이것이 비효율적인 경우 많은 대기 시간이 발생한다. 

 

RTOS 사용 검토

 

멀티 프로세싱을 설계하고자 할 때 자원을 효율적으로 관리해주는 RTOS 사용을 검토해 볼 필요가 있다. 코어 간 태스크 스레드 할당, 부하 분산, 코어 간 통신 처리 등을 고려할 때 RTOS 사용이 효과적이다.

 

코어 간 통신과 동기화

 

코어가 분리되기에 다른 코어가 정상적으로 작동하는 지 확인하는 안전 모니터링 기능이 필요하다. 동기화가 필요한 경우 공유 리소스에 대한 경쟁적인 조건에 따라 한 코어가 다른 코어보다 뒤쳐지지 않도록 설계해야 한다. 또한, 공유 리소스를 보호하고 세마포어와 같이 메커니즘으로 공유된 리소스에 대한 접근을 제한하는 기능도 고려돼야 한다.

 

3. 멀티코어 디버깅

 

디버깅 도구에 필요한 기능

 

- 모든 코어의 동작을 모니터링 가능해야 한다.
- 동시에 모든 코어를 실행 및 정지할 수 있어야 한다.
- 개별적으로 각각의 코어를 실행 및 정지할 수 있어야 한다.

- 멀티코어 트레이스가 가능해야 한다. 
- 멀티코어 브레이크 포인트의 경우, 한 코어의 코드에 설정된 브레이크 포인트에서 정지할 때 모든 코어를 중지할 수 있어야 한다. 또한, 한 코어의 브레이크포인트 조건에 다른 코어의 브레이크 조건이 설정 가능해야 한다. 

 

SMP 디버깅

 

SMP는 모든 코어가 동일한 프로젝트 코드를 실행하기 때문에 하나의 창에서 디버깅이 가능하다. 디버깅 창은 모든 코어에서 실행되는 하나의 프로젝트를 표시하며, 각 코어에서 어떤 작업이 실행되고 있는지 시각화하기 위한 추가 정보가 표시된다. SMP 설정을 하기 위해 아래 그림과 같이 대칭형 멀티코어 항목의 코어수를 지정한다.

 

 

디버깅 모드를 실행하면 아래 그림과 같이 모든 코어의 상태가 표시된다. 실행 중인 코어는 녹색으로 정지돼 있는 코어는 적색으로 표시된다. 해당 코어 버튼을 클릭하여 활성화가 가능하며, 프로그램을 중지하면 활성화된 코어에서 실행 중인 코드가 표시된다.

 

 

AMP 디버깅

 

AMP는 각 코어에서 다른 프로젝트가 실행되며 같은 타입의 코어나 다른 코어의 타입도 AMP 선택이 가능하다. 디버깅 모드로 진입하면 각 프로젝트마다 디버그 창이 표시된다. AMP 디버깅 설정 방법은 마스터 측 디버거 설정에서 파트너 코어에서 실행할 프로젝트를 지정해야 한다(Asymettric multicore → Simple → Partner workspace & Partner project & Partner configuration). 파트너 측은 코어의 수만 설정하면 된다.

 

 

위 그림의 Advanced 항목은 고급 설정으로 하나 이상의 다른 프로젝트에 대한 비대칭 디버그 세션 구성이 가능하다. XML 기본 파일에서 여러 파트너 프로젝트를 설정할 수 있고 설정할 수 있는 프로젝트 수는 제한이 없다. 

 

 

위 그림은 추가적은 멀티코어 디버깅 옵션으로 ‘—macro_pram enable_core=1’을 입력해 해당 프로젝트에서 멀티코어 디버깅할 것이고 활성화할 코어의 개수(1개, 이 경우 하나의 프로젝트에서 하나의 코어만 핸들링하기 때문)를 지정해줘야 한다. 

 

 

 

디버깅을 실행하면 위 그림과 같이 마스터 및 파트너 프로젝트가 각각 열리게 되며, 하나의 프로젝트를 하나의 코어에서 실행이 가능하다. 해당 모드에서는 모든 디버그 리소스를 사용 가능하다. 각 코어의 실행 및 정지를 할 수 있는 디버깅 메뉴는 위 그림과 같다. 

 

맺음말

 

이 기고에서는 멀티코어 디버깅의 기초적인 개념과 시작 방법에 대해 설명했다. 다음 편에서는 멀티코어 디버깅을 위한 다양한 기능에 대해 다뤄보고자 한다. 개발 환경을 개발하는 업체는 개발자의 노력과 고충을 알고 그것을 해결하는 대다수의 기능을 개발했다. 이것을 선택하는 것은 개발자의 몫이다. 

 

헬로티 서재창 기자 |










배너









주요파트너/추천기업