임베디드 리눅스 소프트웨어 개발시 CPU core 사용 관련 질문
글쓴이: ejong1 / 작성시간: 수, 2014/02/26 - 3:19오후
임베디드의 CPU 가 쿼드 코어일 경우
4개의 코어를 모두 사용하도록하여 성능을 올리게 하는것
질문 : 임베디드 리눅스 소프트웨어 개발시에(코딩) 4개의 코어를 사용하도록 별도 어떤 작업을 해줘야 하나요?
아니면 그냥 코딩하면 4개의 코어를 그냥 자동으로 사용하여 연산하나요?
제가 들은바로는 어떤 s/w는 CPU 가 쿼드코어일지라도 1개의 코어만을 사용하여 구동되는 s/w도 있다고 들었는데요... 맞는가요?
저는 지금껏 CPU 코어가 4개면 자동으로 4개의 코어를 사용하여 연산한다고 알고있었는데...
어떤것이 맞는건가요??
Forums:
CPU hotplug Support in Linux(tm) Kernel
CPU Hotplug - Frequently Asked Questions.
Q: How to enable my kernel to support CPU hotplug?
A: When doing make defconfig, Enable CPU hotplug support
"Processor type and Features" -> Support for Hotpluggable CPUs
Q: How do i logically offline a CPU?
A: Do the following.
#echo 0 > /sys/devices/system/cpu/cpuX/online
Q: How do i find out if a particular CPU is not removable?
A: Depending on the implementation, some architectures may show this by the
absence of the "online" file. This is done if it can be determined ahead of
time that this CPU cannot be removed.
(시퓨유를 끌려고 해도 꺼지지 않을 수 있습니다. 실제 구현은 CPU (Mips,ARM, x86...) 에 따라 달라집니다.
참조: Documentation/cpu-hotplug.txt of Linux Kernel
상황에 따라 다르긴 하지만..
개발단계에서 고려하지 않으면 코어만 늘린다고 자동으로 해당 코어가 활용되긴 어렵습니다.
가령 무한루프로 카운터만 1씩 계속 올리는 프로그램이 있다 합시다. 이 프로그램을 평범하게 컴파일해서 그냥 돌린다면 코어가 수백개가 되더라도 성능 향상은 어렵겠죠. 프로그램 자체 외에 OS가 할일이나 분산될 뿐..
그래서 직접 세심하게 멀티스레딩에 최적화된 형태로 프로그램을 만들어나가야 하며, 여러 가지 기술을 통해 이부분을 어느정도 자동화하거나, 이미 멀티코어에 최적화된 라이브러리를 가져다 사용하는 등의 방법도 가능합니다만 특정 상황에서는 직접 최적화해야만 좋은 성능이 나오게 됩니다.
다만 이것은 애플리케이션을 한 개만 돌릴 때의 얘기고, 여러 개의 독립적인 프로그램이나 스레드를 한꺼번에 돌리게 되면 결국 복수의 코어가 계속 사용될수밖에 없겠죠. OS가 기본적으로 백그라운드에서 담당하는 일들도 마찬가지고요. 뭐랄까, 과거 어떤 동영상 인코딩 프로그램이 멀티코어 활용을 제대로 못한다고 지적받자 코어 수 만큼의 파일을 한꺼번에 여러 스레드를 통해 인코딩하도록-_- 바뀐 걸 본 적이 있습니다. 어쨌든 코어를 그냥 놀리는 것보다는 훨씬 나은 선택이지요. 그러니 이미 완성된 프로그램이 있는데 멀티스레딩 형태로 개선하기는 어렵고 어떻게든 최적화는 해야 한다면.. 저런식으로 독립적인 태스크를 한꺼번에 병렬로 돌리는 것만으로도 꽤 도움이 될 것입니다. 다만 이 과정에서 생각지도 못한 병목현상(주로 메모리나 디스크, 기타 I/O작업)이 발견되어 생각보다 성능향상이 적어지기도 합니다. 이외에도 기타 수많은 변수들이 있습니다.
--
댓글 달기