# CPU vs GPU

CPU : 주로 일반 명령어를 처리하는데 사용됩니다. 복잡한 연산과 일반 프로그램 실행에 최적화 됨.

GPU : 그래픽 처리 및 병렬 작업에 특화되어 있습니다. 대규모 데이터 병렬처리 및 그래픽 렌더링 작업에 높은 성능을 제공합니다.



<details>

<summary>용도와 주요 역할</summary>

* CPU: CPU는 컴퓨터의 "대표적인" 프로세서로서 다양한 작업을 수행합니다. 이에는 프로그램 실행, 운영체제 관리, 데이터 처리, 논리 연산, 입출력 처리, 스레드 관리 등 다양한 일반적인 작업이 포함됩니다. CPU는 단일 코어 또는 멀티코어로 구성될 수 있으며, 각 코어는 일련의 명령어를 순차적으로 실행합니다.
* GPU: GPU는 주로 그래픽과 병렬 처리 작업에 특화되어 있습니다. 그래픽 처리, 3D 렌더링, 비디오 인코딩 및 디코딩, 과학 및 공학 계산, 머신 러닝과 같은 병렬 계산 작업을 가속화하는 데 사용됩니다. GPU는 많은 코어(또는 스트림 프로세서)를 가지고 있어 한 번에 여러 작업을 처리할 수 있습니다.

</details>

<details>

<summary>코어 수 및 스레딩</summary>

* CPU: CPU는 일반적으로 몇 개의 빠른 코어를 가지고 있으며, 몇몇 모델은 하이퍼스레딩과 같은 기술을 사용하여 한 코어에서 병렬 스레드를 처리할 수 있습니다.
* GPU: GPU는 많은 작은 코어(스트림 프로세서 또는 셰이더 유닛)를 가지고 있으며, 각 코어는 독립적으로 병렬 계산을 처리합니다. 따라서 GPU는 대규모 병렬 작업에 효과적입니다.

</details>

<details>

<summary>프로그래밍 모델</summary>

CPU: CPU는 일반적으로 일련의 명령어를 순차적으로 실행하는 Von Neumann 아키텍처를 사용하며, C/C++ 및 다양한 고급 프로그래밍 언어로 프로그래밍됩니다.

GPU: GPU는 SIMD(Single Instruction, Multiple Data) 아키텍처를 사용하여 여러 데이터 요소에 동일한 명령어를 동시에 적용합니다. GPU 프로그래밍은 병렬 프로그래밍 언어 및 API(예: CUDA, OpenCL)를 사용하여 개발됩니다.

[simd](simd "mention")

</details>

<details>

<summary>전력 소비와 열 관리</summary>

* CPU: CPU는 저전력 및 열 관리에 중점을 두고 설계되었습니다. 데스크톱 및 랩톱 컴퓨터에서는 에너지 효율성이 중요하며, CPU는 다양한 전력 모드를 지원하여 필요에 따라 전력 소비를 조절합니다.
* GPU: GPU는 주로 그래픽 작업을 가속화하기 위해 설계되었으며, 높은 전력 소비를 가질 수 있습니다. 일부 고성능 GPU는 냉각과 열 관리를 위한 추가 조치가 필요할 수 있습니다.

</details>

<details>

<summary>메모리 계층 구조</summary>

* CPU: CPU는 주로 빠른 캐시 메모리를 사용하여 빈번하게 액세스되는 데이터에 빠르게 접근합니다. 더 큰 주 메모리로부터 데이터를 가져오기도 합니다.
* GPU: GPU는 대용량 고속 메모리를 가지고 있어 대규모 데이터 세트를 처리할 수 있습니다. 그래픽 작업 및 병렬 계산을 위해 고급 메모리 계층 구조가 사용됩니다.

</details>
