공부

병렬프로그래밍(1)

myeongjaechoi 2024. 3. 11. 20:43

multithread와 multiprocess의 사용하고, OpenMP를 이용하여 실습을 하는 것을 배워보겠다.

N개의 코어가를 가진 CPU

  • 싱글코어 CPU보다 처리 속도가 N배 증가하는 것이 아닌, 한 번에 처리할 수 있는 양이 N배가 증가함

코어를 여래 개 사용하면 속도도 물론 빨라지지만, 속도는 어느정도 한계가 있고, 데이터 양을 N배 처리할 수 있게 증가한다.

공짜 점심의 시대는 끝났다

  • 2004년까지 CPU는 싱글 코어로, 그저 비싼 것을 사용 당연히 좋은 성능을 내는 시대가 있었다.

하지만, 현재는 프로그래머가 직접 코딩을 하여 스레드를 사용하는 시대가 온 것이다.

간단한 그림

무어의 법칙

  • CPU 내의 트랜지스터(전류,전압 조절 장치) 수는 약 18개월에서 24개월 마다 2배씩 증가한다는 법칙

CPU 내의 트랜지스터의 수가 증가하면서 더 많은 명령어와 캐시를 탑재할 수 있게 되었다.

이때 캐시란, 하디 디스크에 저장된 정보가 메모리와 캐시를 거쳐 레지스터에 올라와 CPU에서 연산을수행하는데, 이때 캐시 크기가

증가할수록 프로그램의 처리 속도가 증가한다. 왜냐면 더 많은 양의 정보를 받을 수 있기 때문이다.

스레드(thread)

  • 프로세스 내에서 실행되는 흐름의 단위
  • 한 프로세스 내의 메모리를 공유함
  • 멀티 스레드(multithread) : 한 프로세스에서 둘 이상의 스레드를 동시에 실행하는 방식

코어 안에 스레드가 존재하여, 코어와 프로세스의 차이를 혼동할 수도 있다.

코어는 중앙 처리 장치(CPU) 내의 실행 유닛 중 하나이다. 이때 코어는 하드웨어적인 실행 유닛이다.

프로세스는 실행 중인 프로그램의 인스턴스를 나타낸다. 이때 프로세스는 소프트웨어적인 실행 단위이다.

멀티 프로세스와 멀티 스레드

  • 공통점 : 양쪽 모두 한 프로그램이 여러 흐름으로 동시에 실행됨
  • 차이점 : 멀티 프로세스는 각각 별개의 메모리를 차지, 멀티 스레드는 한 프로세스 내의 메모리를 공유

이때 멀티 스레드는 메모리를 공유하므로 경쟁상태, 동기화, false sharing과 같은 문제가 발생한다.

구조를 확인 해보겠다.

s1,s2가 순차영역, Pn이 병렬영역이다.

위 사진을 보면 알 수 있듯이, 싱글 스레드과 싱글 프로세스에서는 6초가 걸리는 것이 3초로 줄었고, 데이터 처리하는 것이 4배가 되었다.

병렬화를 한다면 성능이 개선될 것이다. 이때의 상황을 그림으로 확인해보겠다.

병렬화를 이용하여 성능 개선 효과가 1.6이 나왔다.