당신은 주제를 찾고 있습니까 “병렬 컴퓨팅 – 프로세스는 뭐고 스레드는 뭔가요?“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 얄팍한 코딩사전 이(가) 작성한 기사에는 조회수 76,514회 및 좋아요 2,227개 개의 좋아요가 있습니다.
병렬 컴퓨팅(parallel computing) 또는 병렬 연산은 동시에 많은 계산을 하는 연산의 한 방법이다. 크고 복잡한 문제를 작게 나눠 동시에 병렬적으로 해결하는 데에 주로 사용되며, 병렬 컴퓨팅에는 여러 방법과 종류가 존재한다.
병렬 컴퓨팅 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 프로세스는 뭐고 스레드는 뭔가요? – 병렬 컴퓨팅 주제에 대한 세부정보를 참조하세요
#프로세스 #스레드 #thread
Process와 Thread. 컴공의 운영체제 클래스😪에서 또는
멀티태스킹에 관련한 주제에서 들을 수 있는 용어들이죠.
어려울 수 있지만, 프로그래머로서 반드시 알아야 하는 개념들이에요.
프로세서와 스레드가 무엇이고 서로 어떻게 다른지 살펴보고
자바에서의 스레드 사용도 예제를 통해 알아보기로 하겠습니다.
= = =
🏠 얄코사이트: https://www.yalco.kr
🛒 개발자스티커 구매: https://smartstore.naver.com/honeykers
🎥 가장 쉬운 Git 튜토리얼: https://youtu.be/FXDjmsiv8fI
🎥 포인터 쉽게 알아보기: https://youtu.be/u65F4ECaKaY
🎥 객체지향에 대해 알아보기: https://youtu.be/vrhIxBWSJ04
🎥 객체지향 디자인 패턴: https://youtu.be/lJES5TQTTWE
🎥 함수형 프로그래밍이란?: https://youtu.be/jVG5jvOzu9Y
🎥 쿠키 vs 세션 vs 캐시: https://youtu.be/OpoVuwxGRDI
🎥 프로세스와 스레드: https://youtu.be/iks_Xb9DtTM
🎥 비동기 프로그래밍: https://youtu.be/m0icCqHY39U
🎥 REST API 알아보기: https://youtu.be/iOueE9AXDQQ
🎥 GraphQL 알아보기: https://youtu.be/EkWI6Ru8lFQ
= = =
🎬 영상 주요 포인트
⚙️ 프로세스의 개념
여러분의 컴퓨터에서 실행할 수 있는 파일
윈도우의 경우 이름 뒤쪽에 .exe 붙어있는
그런 파일들을 ‘프로그램’이라고 해요.
그리고 그 프로그램이 실행돼서
돌아가가고 있는 상태,
즉 컴퓨터가 어떤 일을 하고 있는 상태를
‘프로세스’라고 하죠.
…
여러 프로세스를 함께 돌리는 작업은
동시적, 병렬적, 또는
이 둘의 혼합으로 이뤄져요.
…
동시성은 프로세서 하나가
이거 조금 하고 이거 조금 하고 이거 조금 하고
이렇게 여러 작업을 돌아가면서
일부분씩 진행하는거에요.
…
이 과정이 Git똥차게 빨리 돌아가니까
사람에게는 이 프로세스들이
동시에 진행되는 것처럼 느껴지는거죠.
병렬성은 프로세서 하나에
코어 여러 개가 달려서
각각 동시에 작업들을 수행하는거에요.
듀얼코어 쿼드코어 옥타코어
이런 명칭이 붙는 멀티코어 프로세서가 달린
컴퓨터에서 할 수 있는 방식이죠.
CPU의 속도가 발열 등 물리적 제약 때문에
예전만큼 빠르게 발전하지 못하자
그 대안으로, 코어를 여러 개 달아서
작업을 분담할 수 있도록 만든거에요.
🧵 스레드의 개념
한 프로세스 내에서도 여러 갈래의 작업들이
동시에 진행될 필요가 있는거에요.
이 갈래를 ‘스레드’라고 불러요.
이 영상에서 메모리를 조리대에 비유했죠?
프로세서는 요리사고,
대량주문이 들어오는 이 식당에서
끊임없이 만들어내는 요리 메뉴
하나하나가 프로세스에요.
컴퓨터는 프로세스마다 자원을 분할해서 할당해요.
라면 끓이는 섹션, 김밥 마는 섹션, 햄버거 만드는 섹션
이렇게 조리 공간을 나눠서
요리사 혼자서 돌아다니면서 동시적으로 하든
여럿이서 병렬적으로 하든, 이들을 섞어서 하든
이 메뉴들을 계속해서 만들어내는거죠.
햄버거를 만드는 프로세스에서는
패티를 굽는 스레드가 진행되는 동안
빵에 야채를 얹고 소스를 뿌리는
스레드도 진행될 수 있겠죠.
한 메뉴의 스레드들은 같은 조리대에서 이뤄져요.
패티는 여기서 굽고 야채는 여기서 얹는다면
같은 조리대에서 작업하는 것보다
일하기가 더 힘들겠죠.
같은 메뉴를 만들 때는 같은 공간과 장비,
즉 같은 자원을 공유하는것이
더 효율적일거에요.
프로세스들은 컴퓨터의 자원을 분할해서 쓰지만
스레드는 프로세스마다 주어진 전체 자원을
함께 사용하는거죠.
이게 속도와 효율 면에서는 낫겠지만
단점도 있어요.
프로세스 안에서 공유되는 변수에
스레드 두 개가 동시에 손을 대요.
현실세계에서는 로맨스물이 되지만
컴퓨터 세계에서는 Error물이 돼요.
= = =
🎵 엔딩송 : 권민호, 김한영 – Let’s Dance
🎼 자료출처 : https://gongu.copyright.or.kr
🎼 Music promoted by DayDreamSound : https://youtu.be/L16GOic2UXw
병렬 컴퓨팅 주제에 대한 자세한 내용은 여기를 참조하세요.
병렬 컴퓨팅 – 나무위키
동시에 여러 연산를 처리한다면 병렬 컴퓨팅이다. 분산 컴퓨팅은 여러 대의 컴퓨터를 연결하여 한 대가 처리하는 효과를 내는 것이다. 한 개의 컴퓨터를 …
Source: namu.wiki
Date Published: 1/16/2022
View: 79
병렬 컴퓨팅, 컴퓨터 속도에 혁신을 불러오다 – 네이버 블로그
병렬 컴퓨팅이란 하나의 문제를 해결하기 위한 계산을 여러 개로 나누어 각각을 다수의 처리 장치 (프로세서)에 맡기는 계산 방식입니다.
Source: blog.naver.com
Date Published: 3/10/2022
View: 7521
병렬 컴퓨팅(Parallel Computing) 개념 – 개발하는 과학자
병렬 컴퓨팅(Parallel Computing) · 여러 개의 프로세서나 코어를 가진 단일 컴퓨터이다. · 네트워크에 연결된 컴퓨터의 임의 개수이다.
Source: devsci.tistory.com
Date Published: 5/7/2022
View: 9621
병렬 컴퓨팅 소개 (CPU, GPU, 발전 과정) – 킹남지 컴퍼니
2003년 이후에는 CPU든 GPU든 병렬 컴퓨팅(Parallel Computing)이 PC 시장에 본격적으로 진입했음. CPU 시장에는 Dual Core CPU가 나옴. 위의 구조도와 …
Source: kingnamji.tistory.com
Date Published: 11/14/2022
View: 786
고성능 컴퓨팅(HPC)
병렬 컴퓨팅(parallel computing)의 기본 개념은 한번에 하나씩 처리하게 되면 상당시간 걸릴 작업을 작업을 동시에 실행킬 수 있도록 작업을 나누어서 짧은 시간에 …
Source: aispiration.com
Date Published: 12/11/2021
View: 7553
중앙처리장치(CPU) – 5 (병렬 컴퓨팅, 병렬 컴퓨터)
병렬 컴퓨팅이란 여러 개의 연산을 동시에 병렬적으로 처리하는 방법을 의미한다. … 예를 들어, 두 개의 연산이 서로 의존성이 없다면 한 개 연산이 완료 …
Source: gamedevlog.tistory.com
Date Published: 9/30/2022
View: 9806
병렬 컴퓨팅 – [정보통신기술용어해설]
병렬 컴퓨팅 (Parallel Computing) 이란? ㅇ 프로세서 관점에서, (병렬성) – 2 이상의 프로세서들이, – 큰 문제를 작게 나뉘어진 문제(또는 프로그램) …
Source: www.ktword.co.kr
Date Published: 8/24/2022
View: 1165
병렬 컴퓨팅과 분산 컴퓨팅의 차이점 – 과학 기술 – 2022
병렬 컴퓨팅과 분산 컴퓨팅의 차이점은 병렬 컴퓨팅은 여러 프로세서를 사용하여 동시에 여러 작업을 실행하는 반면 병렬 컴퓨팅에서는 여러 컴퓨터가 네트워크를 통해 …
Source: ko.strephonsays.com
Date Published: 3/23/2022
View: 8620
병렬프로그램환경 – 기상청
사용자는 문제를 병렬 처리하기 위해 적절한 병렬 컴퓨팅 자원과 병렬 프로그래밍 기술이 필요하다. ▷ 병렬 컴퓨팅과 계산 자원. 병렬 컴퓨팅이란 문제를 해결하기 위해 …
Source: www.kma.go.kr
Date Published: 12/4/2022
View: 9609
주제와 관련된 이미지 병렬 컴퓨팅
주제와 관련된 더 많은 사진을 참조하십시오 프로세스는 뭐고 스레드는 뭔가요?. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 병렬 컴퓨팅
- Author: 얄팍한 코딩사전
- Views: 조회수 76,514회
- Likes: 좋아요 2,227개
- Date Published: 2019. 5. 21.
- Video Url link: https://www.youtube.com/watch?v=iks_Xb9DtTM
위키백과, 우리 모두의 백과사전
병렬 컴퓨팅(parallel computing) 또는 병렬 연산은 동시에 많은 계산을 하는 연산의 한 방법이다. 크고 복잡한 문제를 작게 나눠 동시에 병렬적으로 해결하는 데에 주로 사용되며,[1] 병렬 컴퓨팅에는 여러 방법과 종류가 존재한다. 그 예로, 비트 수준, 명령어 수준, 데이터, 작업 병렬 처리 방식 등이 있다. 병렬 컴퓨팅은 오래전부터 주로 고성능 연산에 이용되어 왔으며, 프로세서 주파수[2]의 물리적인 한계에 다가가면서 문제 의식이 높아진 이후에 더욱 주목받게 되었다. 최근 컴퓨터 이용에서 발열과 전력 소모에 대한 관심이 높아지는 것과 더불어 멀티 코어 프로세서를 핵심으로 컴퓨터 구조에서 강력한 패러다임으로 주목받게 되었다.[3]
병렬 컴퓨터들은 대체적으로 하드웨어의 병렬화 방법에 따라 분류된다. 클러스터, MPP, 그리드는 여러 컴퓨터에서 한 가지 작업을 하도록 설계되었다. 멀티 코어나 멀티 프로세서 컴퓨터들은 여러 개의 처리 요소(CPU 등)을 한 기기에 탑재하고 작업한다. 특수화된 병렬 컴퓨터 구조들은 가끔씩 고전적인 프로세서들과 함께 특정한 작업을 가속화 시키는 목적으로도 사용된다.
병렬 컴퓨터 프로그램들은 순차적 프로그램보다 난해하다.[4] 왜냐하면 동시처리는 여러 종류의 새로운 잠재적 소프트웨어 버그를 가지고 있기 때문이다. (경쟁 상태가 가장 흔하다) 통신과 동기화를 요구하는 다른 하위 작업들은 병렬 프로그램 성능의 전형적인 방해요소다. 병렬화된 프로그램의 속도 향상은 암달의 법칙에 의해서 그 결과가 결정된다.
배경 [ 편집 ]
전통적으로 컴퓨터 소프트웨어는 직렬 컴퓨팅 방식을 기본으로 작성되어 왔다. 문제를 해결하는 데 있어서 알고리즘은 직렬형 명령들로 이루어졌고 그 명령들은 하나의 CPU에 의해서 실행되었다. 한 명령이 한 번에 하나씩 실행된다. 하나가 끝나면 그 다음 명령이 실행된다.[5]
병렬 컴퓨팅은 여러 개의 처리 요소(프로세서 등)를 이용하여 한 번에 문제를 해결한다. 이것은 그 문제를 독립적인 부분들로 나눠서 각 처리 요소가 그 부분의 알고리즘들을 한 번에 다른 요소들과 처리를 할 수 있게 하는 것을 가능하게 했다. 그 처리요소들은 여러 자원들을 포함한다. 예를 들면 한 컴퓨터에 있는 멀티프로세서, 여러 네트워크 컴퓨터들, 특수 하드웨어, 아니면 그런 것들을 섞어 쓸 수도 있다.[5]
컴퓨터의 클럭 속도는 1980년도 중반부터 2004년까지 컴퓨터 성능을 향상시키는 데 가장 영향력 있는 요소였다. 프로그램 실행시간은 명령어 수를 명령어 당 평균시간을 곱한 것과 같았는데 클럭수를 늘리면 명령을 실행하는 평균시간은 짧아진다.
그러나 칩의 전력소모량은P = C × V2 × F의 공식에 따른다. 여기서, P는 전력, C는 한 클럭 주기 당 스위칭된 전기용량(입력이 변화하는 트랜지스터의 개수에 비례), V는 전압(voltage)이고 F는 주파수(프로세서 속도)를 의미한다.[6] 주파수 수(프로세서 속도)를 높이면 전력 사용량이 늘어난다는 뜻이다. 전력 사용량이 계속 높아가자 결국 인텔은 2004년 5월에 테자스와 제이호크(Tejas and Jayhawk)를 취소시키기에 이른다. 그 사건은 주파수 척도에 의한 컴퓨터 구조 패러다임이 끝나는 것을 의미하게 된다.[7]
무어의 법칙은 매 18에서 24개월 동안 집적도가 두 배씩 늘어난다는 것을 예측하는데,[8] 전력소모량 사건에 계속됐던 예측은 끝이나고 말지만 무어의 법칙은 여전히 유효하다. 주파수 척도는 끝이 났지만 추가적인 트랜지스터들은 추가적인 병렬 컴퓨팅에 쓰이게 된다.
암달의 법칙과 구스타프슨의 법칙 [ 편집 ]
암달의 법칙 을 그림으로 표현했다. 병렬화로 인한 프로그램의 속도 향상은 프로그램이 얼마나 병렬화되어있느냐에 제한되어있다. 예를 들면 90%의 프로그램이 병렬화될 수 있다면 이론적으로 병렬 컴퓨팅을 사용한 속도 향상은 몇 개의 프로세서를 쓰던지 10배의 속도까지만 향상시킬 수 있다.
병렬화로 인한 속도 향상중 제일 좋은 것은 역시 선형적 결과다. 프로세서 수를 두 배로 늘리면 두 배 역할을 해서 실행시간을 절반으로 줄이고 프로세서 수를 또 두 배로 늘리면 또 실행시간이 절반으로 줄어든다. 그런데 아주 적은수의 병렬 알고리즘만이 최적의 속도 향상을 달성했다. 대부분은 그저 비슷한 선형적 속도 향상을 적은 수의 처리요소(프로세서)로 달성했을 뿐이다. 그것들은 처리 요소들의 숫자가 많아질수록 효과가 적어진다.
병렬 컴퓨팅 기반에서 잠재적인 속도 향상 알고리즘인 암달의 법칙은 1960년대에 진 암달에 의해서 만들어졌다.[9] 병렬화할 수 없는 작은 부분의 프로그램은 전체적인 병렬화에 영향(제한)을 가져온다는 것이었다. 수학적이나 공학적 문제들은 전통적으로 몇 가지 병렬화된 부분과 병렬화되지 않은 부분으로 구성되게 된다. 이 관계는 아래와 같은 공식으로 나타나게 된다.
S = 1 1 − P {\displaystyle S={\frac {1}{1-P}}}
여기서 S는 프로그램의 속도 향상을, P는 병렬화 가능한 분수를 의미한다. 만약 프로그램의 10%가 순차적 부분이라면 우리는 몇 개의 프로세서를 추가하든 간에 10배 이상 속도를 높일 수가 없다. 이것이 실용적으로 병렬실행 유닛들을 추가할 수 있는 한계이다. 순차적 부분의 제한으로 작업을 더 이상 나눌 수 없게 될 때 응용 프로그램들은 그 이상 빠른 결과를 만들 수 없게 된다. 인월미신의 예를 인용하자면 “임산부가 아무리 많아도 아이를 낳는 데에는 9개월이 걸린다.”
구스타프슨의 법칙은 컴퓨터 공학의 또 다른 법칙인데, 암달의 법칙과는 밀접한 관계가 있다. 이 공식은 다음과 같다:
S ( P ) = P − α ( P − 1 ) {\displaystyle S(P)=P-\alpha (P-1)\,}
작업이A하고 B, 두 개의 독립적인 부분으로 되어있다고 가정하자, B는 전체 계산중에 대충 25%정도 시간을 차지한다. 프로그래머가 노력해서 이 부분을 5배 빠르게 만들었다. 그러나 이것은 전체 계산을 봤을 때에는 그냥 약간의 시간 감소에 불과하다. 반대로 A 부분을 2배로 만들면 B 부분을 빠르게 만드는 것보다 훨씬 더 효과가 있다 B를 5배 빠르게 만들었다고 해도 말이다.
P는 프로세서 수고 S는 속도 향상. α는 비 병렬 부분이다.[10] 암달의 법칙은 문제가 고정된 크기라는 것과 순차적 부분을 독립적인 프로세서들이라고 가정한다. 구스타프슨의 법칙은 그런 가정을 하지 않는다.
종속성 [ 편집 ]
병렬 알고리즘은 자료 종속성을 이해하는 것이 기본이 된다. 어떤 프로그램도 가장 길게 연결되어 있는 종속적(비독립) 계산보다 빠르게 실행될 수 없다. (크리티컬 패스라고도 함) 이는 계산들이 이전 계산에 종속되어 있으면 계산은 그 차례를 지켜야 한다는 것을 뜻한다. 그러나 대부분 알고리즘들은 그런 긴 종속의 연결을 포함하지 않는다. 일반적인 병렬에서는 비종속적인(독립적인) 계산을 실행할 가능성이 많다.
P i 와 P j 두 프로그램 조각들이 있다고 하자. 번스타인 상태[11]는 두 개의 독립적이고 병렬적으로 실행될 수 있을 때를 설명한다. I i 는 P i 의 입력 변수고 Oi는 출력 변수라고 하고 P j 도 같이 그렇다고 하자. 만약 다음을 만족시키면 P i 와 P j 는 독립적이다.
I j ∩ O i = ∅ , {\displaystyle I_{j}\cap O_{i}=\varnothing ,\,}
I i ∩ O j = ∅ , {\displaystyle I_{i}\cap O_{j}=\varnothing ,\,}
O i ∩ O j = ∅ . {\displaystyle O_{i}\cap O_{j}=\varnothing .\,}
첫 번째 상태의 위반은 종속성 흐름(flow dependency) 을 야기한다. 첫 번째 문(文)을 일치시키는 것은 두 번째 문이 작성한 결과를 만든다. 두 번째 상태는 대 종속성(anti-dependency) 상태를 의미한다. 첫 번째 문이 두 번째 문에 의해 필요가 된 변수를 덮어쓸 때 세 번째와 마지막 상태는 출력의 독립을 의미하게 된다. 두 개의 문들이 같은 장소에서 작성할 때 마지막 결과는 논리적으로 반드시 마지막으로 실행됐던 명령이 되어야 한다.[12]
아래 함수는 몇가지 종속성을 보여준다.
function Dep(a, b) c := a*b d := 2*c end function
Dep 함수 세 번째 줄은 두 번째 줄이 실행되기 전에는 실행될 수 없다. 왜냐하면 세 번째 줄은 두 번째줄의 결과에 의해서 실행되어야 하기 때문이다. 이것은 첫 번째 상태를 위반한 것이다. 즉, 종속성 흐름을 야기시킨다.
function NoDep(a, b) c := a*b d := 2*b e := a+b end function
이 예에서 명령어 간에 종속성은 없다, 따라서 이것들은 병렬로 처리할 수 있다.
번스타인의 상태는 다른 프로세스들 간에 메모리 공유를 허용하지 않는다. 그 때문에 서로 접근할 수 있게 만드는 방법이 필요할지도 모른다. 예를 들면 세마포어나 배리어나 아니면 다른 동기화 방법들 말이다.
경쟁상태, 상호배제, 동조화, 병렬감속 [ 편집 ]
이 부분의 본문은 상호배제, 동조화 및 이 부분의 본문은 경쟁상태 병렬감속 입니다.
병렬 프로그램에서 하위 작업들은 스레드라고 불리기도 한다. 몇몇 병렬 컴퓨터 구조는 작고 경량화된 버전의 스레드인 파이버를 이용하기도 하고 큰 버전으로는 프로세스 라고도 한다. 그러나 “스레드”는 일반적으로 하위 작업을 가리키는 단어로 해석된다. 스레드들은 자기들끼리 공유되는 몇몇 변수들을 갱신할 필요가 있다. 두 프로그램들 사이의 명령어들은 아마 끼워넣을 지도 모른다. 예를 들자면 아래 프로그램을 보자.
스레드 A 스레드 B 1A: 변수 V를 읽는다 1B: 변수 V를 읽는다 2A: 변수 V에 1 을 추가한다 2B: 변수 V에 1 을 추가한다 3A: 변수 V를 써넣는다 3B: 변수 V를 써넣는다
만약 명령어 1B가 1A과 3A 사이에서 실행되었다거나 1A가 1B나 3B 사이에서 실행되었다면 프로그램은 잘못된 정보를 만들게 된다. 이것을 바로 “경쟁 상태” 라고 한다. 프로그래머는 반드시 락을 사용해서 상호 배제를 해야 한다. 락은 한 개의 스레드가 락이 풀리기 전까지 변수를 제어하고 다른 스레드가 읽거나 쓰는 것을 막는 프로그래밍 언어 구조체다. 스레드는 락을 임계 구역 (몇몇 변수를 접근할 수 있게 허용해 주는 프로그램 구역) 내에서 자유롭게 실행할 수 있게 만든다. 그리고 다 끝나면 잠금을 해제한다. 따라서 올바른 프로그램 실행을 보장시켜준다. 위의 프로그램을 락을 사용해서 다시 작성하면 다음과 같다.
스레드 A 스레드 B 1A: 변수V를 잠금 1B: 변수V를 잠금 2A: 변수V를 읽음 2B: 변수V를 읽음 3A: 변수V에 1 추가 3B: 변수V에 1 추가 4A: 변수 V를 써넣는다 4B: 변수 V를 써넣는다 5A: 변수V를 잠금해제 5B: 변수V를 잠금해제
다른 스레드가 락 아웃( V가 다시 풀릴 때까지 진행하지 못하게 함)될 때 한 스레드는 변수V를 성공적으로 잠갔다. 이것은 프로그램이 정상적으로 실행되는 것을 보장한다. 잠금은 프로그램이 정상적으로 실행되는 것을 반드시 보장하지만 프로그램 속도를 느리게 할 수도 있다.
여러 개의 변수들을 비원자성을 사용해서 잠그면 교착 상태에 빠질 수도 있다. 원자성 락은 한꺼번에 여러 개의 변수를 잠근다. 만약 전부다 잠글수 없다면 아무것도 잠그지 않는다. 만약 두 개의 스레드들이 서로 같은 두 변수들을 비원자성을 사용해서 잠가야 한다면 한 개의 스레드는 하나를 잠글지도 모르고 그러면 두 번째 스레드는 두 번째 변수를 잠가야 한다. 이 경우 두 스레드 다 잠그지 않을것이다. 그리고 교착 상태로 이어진다.
많은 병렬 프로그램들이 하위작업으로 동기화를 필수로 한다. 배리어는 그 작업에 필요한데, 배리어는 원래 소프트웨어 락에 포함 (implement) 되어 사용된다. 한 클래스의 알고리즘들인 비차단 동기화 (lock-free와 wait-free 알고리즘)는 모두 락과 배리어의 사용을 피한다. 그러나 이 접근은 일반적으로 포함시키기 어렵고 정확한 디자인의 자료구조를 요구하게 된다.
모든 병렬화가 속도 향상을 시키진 않는다. 일반적으로 스레드들을 나누면 나눌수록 그 스레드들은 서로 의사소통 하는 데 시간을 더 증가시킨다. 결국 의사소통에 의한 문제를 해결하기 위해서 간접적인 시간소모를 해야하고 그 이상의 병렬화는(부하를 나누기 위해 스레드들을 나눌 때) 실행시간을 단축시키기는커녕 늘리게 된다. 이것을 병렬 감속이라고 한다.
잘게 나눔(fine-grained), 크게 나눔(coarse-grained), 처치 곤란 병렬(embarrassingly parallel) [ 편집 ]
응용 프로그램들은 가끔 얼마나 자주 하위 작업들이 동기화 되나 혹은 서로 통신해야 하냐에 따라서 분류가 나뉘기도 한다. 만약 병렬 응용 프로그램의 하위 작업들이 초당 통신을 많이 해야 하면 잘게 나뉘었다고 하고 초당 통신을 많이 안해도 되면 크게 나뉘었다고 한다. 그리고 만약 아주 가끔 통신하거나 아예 하지 않는다면 처치 곤란 병렬 이라고 한다. 처치 곤란 병렬 응용 프로그램은 가장 쉬운 병렬화로 알려져 있다.
일관성 모델들 [ 편집 ]
병렬 프로그래밍 언어와 병렬 컴퓨터들은 반드시 일관성 모델 (메모리 모델이라고도 불린다) 을 가지고 있어야 한다. 일관성 모델이란 컴퓨터 메모리 위에서 어떻게 연산들을 할 것인지와 어떻게 결과들을 만들것인지 규칙을 정의하는 것이다.
일관성 모델 중에는 레슬리 램포트의 순차 일관성 모델 (sequential consistency)이라는 것이 있다. 순차 일관성이란 병렬 프로그램 실행시 순차적 프로그램에서 나오는 결과와 똑같이 만드는 병렬 프로그램의 특성이다. 특히 만약에 “…어떤 실행에서의 결과가 모든 프로세서들의 연산이 어떤 순차적인 차례로 실행되거나 그 연산들의 각 독립적인 프로세서가 그 프로그램에 의해 보여주는 순서가 똑같다면” 프로그램은 순차적으로 모순이 없다.
소프트웨어 트랜잭셔널 메모리 (Software transactional memory (이하 STM))는 흔한 방식의 일관성 모델이다. STM은 데이터베이스 이론에서 원자 트랜잭션의 컨셉과 그것을 메모리 접근에 적용한걸 가져온 것이다.
수학적으로 이런 모델들은 여러가지 방법으로 표현될 수 있다. 1962년 칼 아담 페트리의 박사 논문으로 소 개된 페트리 넷은 일찍이 일관성 모델들을 체계적으로 분류하는걸 시도했던 사례다. 자료흐름 이론(dataflow theory) 은 그것을 기반으로 만들어졌고 자료흐름 구조 (Dataflow architectures)는 자료흐름 이론의 아이디어들을 물리적인 방법에 의해 만들어졌다. 1970년도 후반에 시작된 통신 시스템 미적분 (Calculus of Communicating System) 이나 소통 순차적 프로세스 (Communicating Sequential Processes)들 같은 프로세스 미적분 (process calculi)들이 구성요소들의 상호 통합이라는 대수적 논리에 의해서 개발될 수 있었다. 좀 더 최근에는 파이-미적분 같은 미적분 들이 동적 기하학에 대한 성능 향상을 위해 그 프로세스에 추가되었다. 램포트의 TLA+ 같은 논리들과 대각합 (traces)이나 액터 이벤트 다이어그램 (Actor event diagrams) 같은 수학적 모델들이 동시 행위 시스템의 행동을 설명하기 위해서 개발됐다.
플린의 분류학 [ 편집 ]
마이클 J. 플린은 가장 쉬운 컴퓨터와 프로그램 병렬(과 순차) 분류 시스템 중에 하나를 만들었다. 이것은 플린의 분류학(영어: Flynn’s taxonomy)이라고도 알려져 있다. 플린은 프로그램들과 컴퓨터들을 그것이 단일, 아니면 복수의 명령어 셋을 사용하느냐 아니냐 그리고 그 명령으로 단일 아니면 복수의 데이터 들을 연산하는지 여부에 따라서 분류를 했다.
플린의 분류학 단일
명령어 복수
명령어 단일
자료 SISD MISD 복수
자료 SIMD MIMD
SISD(단일명령-단일자료)는 완전히 순차적 프로그램과 같다. SIMD(단일명령-복수자료)는 반복되는 큰 자료에 대한 연산을 한다. SIMD는 일반적으로 신호처리 응용 프로그램들에서 실행된다. MISD(복수명령-단일자료)는 거의 쓰이지 않는 분류인데, 컴퓨터 구조들이 이것을 고민하고 있을 때(시스톨릭 배열같은 것들) 몇몇 응용 프로그램들이 이 분류를 구현시켜냈다. MIMD(복수명령-복수자료) 프로그램들은 제일 흔한 종류의 병렬 프로그램들이다.
데이비드 A. 패터슨과 존 L. 헤네시에 따르면 “몇 머신들은 이 카테고리를 여러 개 가질수도 있다, 당연히, 그런데 이 오래된 모델은 살아남는다. 왜냐하면 간단하고 이해하기 쉽기도 하고 처음 배울 때 좋다. 그리고 또 아마 어떤 조직을 넓게 이해하는 데 가장 많이 쓰였기 때문이다.”[13]
병렬처리의 종류 [ 편집 ]
비트수준 병렬처리 [ 편집 ]
초고밀도 집적회로(VLSI)의 등장으로 1970년대부터 1986년까지 컴퓨터 칩 제조 기술은 두 배의 워드 크기를 가진 컴퓨터 구조를 만들어 내서 속도 향상을 달성했다. 프로세서의 정보량은 사이클 단위의 조작이 가능했는데[14], 워드 크기를 늘리게 되면 워드 길이보다 큰 변수 위에서 실행되어야 했던 명령어 개수가 줄어들게 됐다. 예를 들자면, 8비트 프로세서는 반드시 16비트 정수형 두 개를 추가시켜야 한다. 프로세서는 반드시 먼저 8 하위 비트를 각 표준 추가 명령어를 정수형으로부터 추가시켜야 하고 그 다음에 하위에서 추가로 ADC 명령과 캐리를 사용하는 8 상위 비트를 추가시킨다. 8비트 프로세서는 한 개의 연산을 완료하기 위해서 2개의 명령어들을 필요로 하게 되고, 16비트 프로세서는 1개의 연산을 1개의 명령어로 끝낼수 있게 된다.
역사적으로 4비트 마이크로 프로세서들은 8비트, 16비트 그리고 32비트 마이크로 프로세서들에 의해서 교체됐다. 이 유행은 일반적으로 두 세대를 범용 컴퓨터 표준이 된32비트 프로세서의 등장과 함께 끝나는데, 최근 (2003-2004)엔 64비트 프로세서들을 가진x86-64 구조들이 등장하면서 표준이 된다.
명령어 수준 병렬 처리 [ 편집 ]
컴퓨터 프로그램은 명령어들의 흐름이 프로세서에 의해서 실행되는걸 바탕으로 한다. 이 명령어들은 재 순차와 결과의 변경 없이 한꺼번에 그룹단위로 병렬실행이 가능했다. 이것을 명령어 수준 병렬화라고도 한다. 이 명령어 수준 병렬화는 80년대 중반부터 90년대 중반까지 컴퓨터 구조를 주름잡았다.[15]
현대의 프로세서들은 다단계 명령어 파이프라인을 가졌다. 파이프라인에서 각 단계는 다른 행동을 하는 같은 단계의 명령어를 실행하는 프로세서와 일치시킨다. N 스테이지 파이프라인은 N 개 만큼의 다른 명령어들을 다른 완료된 단계에서 가질수 있다. 파이프라인된 프로세서의 정석은 RISC 프로세서다. (다섯 개의 단계 – 명령어 패치, 디코드, 실행, 메모리 접근, 다시 써넣기 (write back) 가 정석이다.) 펜티엄 4 프로세서는 31단계의 파이프라인을 가지고 있다.[16]
파이프라인을 할 때 명령어 수준 병렬화에서 몇 프로세서들은 한 개 이상의 명령어를 한 번에 만들수 있었다. 이것을 슈퍼스칼라 프로세서라고도 한다. 만약에 자료종속성만 없다면 명령어들은 한꺼번에 합쳐질수 있다. 스코어보딩 (Scoreboarding)과 토마줄로 알고리즘 (스코어보딩과 비슷하지만 레지스터 리네이밍 (Register renaming)을 사용한다) 이 두 가지가 가장 흔한 비 순차적 실행과 명령어 수준 병렬화 기술들이다.
자료 병렬 처리 [ 편집 ]
자료 병렬화는 프로그램 루프에 내재된 병렬화다. 프로그램 루프는 병렬로 처리된 다른 컴퓨팅 노드들의 자료를 분산시키는데 초점을 맞춘다. “루프를 병렬시키는 것은 가끔 비슷한 (완전 같을 필요는 없이) 순차 연산이나 큰 자료구조의 요소에서 실행되는 함수들을 실행시키게 한다.”[17] 많은 과학적, 공학적인 응용물들이 자료 병렬화를 보여준다.
루프가 가지고 있는 종속성은 이전 반복의 하나 이상의 결과에 종속된다. 루프의 종속성은 병렬화 루프에 의해 막힌다. 예를 들면 아래의 피보나치 수 의사코드를 보자.
PREV1 := 0 PREV2 := 1 do: CUR := PREV1 + PREV2 PREV1 := PREV2 PREV2 := CUR while (CUR < 10) 이 루프는 병렬화할 수 없다. 왜냐하면 CUR 이 각 루프를 도는 동안 그 자신(PREV2)과 PREV1에 종속되기 때문이다. 각 반복이 그 이전 결과에 종속되므로 병렬화할 수 없다. 문제의 크기가 크면 클수록 자료의 병렬화의 유효성은 일반적으로 커진다.[18] 작업 병렬처리 [ 편집 ] 작업 병렬화는 병렬 프로그램 “전체적으로 다른 계산들은 같거나 다른 자료들에서 실행될 수 있다.”[17] 라는 성질을 가지고 있다. 이것을 자료 병렬화와 상반시키면 계산이 같거나 다른 자료들에서 실행될 수 있다. 작업 병렬화는 일반적인 규모의 문제와 함께 측정되지 않는다.[18] 같이 보기 [ 편집 ] 참조 [ 편집 ]
병렬 컴퓨팅, 컴퓨터 속도에 혁신을 불러오다
ICT 병렬 컴퓨팅, 컴퓨터 속도에 혁신을 불러오다 과학기술정보통신부 ・ URL 복사 본문 기타 기능 공유하기 신고하기 4차 산업 혁명과 컴퓨팅 속도 향상의 필요성 4차 산업혁명은 인공지능이나 빅데이터와 같은 정보통신기술을 기반하여 급속도로 이루어지고 있습니다. 그리고 AI와 빅데이터의 공통점은 방대한 데이터의 빠른 처리를 요구한다는 것입니다. 따라서 소프트웨어적인 기술 개발만큼 하드웨어적으로 컴퓨팅 속도를 높이는 것도 필요합니다. ⓒ 인천광역시 특히 인공지능의 경우 컴퓨터의 처리 속도가 성능을 좌지우지하는 주요한 요소로 작용합니다. 당연한 말이지만, 같은 시간 안에 더 많은 데이터를 학습하는 인공지능이 다른 인공지능보다 뛰어난 성능을 보입니다. 인간처럼 학습하는 인공지능과 뉴럴 네트워크의 개념은 이전에도 존재했습니다. 인공지능 붐이 시작될 수 있었던 이유는 GPU 가속화의 등장으로 컴퓨터의 처리 속도가 이전보다 월등히 개선되었기 때문입니다. 1990년대에도 학술적인 개념으로 인간의 뇌를 모방한 뉴럴 네트워크가 유행하였습니다. 그러나 컴퓨터 계산 속도의 한계로 빛을 발하지는 못하였습니다. 병렬 컴퓨팅이란? 병렬 컴퓨팅이란 하나의 문제를 해결하기 위한 계산을 여러 개로 나누어 각각을 다수의 처리 장치 (프로세서)에 맡기는 계산 방식입니다. 프로그램의 계산량이 클 때, 프로그램의 실행 시간을 줄이기 위하여 이용됩니다. 1차선 시골길과 8차선 고속도로에서 차량의 흐름을 상상하면 쉽게 이해할 수 있습니다. 많은 차가 빠르게 지나가야 할 때는 도로에 여러 개의 차선을 만들면 효과적이며, 이러한 개념이 바로 병렬 컴퓨팅입니다. ⓒOmniSci 최근에 출시되는 컴퓨터들은 물리적, 비용적인 한계로 대부분 여러 개의 프로세서가 탑재되는 멀티코어를 지닙니다. 하나의 뛰어난 프로세서를 개발하기 위해서는 집적 기술의 향상이 필요합니다. 그러나 이미 기술 향상 폭이 완만해진 상태이므로 일반적인 프로세서를 몇 개 묶어 사용하는 것이 유리합니다. 병렬 컴퓨팅을 이용하면 이전에는 해결할 엄두조차 내지 못했던 문제들을 시도해볼 수 있습니다. 연산을 나누어 수행하는 병렬 컴퓨팅은 하나의 컴퓨터에만 국한되는 개념이 아니기 때문이죠. 다수의 컴퓨터를 네트워크로 연결하면 방대한 계산이 가능해집니다. 각자의 방 안의 컴퓨터에 그치지 않고 전 세계의 계산 자원을 활용할 수 있는 것입니다. KISTI 국가슈퍼컴퓨팅센터 홈페이지 ⓒ최지민 우리나라에서도 KISTI 국가슈퍼컴퓨팅센터에서 계산 자원을 빌려주는 서비스가 존재합니다. KISTI의 슈퍼컴퓨터 5호기인 누리온은 8,305개의 CPU 노드를 지니며 CPU 당 68개의 코어로 이루어져 있습니다. 따라서 활용할 수 있는 전체 코어의 개수는 564,740에 달하죠. 가정용 컴퓨터의 코어 수가 4개 또는 8개를 점을 고려할 때, 단순 비례로만 계산해도 PC에서는 상상할 수 없는 속도로 계산을 처리합니다. 이처럼 병렬 컴퓨팅은 슈퍼컴퓨터의 대표적인 구조 방식으로 컴퓨팅 속도를 기하급수적으로 증가시킵니다. 병렬 컴퓨팅의 이용 분야 1- 수치해석 병렬 컴퓨팅이 이용되며 우리 삶과 밀접한 대표적인 분야로는 기상 예측이 있습니다. 대한민국의 기상청은 슈퍼컴퓨터를 운영하여 날씨, 자연재해 등을 계산합니다. 기상청은 전 세계 곳곳의 관측소와 위성에서 관측 데이터들을 수집한 후에 이를 수치예보모델에 입력합니다. 그러면 슈퍼컴퓨터가 계산 결과를 내놓고 기상청 직원들이 결과를 검토하여 예보가 이루어집니다. 기상청 수치예보모델 ⓒ기상청 기상청이 수집하는 데이터는 그 양만 하더라도 거대합니다. 그러므로 우리가 중고등학교 교육과정에서 배웠던 하나의 답이 존재하는 수학 문제와는 푸는 방식이 다르죠. 기상 예측에 사용하는 수치예보모델은 일반적으로 유한 차분의 수치 해석적 풀이에 기반합니다. 연속적인 대기 데이터를 일정한 간격으로 잘라 큐브 형태로 만들고 이를 토대로 방정식을 푸는 것입니다. 격자점의 간격이 좁을수록 실제 대기를 잘 나타내는 모델이므로 컴퓨터의 계산 속도가 모델의 정확도에 큰 영향을 줍니다. 병렬 컴퓨팅은 기상뿐만 아니라 유체와 고체의 움직임 등 다양한 수치해석 문제들에 널리 활용됩니다. 아래 그림은 심혈관 내부 혈액의 유동을 수치 해석적으로 분석한 결과를 보여줍니다. 심혈관 내부 혈액 유동 ⓒA CFD Benchmark Study 병렬 컴퓨팅의 이용 분야 2 – 인공지능 딥러닝 아키텍처 ⓒWikimedia commons 병렬 컴퓨팅은 인공지능, 그중에서도 딥러닝의 발전에 큰 역할을 수행해왔습니다. 딥러닝은 인공지능의 한 분야로 생물체의 뇌와 비슷한 원리로 구성되어 있습니다. 뉴럴 네트워크가 뇌의 뉴런과 유사한 역할로 신경망의 각 층을 통과하면서 데이터를 활용한 학습을 진행하는 방식입니다. 그러나 단순한 신경망조차 컴퓨터를 학습시키기 위해서는 엄청난 양의 연산을 요구합니다. 그래서 2000년대 초반까지만 해도 딥러닝은 개념만 존재하는 상태였습니다. 딥러닝이 지금처럼 전 세계적 트랜드로 부상하게 된 데에는 병렬 연산에 최적화된 GPU의 등장이 있었습니다. CPU와 GPU 차이 ⓒWikimedia commons GPU는 엔비디아에서 1990년대 말에 처음 개발된 컴퓨터 연산 처리 장치입니다. 이전까지 컴퓨터의 뇌로 이용되어 온 중앙처리장치(CPU)와 GPU는 확연한 차이가 존재합니다. GPU를 부르는 또 다른 단어는 그래픽 처리 장치입니다. 각각의 이름에서도 알 수 있듯이, CPU와 GPU는 서로 추구하는 바가 다릅니다. CPU는 복잡한 연산을 처리하기 위해 개발되었지만, GPU는 쉬운 계산을 대량으로 수행하는 장점이 있습니다. CPU가 한 명의 뛰어난 고급 인력이라면 GPU는 값싼 대량의 인력을 고용한 그룹과 같습니다. 인공지능의 학습은 많은 양의 데이터를 기반으로 단순한 계산을 반복적으로 수행하여 이루어집니다. 그러므로 GPU가 추구하는 목적과 잘 맞아떨어지는 것이죠. 이를 미리 알아본 엔비디아는 2010년대부터 인공지능 가속기로 활용될 GPU를 선보였습니다. GPU는 코어의 개수가 한정적이고 복잡한 연산에 특화된 CPU와 비교할 때 다중 연산에 유리합니다. 대량의 계산을 수행할 경우 GPU를 이용하는 것이 인프라 구축 비용과 소비되는 전력이 CPU보다 훨씬 적기 때문입니다. 현재 GPU를 활용한 딥러닝 기술은 자율주행, 신약 개발, 로보틱스 등의 다양한 분야에서 꾸준히 발전하고 있습니다. 앞으로 더욱 중요해질 병렬 컴퓨팅 우리는 현재 4차 산업혁명의 한 가운데에 서 있습니다. 매일 우리 삶을 총체적으로 바꿀 새로운 기술이 등장하고 인공지능은 이미 일상 가운데 상당 부분 영향을 주는 상황입니다. 그리고 전 세계에서는 인공지능과 빅데이터 분야를 선점하기 위해 고군분투 중입니다. 우리나라는 뛰어난 반도체 기술을 보유한 국가이며 소프트웨어 분야에서도 세계적인 연구 실적을 내고 있습니다. 그러나 아직 국내에는 엔비디아나 인텔, AMD처럼 처리 장치 개발에서 앞선 기업은 없습니다. 4차 산업혁명이 표면적으로는 디지털 기술에 의존하고 있지만, 이를 뒷받침하는 하드웨어 기술이 있어야만 가능합니다. 한국이 디지털 뉴딜을 성공적으로 이행하고 있는 만큼, 이러한 사실을 잊지 않고 트렌드를 넘어선 투자를 진행하길 바랍니다. 인쇄
병렬 컴퓨팅(Parallel Computing) 개념
※ 비전문가가 공부하며 정리한 자료라 잘못된 정보가 있음
◐ 병렬 컴퓨팅은 무엇인가
직렬 컴퓨팅(Serial Computing)
일반적으로 소프트웨어는 순차적(=직렬) 계산으로 쓰여진다.
문제는 명령의 개별 시리즈로 나눠진다.
명령들(instructions)을 순차적으로 하나를 처리한 후 그 다음을 처리한다.
하나의 프로세서에서 명령을 처리된다.
언제나 하나의 명령만 처리한다.
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
병렬 컴퓨팅(Parallel Computing)
가장 간단한 의미로, 병렬 컴퓨팅은 계산 문제를 해결하기 위한 여러 대의 컴퓨터 자원을 동시에 사용하는 것이다.
하나의 문제는 동시에 해결할 수 있는 개별 문제들로 나눠진다.
각각의 문제는 명령의 시리즈로 더 나눠진다.
각각의 문제 속 명령들은 다른 프로세서에서 동시에 처리된다.
전반적인 제어/조정 메커니즘(대표적으로 Open Grid Scheduler)이 사용된다.
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
병렬 컴퓨팅을 위한 계산 문제 조건 동시에 해결할 수 있는 별개의 작업으로 쪼개질 수 있어야 한다. 여러 프로그램의 명령을 언제든지 실행할 수 있어야 한다. 단일 계산 자원보다 여러 계산 자원을 사용하여 더 짧은 시간에 해결할 수 있어야 한다.
컴퓨터 자원은 일반적으로 여러 개의 프로세서나 코어를 가진 단일 컴퓨터이다. 네트워크에 연결된 컴퓨터의 임의 개수이다.
병렬 컴퓨터(Parallel Computer)
오늘날 거의 모든 독립 실행형 컴퓨터는 하드웨어 관점에서 병렬이다.
다중 기능 단위[multiple functional units]
(L1 캐시, L2 캐시, branch, prefetch, 디코드, 부동 소수점, GPU(그래픽 처리), 정수 등)\ 다중 실행 단위/코어[multiple execution units/cores] 다중 하드웨어 스레드[multiple hardware threads]
Source : IBM BG/Q Compute Chip with 18 cores (PU) and 16 L2 Cache units (L2)
네트워크는 여러 독립 실행형 컴퓨터(노드[node])를 연결하여 더 큰 병렬 컴퓨터 클러스터를 만든다.
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
예를 들어, 아래 개략도는 일반적인 LLNL 병렬 컴퓨터 클러스터를 보여준다.
각 계산 노드[compute node]는 그 자체로 다중 프로세서 병렬 컴퓨터이다. 여러 계산 노드가 Infiniband 네트워크로 연결된다. 특수 용도 노드, 멀티 프로세서 또한 다른 용도로 사용된다.
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
세계 대부분의 대형 병렬 컴퓨터(= 슈퍼 컴퓨터)는 소수의 잘 알려진 공급업체가 생산한 하드웨어 클러스터이다.
(2021년 6월 기준) 레노버(Lenovo)가 36.8%로 압도적인 시장 점유율 을 보이고 있다. 이어서 인스퍼(Inspur), 휴렛팩커드(Hewlett Packard Enterprise; HPE), 중커수광(Sugon) 아토스(Atos) 순이다. 무서운 점은 레노버, 인스퍼, 중커수광은 중국 회사로 총 점유율이 50%를 넘는다 는 것… 참고로 HPE는 미국 회사, 아토스는 프랑스 회사이다.
Source : TOP500.org (2021년 6월 기준)
◐ 병렬 컴퓨팅을 사용는 이유
실제 세상은 아주 복잡하다
자연계에서는 많이 복잡하고 상호 연관된 사건들이 동시에, 그러나 시간순으로 일어나고 있다.
직렬 컴퓨팅에 비해 병렬 컴퓨팅은 복잡한 현실 세계의 현상을 모델링하고, 시뮬레이션하고, 이해하는 데 훨씬 적합하다.
아래는 병렬 컴퓨팅을 활용 예시 은하 형성, 행성 운동, 기후 변화 시뮬레이션
Source : Lawrence Livermore National Laboratory / Livermore Computing Center 혼잡 시간 교통 체증, 판구조, 날씨 예측
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
병렬 프로그래밍을 사용하는 가장 큰 이유
1. 시간 또는 돈을 절약한다.
이론적으로 작업에 더 많은 리소스를 투입하면 완료 시간이 단축되고 잠재적인 비용 절감 효과가 있다.
병렬 컴퓨터는 값싸고 일반적인 부품으로 만들 수 있다.
2. 더 크고 / 더 많은 복잡한 문제들을 해결한다.
많은 문제들은 아주 크고 복잡해서 직렬 프로그램으로 해결하는 것은, 특히 제한된 컴퓨터 메모리를 감안할 때, 비현실적이거나 불가능하다.
예 : 페타플롭(petaflops) 및 페타바이트(petabytes) 규모의 계산 자원이 필요한 ” Grand Challenge Probelms ”
” 예 : 매초 수백만 건의 처리(transactions)를 처리하는 웹 검색 엔진/데이터베이스
3. 동시 실행(concurrency)를 제공한다.
단일 계산 자원은 한 번에 한 가지 작업만 수행할 수 있지만, 다중 계산 자원은 동시에 여러 가지 작업을 수행할 수 있다.
예 : Collaborative Networks는 전세계 사람들이 “가상으로” 만나 작업을 수행할 수 있는 글로벌 장소를 제공한다.
4. 멀리 떨어진(non-local) 자원들을 활용한다.
로컬 계산 자원이 양이 부족하거나 성능이 충분하지 않은 경우 광역 네트워크 또는 인터넷 상의 계산 자원을 사용한다.
예 : (2018년 5월 기준) SETI@Home 은 전세계 거의 모든 국가에서 170만 명 이상의 사용자를 보유하고 있다.
5. 병렬로 구성된 하드웨어를 더 잘 사용한다.
현대의 컴퓨터, 심지어 노트북도 프로세서/코어가 여러 개인 컴퓨터의 구성(architecture)에서 병렬로 존재한다.
병렬 소프트웨어는 특히 다중 코어, 스레드 등이 있는 병렬 하드웨어를 대상으로 한다.
대부분의 경우, 현대 컴퓨터에서 실행되는 직렬 프로그램은 잠재적인 컴퓨터 성능을 “낭비”한다.
향후 전망
과거 20년이 넘는 시간동안, 훨씬 더 빠른 네트워크, 분산 시스템, 멀티 프로세서 컴퓨터 구성 (특히 데스크탑 수준)에서 나타난 추세는 병렬화가 컴퓨팅의 미래 임을 분명하게 보여준다.
임을 분명하게 보여준다. 같은 기간 동안 슈퍼컴퓨터 성능은 50만 배 이상 증가 했으며, 지금은 끝이 보이지 않는다.
했으며, 지금은 끝이 보이지 않는다. Exascale 컴퓨팅 경쟁은 이미 진행 중이다. 우리는 Exascale 시대에 접어들고 있다! Exflop = 초당 $10^{18}$회 계산 US DOE Exascale Computing Project
Source : TOP500.org
◐ 병렬 컴퓨팅은 누가 쓰나
과학(Science)과 공학(Engineering)
역사적으로 병렬 컴퓨팅은 “the high end of computing”으로 여겨져 왔으며, 과학과 공학의 많은 분야에서 어려운 문제를 모델링하는데 사용되어 왔다.
대기(Atmosphere), 지구(Earth), 환경(Environment)
물리학(Physics) – 응용(applied), 핵(nuclear), 입자(particle), 응집 물질(condensed matter), 고압(high pressure), 핵융합(fusion), 광자학(photonics)
생명과학(Bioscience), 생명공학(Biotechnology), 유전학(Genetics)
화학(Chemistry), 분자과학(Molecular Science)
지질학(Geology), 지진학(Seismology)
기계 공학(Mechanical Engineering) – 인공기관(prosthetics)부터 우주선(spacecraft)까지
전자 공학(Electrical Engineering), 회로 설계(Circuit Design), 초소형 전자공학(microelectronics)
컴퓨터 과학(Computer Science), 수학(Mathematics)
방위 산업(Defense), 무기(Weapons)
산업(Industiral)과 상업(Commercial)
오늘날 상용 애플리케이션은 더 빠른 컴퓨터 개발에 더 큰 원동력을 제공한다. 이러한 애플리케이션은 많은 양의 데이터를 정교한 방식으로 처리해야 한다. 아래는 예시 분야이다.
“빅데이터(Big Data)”, 데이터베이스(database), 데이터 마이닝(data mining)
인공지능(Artificial Intelligence; AI)
석유 탐사(Oil exploration)
웹 검색 엔젠(Web search engines), 웹 기반 비즈니스 서비스(web based business services)
의료 영상 및 진단(Medical imaging and diagnosis)
제약 설계(Pharmaceutical design)
재무 및 경제 모델링(Financial and economic modeling)
국가 및 다국적 기업의 경영(Management of national and multi-national corporations)
(특히 엔터테인먼트 산업에서) 고급 그래픽 및 가상 현실(Advanced graphics and virtual reality, particularly in the entertainment industry)
네트워크화된 비디오 및 멀티미디어 기술(Networked video and multi-media technologies)
협업 작업 환경(Collaborative work environments)
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
광범위한 응용
병렬 컴퓨팅은 현재 전세계에 걸쳐 아주 다양하게 응용되어 광범위하게 사용되고 있다.
(2021년 6월 기준) 역시나 연구 분야에 가장 많이 쓰이고 있다.
Source : TOP500.org
◐ 참고문헌(References)
Lawrence Livermore National Laboratory / Livermore Computing Center – Introduction to Parallel Computing Tutorial
삼성SDS 스토리 – 병렬컴퓨팅
위키피디아 – Parallel Computing
OMNISCI – Parallel Computing
GeeksforGeeks – Introduction to Parallel Computing
병렬 컴퓨팅 소개 (CPU, GPU, 발전 과정)
728×90
이 글은 학부 수업을 들으면서 개인적으로 정리한 글입니다. 잘못된 내용이 있다면 댓글로 말씀 부탁드립니다!
CPU와 GPU
중앙 처리 장치, CPU(Central Processing Unit)는 컴퓨터가 계산하는데 있어 가장 핵심적인 부품으로 보통 1개의 독립된 칩 형태.
그래픽스 처리 장치, GPU(Graphics Processing Unit)는 보통 카드 형태.
이 전에는 CPU가 주로 계산을 담당, GPU가 화면을 출력하는 용도로 쓰였던 것에 반해, 최근에는 GPU 즉 그래픽 카드를 계산에 사용하는 추세다.
간단하게 차이점을 보자면
CPU와 달리 GPU는 코어가 많음.
CPU는 복잡한 계산을 빠르게 할 수 있지만, 모두 직렬로 처리 .
. GPU는 간단한 계산을 빠르게 할 수 있고, 많은 연산을 병렬로 동시에 처리 가능.
병렬 컴퓨팅의 발전 과정
2003년 이전
일반적인 PC급에서는 2003년 이전까지 Single Core CPU를 주로 사용. (하나의 CPU가 단일 계산만 하는 방식으로 많이 사용)
컴퓨터 구조의 관점에서 본다면 지금의 PC까지 모두 폰 노이만(Von Neumann) 구조를 따르고 있음.
기본적인 폰 노이만 구조의 구조도
이 때 Single Core를 사용했다 함은, CPU 내부에서 계산을 하는 Unit이 1개 밖에 없었다는 뜻.
( 위의 구조도에서 보면 산술연산장치(ALU, Arithmetic Logic Unit)가 하나 밖에 없음. )
2003년 이후
2003년 이후에는 CPU든 GPU든 병렬 컴퓨팅(Parallel Computing)이 PC 시장에 본격적으로 진입했음.
CPU 시장에는 Dual Core CPU가 나옴.
위의 구조도와 달리 하나의 칩 안에 서로 다른 CU, ALU가 두개씩 들어감.
이후 점점 CPU에 코어가 점점 늘어남. (Multi Core CPU, 2 ~ 32+ Cores)
반면 GPU 같은 경우 대용량 데이터를 다뤄야되는 일이 아주 많았기 때문에 처음부터 수천 개의 Core를 사용.
(Many Core GPU, 1024~8192+ Cores)
과거에는 슈퍼 컴퓨터만 병렬 컴퓨팅을 했다면, 현재는 일반적인 PC를 넘어서 스마트폰을 포함한 대부분의 컴퓨팅 기계들이 병렬 컴퓨팅을 지원.
이제 우리가 사용하고 있는 하드웨어는 병렬 컴퓨팅을 지원(Parallel Device)하기에 소프트웨어 또한 순차 처리(Sequential Processing) 방식이 아닌 병렬 처리를 할 수 있도록 개발하는 것이 좋음.
CPU와 GPU의 차이 요약
왼쪽이 Multi Core CPU 오른쪽이 Many Core GPU
Multi Core CPU
CPU 발전의 기본 목표는 반응 시간(Latency)를 단축하는 것. 즉, 어떤 입력에 대해 반응이 빠르기를 원함. 이러한 발전은 순차 처리에 적합함. 고성능의 Core가 여러개 있는 쪽으로 발전.
Many Core GPU
GPU 발전의 기본 목표는 처리량(Throughput) 확대로 대규모의 병렬 처리에 적합. 성능이 아닌 Core의 수가 많은 쪽으로 발전. ( ALU가 1000개 이상. 그림에서도 확인 가능. )
컴퓨터에서 하는 연산 중 많은 부분이 아주 간단한 연산이기 때문에 최종적으로 단위시간당 처리량이 많아짐. (복잡한 연산에 사용하면 CPU 연산보다 느려질 수 있음.)
요약
반응시간만 놓고 본다면 CPU가 빠르지만, 대용량의 처리는 GPU 쪽이 빠름.
예시로 복잡한 팩토리얼 계산식을 2개 계산하는 경우는 CPU, 간단한 덧셈 연산 1000개를 처리하는 경우는 GPU를 활용하는 것이 좋음.
대규모 병렬 처리를 위해서 필요한 것
아래의 요소를 갖춘 모델(시스템)이 필요함.
처리가능한 기기 => 보통 그래픽 카드를 의미
프로그래밍 언어 => 병렬 처리를 다룰 수 있는 언어가 필요
컴파일러 => 언어에 따른 컴파일러가 필요
라이브러리
모델 중에는 대표적으로 OpenMP, CUDA, OpenCL 등이 있음.
[참고자료] [1] https://m.blog.naver.com/with_msip/221981730449 [2] https://buttercoconut.xyz/157/ [3] https://ko.wikiqube.net/wiki/Parallel_programming_model#Classification_of_parallel_programming_models728×90
중앙처리장치(CPU) – 5 (병렬 컴퓨팅, 병렬 컴퓨터)
728×90
반응형
Goal
병렬 컴퓨팅이 필요한 이유에 대해 설명할 수 있다.
병렬 컴퓨터의 예시를 들 수 있다.
병렬 컴퓨팅이란?
병렬 컴퓨팅이란 여러 개의 연산을 동시에 병렬적으로 처리하는 방법을 의미한다.
병렬 컴퓨팅
예를 들어, 두 개의 연산이 서로 의존성이 없다면 한 개 연산이 완료될 때까지 나머지 연산이 기다리지 않고 동시에 수행하는 것이 바로 병렬컴퓨팅의 기본 개념이다.
여기서 동시에 수행할 수 있는 대상을 찾는 것이 병렬처리의 가장 시작점이라고 할 수 있으며, 이러한 일련의 과정을 병렬화라고 한다.
병렬 처리 분류
비트 레벨 병렬 처리(bit-level parallelism) : 컴퓨터 워드 크기에 따른 처리 ex) 32 / 64 비트
명령어 레벨 병렬 처리(instruction-level parallelism) : 명령어 순서를 재배열하고 그룹으로 묶어 병렬로 실행 ex) 파이프라인, 슈퍼스칼라, VLIW
데이터 병렬 처리(data parallelism) : 데이터를 병렬로 처리하는 여러 노드에 데이터를 분산하는 데 중점 ex) 벡터 프로세서, SIMD
작업 병렬 처리(task parallelism) : 다중프로세서를 이용하여 작업을 분산하는데 중점 ex) 다중 프로세서, MIMD
병렬 컴퓨터란? (parrallel computer)
병렬컴퓨터란 다수의 프로세서들이 수많은 연산을 동시에 병렬처리할 수 있는 형태로 조직된 컴퓨터를 의미
싱글 프로세서만으로는 한계가 있어 다수의 프로세서를 사용하는 방법이 고안됨
병렬 컴퓨터 결합 구조에 따른 분류
약결합(Loosely Coupled) 시스템
각 프로세서마다 독립된 메모리를 가진 시스템
각 시스템마다 독자적인 운영체제
네트워크를 통해 상호 연결
ex 클러스터 컴퓨팅 : 여려 대의 컴퓨터가 LAN으로 연결되어 하나의 컴퓨터처럼 동작하는 기술 그리드 컴퓨팅 : WAN으로 연결된 이기종(heterogeneous) 컴퓨들의 집합 (분산 컴퓨팅)
강결합(Tightly Coupled)시스템
다수의 프로세서가 메모리를 공유하는 시스템
하나의 운영체제가 모든 프로세서를 관리하는 구조
프로세서 간의 통신은 공유 메모리를 통해서 이루어짐
하나의 메모리를 사용하므로 CPU 간의 결합력이 강함
공유 메모리를 차지하려는 프로세서 간의 경쟁을 최소화해야 함
ex) 멀티코어 프로세서
강결합 시스템 예시
플린의 분류법(Flynn’s taxonomy)
컴퓨터를 명령어(instruction)와 자료의 흐름(data stream)에 따라 분류하는 방법
최신 설계되는 컴퓨터는 SIMD, MIMD 병렬 컴퓨터 구조를 채택하고 있다.
(1) SISD(Single Instruction Single Data stream) : 단일 명령 + 단일 데이터
하나의 명령에 하나의 데이터가 순차적으로 처리되는 전통적인 폰 노이만 구조를 따른다.
일반적인 싱글코어가 이 분류에 속한다.
성능을 향상시키기 위해 파이프 라이닝이나 슈퍼스칼라 등의 명령어 수준의 병렬컴퓨팅 기법을 사용
SISD
(2) SIMD(Single Instruction Multiple Data stream) : 단일 명령 + 복수 데이터
비슷한 패턴을 갖는 데이터들 처리할 때 효율적 인 구조
인 구조 복수의 처리장치와 프로세서를 사용하여 하나의 명령어로 여러 비슷한 유형의 데이터를 처리
ex) 벡터 프로세서 나 그래픽 처리장치(GPU) 가 이에 해당한다.
SIMD
(3) MISD(Multiple Instruction Single Data stream) : 복수 명령 + 단일 데이터
여러개의 명령어로 하나의 데이터를 처리하는 구조
실용적인 측면에서 사용하기 힘든 구조이다.
MISD
(4) MIMD(Multiple Instruction Mutilple Data stream) : 복수 명령 : 복수 명령 + 복수 데이터
여러개의 데이터를 여러개의 명령어로 처리
복수의 처리 장치와 프로세서 사용
서로 다른 명령과 데이터가 독립적으로 실행된다. ex) 분산처리 시스템
성능 향상을 위해서 각 처리 장치에 일을 균등하게 배분하고, 장치간 통신 부담을 감소 시켜야 한다.
병렬처리를 위해 사용하는 컴파일러 기술도 큰 영향을 미친다.
MIMD
벡터 프로세서란?
벡터 프로세서(vector processor)는 복수의 연산장치를 병렬로 연결해 큰 규모의 행렬이나 배열 연산을 고속으로 한꺼번에 처리할 수 있는 장치이다.
그래픽 데이터나 수치해석 데이터를 빠른 속도로 처리하기 위한 용도로 자주 사용된다. ex) DirectX12에서 행렬 계산이나 벡터 계산을 할 때 사용됨
SIMD 구조이다.
*스칼라 프로세서(scala processor) : SISD 구조로 벡터 프로세서와 대조되는 개념이다.
References
병렬 컴퓨팅(1~6편)
병렬 컴퓨터
728×90
반응형
병렬프로그램 환경 > 슈퍼컴퓨터 > 국가기상슈퍼컴퓨터센터 > 소속·산하기관 소개 > 기상청소개 > 기상청
공유 메모리 시스템에서 메시지 패싱을 이용한 병렬화가 가능하고, 분산 메모리 시스템에서도 변수 공유를 통한 통신(DSM : Distributed Shared Memory)을 지원하기도 하지만 병렬화의 목적이 프로그램의 실행 시간을 최대한 단축시키는데 있는한 최적화된 프로그램의 작성을 위해 사용자는 시스템 아키텍처에 따라 다른 프로그래밍 모 델을 선택해야 한다.
공유 메모리 병렬 프로그래밍 모델
: 하나의 프로세스에 속한 스레드들은 시스템 자원을 공유 하므로 다중 스레드 프로그램이 공유 메모리 아키텍처에 적합하다. 다중 스레드 병렬 프로그램의 작성 방식은 POSIX 스레드 라이브러리(pthreads)를 직접 호출하여 사용자가 스레드 생성과 작업할당을 제어하거나 소스 프로그램에 컴파일러가 지원하는 지시어를 삽입하여 컴파일러가 다중 스레드 실행 프로그램을 생성하도록 하는(OpenMP)방식이 대표적이다. 이 중 스레드 제어에 관한 사용자의 부담이 적은 후자(OpenMP)의 방식이 널리 사용되고 있다. OpenMP는 공유메모리 환경에서 다중 스레드(multi-thread)병렬 프로그램을 작성하기 위한 응용 프로그램 인터페이스(API : Application Program Interface)로 프로그램의 병렬 실행을 위해 Fork-Join 모델을 사용한다.
메시지 패싱 병렬 프로그래밍 모델
: 병렬 시스템을 구성하는 노드들이 주소 공간을 공유하고 있지 않다면 각 프로세스는 다른 프로세스들이 갱신하는 데이터에 접근하기 위해 서로 연결된 네트워크를 통하여 데이터를 주고 받아야 한다. 메시지 패싱 방식의 병렬 프로그래밍 도구로는 HPF(High Performance Fortran), PVM(Parallel Virtual Machine), MPI(Message Passing interface)등이 있으며, 이들 중 MPI가 표준으로 자리 잡았다.
하이브리드 병렬 프로그래밍 모델
: 한 프로그램 내에서 공유 메모리 모델과 메시지 패싱 모델을 모두 이용하여 프로그래밍 하는 것을 말한다. 이러한 하이브리드 프로그래밍 모델은 분산-공유 메모리 아키텍처에 적합하다. SMP로 구성된 각 노드마다 다중 스레드를 가지는 단일 프로세스를 생성하여 프로그램을 수행하는데 노드 내의 프로세서에 할당된 스레드는 메모리 공유를 통해 통신하고 서로 다른 노드 간의 프로세스는 메시지 패싱을 통하여 통신하게 된다. 같은 노드 내의 프로세스들 사이의 통신은 서로 다른 노드 간의 통신과 비교해 통신 지연시간(latency)과 대역폭(bandwidth)등이 최적화되어 있다. 따라서 분산-공유 메모리 아키텍처를 가지는 시스템 상에서의 메시지 패싱을 이용한 병렬화 수행은 일반적인 분산 메모리 시스템에서 보다 빠르게 수행된다.
SPMD와 MPMD
: 대부분의 병렬 프로그램은 SPMD(Single Program Multiple Data) 형태를 가진다. SPMD 형태 의 병렬프로그램이란 병렬 프로그램을 수행하는 모든 프로세스 또는 스레드가 동일한 하나의 프로그램을 실행하면서 프로그램 내의 함수를 서로 다른 데이터를 가지는 병렬로 실행하거나(도메인 분해) 각각 서로 다른 함수를 맡아 병렬로 실행하는 것을 (기능적 분해) 말한다. MPMD(Multiple Program Multiple Data) 형태의 병렬 프로그램은 여러 개의 프로그램으로 구성된다. 각 프로세서 또는 스레드가 각각 서로 다른 프로그램을 실행시키면서 프로그램이 필요로 하는 데이터를 통신을 통해 주고 받게 된다.
키워드에 대한 정보 병렬 컴퓨팅
다음은 Bing에서 병렬 컴퓨팅 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 프로세스는 뭐고 스레드는 뭔가요?
- 프로그래밍
- programming
- process
- thread
- multithreading
- 스레드
- 쓰레드
- 프로세스
- 멀티쓰레딩
- 멀티스레딩
- 동시성
- 병렬성
- synchronized
- 멀티태스킹
프로세스는 #뭐고 #스레드는 #뭔가요?
YouTube에서 병렬 컴퓨팅 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 프로세스는 뭐고 스레드는 뭔가요? | 병렬 컴퓨팅, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.