Message Passing Interface (MPI) 및 멀티프로세싱, 멀티 쓰레딩에 관한 질문입니다.

sangjun11316의 이미지

안녕하세요, 코딩을 해오긴 했지만 효율성에 대한 생각, 특히 컴퓨터 구조적인 측면에서의 고민은 전혀 하지 않고 코드 실행 결과가 적절한지만을 보며 살아왔던 공대생입니다.

덕분에 process, thread, heap, stack 등등 들은 이름만 좀 들어왔지, 자세히 읽어보기 시작한 것은 채 몇일이 되질 않았을정도로 문외한입니다.

그러다 최근에 받아서 공부해야 하는 코드에 MPI라는게 적용되어 있더군요 (Message Passing Interface).

읽어보다보니 여러개의 processor 들을 이용해서 계산을 좀 더 효율적으로 하고자 하는 '멀티 프로세싱'컨셉인데, 찾다보니 '멀티 쓰레딩'이라는 컨셉도 있더군요.

지금부터 질문입니다.

1. 사실 '쓰레드'라는 개념 이 잘 눈에 보이지 않는데요, 예를들어 Fortran 으로 main.f90 이라는 파일 하나를 작성했다고 상상한다면 (여러 subroutine들과 function들을 불러옵니다) 이 main.f90 은 하나의 '쓰레드'로 구성되어 있다고 생각하면 되는 것인가요? 어쨋든 모든 call subroutine, function 들이 순서대로 처리될거니까요.

2. Fortran 기준으로 프로그래밍을 한다 생각했을때 '멀티 쓰레드'로 코드를 짠다는게 잘 상상이 되지 않습니다. 앞의 질문처럼 어떻게 코드를 짜더라도 결국 '싱글 쓰레드'로 되어있는 코드가 만들어 질 것 같은데...
(찾아보면 OpenMP라는걸 사용하면 멀티쓰레딩이 가능해진다고 하는데, 코드를 한 두 줄만 추가하면 자동으로 멀티쓰레딩을 해 준다는 식으로 쓰여 있더군요. 그냥 코드 몇 줄 추가하면 컴퓨터가 알아서 내부적으로 멀티쓰레딩을 해 주는 건가요?)

3. '멀티 쓰레딩'과 '멀티 프로세싱' 을 비교한 글들을 읽어보면 '멀티 쓰레딩'의 효율성 측면에서의 장점을 써 놓고 끝내는 글들이 대부분이던데요, 그렇다면 '멀티 쓰레딩'을 두고 '멀티 프로세싱'을 사용하는 이유는 무엇인가요? 제가 받은 코드를 만드신 분들이 그냥 코드를 만들진 않았을테고 이유가 있을텐데, 대부분의 글에서 '멀티 쓰레딩'을 능가하는 '멀티 프로세싱'의 장점을 찾기가 힘들어 질문드립니다.

4. '멀티 프로세싱'을 해 놓고 그 각각의 프로세스 안에서 '멀티 쓰레딩'을 하는 것도 당연히 가능하겠죠?

감사합니다.

jick의 이미지

1. 쓰레드의 개념을 좀 혼동하고 계신 것 같은데요, "쓰레드가 몇 개냐"라고 물을 수 있는 대상은 실행중인 프로세스이지 소스코드 파일이 아닙니다. 그러니까 "쓰레드가 몇 개 생성되는가", "이 순간 쓰레드 A와 B는 각각 무슨 함수를 수행하고 있는가" 이런 식으로 묻는 게 맞습니다.

2. 제가 Fortran을 잘 몰라서 패스 -.-

3. 멀티프로세싱은 프로세스가 다르므로 서로 다른 프로그램을 돌릴 수 있다는 장점이 있습니다. (음 너무 당연한가. -_-) 서로 address space를 공유하지 않으므로 프로그램을 짜기가 더 편해질 수도 있습니다. (변수 x를 내가 보는 동안 다른 쓰레드가 건드리지 않을까 같은 고민을 안 해도 되죠.) 싱글쓰레드 프로그램을 여러 개 돌리는 환경이면 락을 걸 필요성이 매우 줄어들기 때문에 경우에 따라 성능이 더 좋아질 수도 있습니다.

경우에 따라서는 언어 자체가 제대로 된 multithreading을 지원하지 않아서 최고의 성능을 내려면 울며 겨자먹기로 프로세스를 여러 개 띄워야 하는 상황도 생깁니다. 이를테면 파이썬이라든지, python이라든지... (툴툴툴)

뭐, 언제나 그렇듯이 케이스 바이 케이스입니다.

4. 네 물론 하려면 할 수 있고 실제로 그렇게 쓰는 경우도 종종 있죠. 다만 그만큼 코드가 골치아파진다는 것을 감수하셔야...

sangjun11316의 이미지

쓰레드라는 개념이 조금 더 명확해진 것 같아요 ㅎㅎ 답변 감사합니다!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.