메뉴 건너뛰기

프로그래밍


[구현]병렬처리기법의 개념

파이팅건맨 2000.03.11 02:36 조회 수 : 913

병렬처리기법의 개념

병렬처리기법이란 하나의 프로세서가 아닌 여러개의 프로세서를 동시에 이용해서 큰 문제를 보다 효율적으로 풀고자 하는 방법을 말한다. 이 방법은 중앙처리장치의 성능증가가 한계에 도달함에 따라 이러한 cpu를 하나가 아닌 여러개를 동시에 사용하여 성능의 한계를 극복하고자 하는 생각에서 나온 것이다. 물론 cpu의 성능이 계속적으로 향상될 경우에도 최상의 성능을 갖는 cpu 여러개를 동시에 사용함으로써 그 성능의 몇 배에 달하는 효과를 볼 수 있을 것이다. 이 기법은 현재 공학 및 과학계산 분야에서 널리 응용되고 있으며 그 효과가 널리 알려져 있다. 특히 엄청난 기억용량을 요구하는 문제를 해석하고자 할 경우는 단일 cpu를 갖는 시스템에서는 불가능한 경우가 많기 때문에 병렬처리기법을 반드시 이용해야 한다.

병렬 처리 기법은 어떤 방식으로 이를 구현하는가에 따라 여러가지로 구분할 수 있다. 먼저 병렬처리를 구현하는 명령어가 어떤식으로 병렬처리를 수행하는가에 따라
SIMD(single instruction multiple data)와 MIMD(multiple instruction multiple data)방식으로 나눌 수 있다.

simd방식은 하나의 명령어에 의해서 여러개의 프로세서들이 같은 작용을 서로 다른 데이터에 대해서 수행하는 방식을 말한다. 이는 특히 벡터나 행렬 연산의 경우 매우 효율적이라고 알려져있으며 프로그래머가 특별히 병렬처리에 대해서 프로그램상에서 구현할 필요가 없으므로 프로그래밍하기가 대단히 쉽다. 그러나 일반성이 떨어져 다양한 응용에는 한계가 있다. 이러한 방식을 택하고 있는 기종으로는 cray, illiac, cm등이 있다. cray의 경우를 예를 들면 프로그래머는 동시처리와 벡터처리가 가능하도록 루프 인덱스를 고치거나 적절한 스칼라 임시변수를 사용하여 연산식들이 병렬처리 되도록 해야 한다. 이렇게 한 후에 컴파일을 하면 컴파일러가 벡터처리를 할 수 있도록 컴파일하게 된다. 이 경우 프로그래머는 각각의 프로세서간의 데이타 전송이나 벡터처리등에 대해서 직접 제어할 필요가 없게 된다.

mimd방식은 각 프로세서가 각각의 명령어에 대해서 자신의 독립된 제어 흐름에 따라 연산을 수행하게 된다. 이 경우 프로세서간의 통신 및 데이타의 일치에 대해서 프로그래머가 직접 책임쳐야 하며 이러한 과정이 자신의 프로그램안에 포함되어 있어야만 한다. 따라서 프로그램 작성이 힘들게 된다. 이러한 방식을 사용하고 있는 기종으로는 rp3, hypercube, ipsc등이 있다.

다음으로 병렬처리 하드웨어의 주기억 장치와 프로세서의 구조에 따라 공유메모리방식과 분할 메모리 방식으로 나눌 수 있다. 공유메모리방식은 모든 프로세서가 하나의 공유메모리를 액세스 할 수 있도록 되어 있으며 cray와 alliant등이 이러한 구조로 되어 있다.

분할 메모리 방식은 각 프로세서가 자신만이 액서스할 수 있는 독립적인 메모리를 가지고 연산을 수행하며 프로세서간의 데이타 교환은 서로 메시지를 주고 받음으로써만 가능하게되어 있다. 네트웍을 통해 연결된 워크스테이션들은 개념적으로 분할 메모리 방식의 컴퓨터와 같은 구조를 이루고 있으므로 분산처리 개념을 적용하기가 용이하다.


이 게시물이  
AiRPAGE가  
번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [52] 파이팅건맨 2016.02.20 236135
공지 [펌] ARM GCC Inline Assembler Cookbook 파이팅건맨 2006.08.18 43355
공지 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 25842
66 HTTP프로토콜을 이용한 파일 업로드 파이팅건맨 2002.12.24 3043
65 [Tip] CTRL-ALT-DEL키 막는법(NT,2000,XP,98) 파이팅건맨 2002.07.11 539
64 [Tip]Default 스크린세이버 가동 방법 파이팅건맨 2002.07.11 343
63 TCHAR, UNICODE, 그리고 윈도우 NT 파이팅건맨 2002.02.26 492
62 [C]밀리초를 구현하는 방법 파이팅건맨 2001.08.07 981
61 [TIP]Convex Hull 알고리즘 파이팅건맨 2000.10.10 442
60 Lex와 Yacc의 사용법 강좌 파이팅건맨 2000.10.09 672
59 [C,ASM]어셈으로 윈도우메세지박스 띄우기 파이팅건맨 2000.08.16 442
58 [C소스]간단한 Hash 구현 파이팅건맨 2000.04.20 705
57 [C소스]사칙연산 파싱(Parsing) 파이팅건맨 2000.04.18 1081
56 [C소스]화일처리관련소스 파이팅건맨 2000.04.06 243
» [구현]병렬처리기법의 개념 파이팅건맨 2000.03.11 913
54 [ASM&C]Inline ASM- PC Speaker연주. 파이팅건맨 1999.12.13 313
53 [VC소스]Font정보를 이용한 텍스트핑퐁 파이팅건맨 1999.12.12 292
52 [ASM]PC-Speaker연주 파이팅건맨 1999.11.28 262
51 [ASM]4칙연산 계산기 소스 파이팅건맨 1999.11.22 1167
50 [VC소스]이미지 파일 저장 루틴(기초) 파이팅건맨 1999.11.18 415
49 [VC소스]VIEW에 낙서하기 파이팅건맨 1999.11.12 692
48 [C++소스]가중치구하기? 파이팅건맨 1999.10.28 1503
47 [VC소스]윈도우 모양을 마음데로... 파이팅건맨 1999.10.26 502
위로