임베디드 리눅스 소프트웨어 개발시 CPU core 사용 관련 질문

ejong1의 이미지

임베디드의 CPU 가 쿼드 코어일 경우
4개의 코어를 모두 사용하도록하여 성능을 올리게 하는것

질문 : 임베디드 리눅스 소프트웨어 개발시에(코딩) 4개의 코어를 사용하도록 별도 어떤 작업을 해줘야 하나요?
아니면 그냥 코딩하면 4개의 코어를 그냥 자동으로 사용하여 연산하나요?

제가 들은바로는 어떤 s/w는 CPU 가 쿼드코어일지라도 1개의 코어만을 사용하여 구동되는 s/w도 있다고 들었는데요... 맞는가요?

저는 지금껏 CPU 코어가 4개면 자동으로 4개의 코어를 사용하여 연산한다고 알고있었는데...

어떤것이 맞는건가요??

goforit의 이미지


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

mirheekl의 이미지

개발단계에서 고려하지 않으면 코어만 늘린다고 자동으로 해당 코어가 활용되긴 어렵습니다.

가령 무한루프로 카운터만 1씩 계속 올리는 프로그램이 있다 합시다. 이 프로그램을 평범하게 컴파일해서 그냥 돌린다면 코어가 수백개가 되더라도 성능 향상은 어렵겠죠. 프로그램 자체 외에 OS가 할일이나 분산될 뿐..

그래서 직접 세심하게 멀티스레딩에 최적화된 형태로 프로그램을 만들어나가야 하며, 여러 가지 기술을 통해 이부분을 어느정도 자동화하거나, 이미 멀티코어에 최적화된 라이브러리를 가져다 사용하는 등의 방법도 가능합니다만 특정 상황에서는 직접 최적화해야만 좋은 성능이 나오게 됩니다.

다만 이것은 애플리케이션을 한 개만 돌릴 때의 얘기고, 여러 개의 독립적인 프로그램이나 스레드를 한꺼번에 돌리게 되면 결국 복수의 코어가 계속 사용될수밖에 없겠죠. OS가 기본적으로 백그라운드에서 담당하는 일들도 마찬가지고요. 뭐랄까, 과거 어떤 동영상 인코딩 프로그램이 멀티코어 활용을 제대로 못한다고 지적받자 코어 수 만큼의 파일을 한꺼번에 여러 스레드를 통해 인코딩하도록-_- 바뀐 걸 본 적이 있습니다. 어쨌든 코어를 그냥 놀리는 것보다는 훨씬 나은 선택이지요. 그러니 이미 완성된 프로그램이 있는데 멀티스레딩 형태로 개선하기는 어렵고 어떻게든 최적화는 해야 한다면.. 저런식으로 독립적인 태스크를 한꺼번에 병렬로 돌리는 것만으로도 꽤 도움이 될 것입니다. 다만 이 과정에서 생각지도 못한 병목현상(주로 메모리나 디스크, 기타 I/O작업)이 발견되어 생각보다 성능향상이 적어지기도 합니다. 이외에도 기타 수많은 변수들이 있습니다.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.