병렬프로그래밍(1)
multithread와 multiprocess의 사용하고, OpenMP를 이용하여 실습을 하는 것을 배워보겠다.
N개의 코어가를 가진 CPU
- 싱글코어 CPU보다 처리 속도가 N배 증가하는 것이 아닌, 한 번에 처리할 수 있는 양이 N배가 증가함
코어를 여래 개 사용하면 속도도 물론 빨라지지만, 속도는 어느정도 한계가 있고, 데이터 양을 N배 처리할 수 있게 증가한다.
공짜 점심의 시대는 끝났다
- 2004년까지 CPU는 싱글 코어로, 그저 비싼 것을 사용 당연히 좋은 성능을 내는 시대가 있었다.
하지만, 현재는 프로그래머가 직접 코딩을 하여 스레드를 사용하는 시대가 온 것이다.
무어의 법칙
- CPU 내의 트랜지스터(전류,전압 조절 장치) 수는 약 18개월에서 24개월 마다 2배씩 증가한다는 법칙
CPU 내의 트랜지스터의 수가 증가하면서 더 많은 명령어와 캐시를 탑재할 수 있게 되었다.
이때 캐시란, 하디 디스크에 저장된 정보가 메모리와 캐시를 거쳐 레지스터에 올라와 CPU에서 연산을수행하는데, 이때 캐시 크기가
증가할수록 프로그램의 처리 속도가 증가한다. 왜냐면 더 많은 양의 정보를 받을 수 있기 때문이다.
스레드(thread)
- 프로세스 내에서 실행되는 흐름의 단위
- 한 프로세스 내의 메모리를 공유함
- 멀티 스레드(multithread) : 한 프로세스에서 둘 이상의 스레드를 동시에 실행하는 방식
코어 안에 스레드가 존재하여, 코어와 프로세스의 차이를 혼동할 수도 있다.
코어는 중앙 처리 장치(CPU) 내의 실행 유닛 중 하나이다. 이때 코어는 하드웨어적인 실행 유닛이다.
프로세스는 실행 중인 프로그램의 인스턴스를 나타낸다. 이때 프로세스는 소프트웨어적인 실행 단위이다.
멀티 프로세스와 멀티 스레드
- 공통점 : 양쪽 모두 한 프로그램이 여러 흐름으로 동시에 실행됨
- 차이점 : 멀티 프로세스는 각각 별개의 메모리를 차지, 멀티 스레드는 한 프로세스 내의 메모리를 공유
이때 멀티 스레드는 메모리를 공유하므로 경쟁상태, 동기화, false sharing과 같은 문제가 발생한다.
구조를 확인 해보겠다.
위 사진을 보면 알 수 있듯이, 싱글 스레드과 싱글 프로세스에서는 6초가 걸리는 것이 3초로 줄었고, 데이터 처리하는 것이 4배가 되었다.
병렬화를 한다면 성능이 개선될 것이다. 이때의 상황을 그림으로 확인해보겠다.