2000년대 초부터 멀티코어가 등장하기 시작했다. 요즘은 CPU의 클럭 속도를 높이기 보다 코어 수를 늘리고 있다. 클럭 속도는 소모 전력이나 발열 문제로 인해 4~5GHz를 넘기기 어렵기 때문이다. 2코어 4코어 6코어 8코어 등 다양한 코어 수의 CPU가 출시됐다. 그래서 여러 개의 코어를 활용하는 프로그래밍이 중요하다.
CPU는 symmetric
과 asymmetric
이 있다. symmetric은 모든 코어의 형태가 동일한 CPU이고, asymmetric은 각 코어의 성능/소모전력이 다른 CPU이다.
보통 모바일 기기는 asymmetric CPU를 자주 사용하는데 부하가 큰 작업을 할 때는 Big core를 활용하고 부하가 작은 작업을 할 때는 Little core를 활용한다. 이렇게 하는 이유는 배터리에 의존하는 모바일 기기 특성상 전력 소모를 조절하는 것이 중요하기 때문이다.
멀티코어는 명령어를 동시에 수행할 수 있기 때문에 프로그램 성능이 향상될 수 있다. 하지만 저절로 향상되는 것은 아니고 세세하게 프로그래밍해야 이론적인 성능 향상을 기대할 수 있다.
GPU는 코어가 수천 개나 된다. CPU나 GPU는 서로 아키텍처가 다르지만 계산을 수행한다는 공통점이 있다. CPU와 다르게 GPU는 범용 사용 목적보단 병렬처리에 적합한 아키텍처를 가지고 있다.
GPU는 미디어 처리나 렌더링, 3D, 시뮬레이션, 머신러닝, 딥러닝 분야에 쓰인다.
프로세스는 기본적으로 프로세스끼리 메모리를 공유하지 않는다.
기본적으로 프로세스는 하나의 메인 스레드를 가지고 있다.
같은 프로세스 내 스레드는 기본적으로 서로 메모리를 공유한다.
스레드를 새로 할당하는데 걸리는 시간이 프로세스보다 짧다. (가볍다)
여러 개의 PC를 네트워크를 통해 묶은 단위. 각 PC끼리 메모리를 공유하지 않는다.
1개의 큰 PC 안에 여러 개의 CPU가 존재한다. 그 CPU는 하나의 메모리를 공유한다.
1개의 CPU 안에 여러 개의 코어가 존재한다.
메모리를 공유하는 여러 개의 프로세서에 명령어를 동시에 실행시켜 프로그램의 성능을 높이는 프로그래밍 기법이다. 멀티스레드 프로그래밍이다.
여러 독립 PC에서 일을 나눠서 처리한 후 그 결과를 하나로 합치는 프로그래밍 기법이다. 각 PC마다 독립된 메모리 공간을 가진다.
공유 자원에 동시에 접근하는 여러 스레드를 정확하고 효율적으로 제어하는 기법이다. 공유 자원을 동시에 읽을 때는 문제가 되지 않지만, 공유 자원 데이터를 동시에 쓰려고 할 때 스레드를 잘 제어하지 않으면 실행 결과가 매번 달라질 수 있다.