간단한 대답은 매우 많은 수의 각 항목에 대해 상당히 작고 매우 간단한 계산을 수행해야 할 때 GPU가 가장 잘 작동한다는 것입니다. 이 방법을 많이 사용하려면 각 항목의 계산이 다른 항목의 계산과 독립적이어야합니다. 한 항목과 다른 항목 사이에 (일반적으로) 약간의 종속성이있는 경우 일반적으로 GPU에서 해당 코드를 실행하는 데 많은 도움이되기 전에이를 깨는 방법을 찾아야합니다. 종속성을 전혀 깰 수 없거나 깨는 데 너무 많은 작업이 필요한 경우 코드가 CPU에서 더 빠르게 실행될 수 있습니다.
대부분의 현재 CPU는 현재 GPU가 전혀 지원하지 않는 몇 가지 유형의 작업 (예 : 멀티 태스킹을위한 메모리 보호)도 지원합니다.
약간 다른 방향에서 보았을 때, CPU는 프로그래머에게 합리적으로 편리하도록 (대부분) 설계되었으며, 사람들은 편리한 모델을 유지하는 하드웨어를 만들기 위해 최선을 다한 하드웨어를 만들었습니다. 프로그래머이지만 가능한 한 빨리 실행됩니다.
GPU는 반대 방향에서 나옵니다. 주로 하드웨어 설계자에게 편리하도록 설계되었으며 OpenCL과 같은 하드웨어는 하드웨어의 제약 조건에서 가능한 한 합리적인 프로그래밍 모델을 제공하려고 시도했습니다.
GPU에서 실행할 코드를 작성하는 것은 일반적으로 CPU에서 동일한 작업을 수행하는 것보다 시간과 노력이 많이 들기 때문에 비용이 더 많이 듭니다. 따라서 다음과 같은 경우에 주로 수행하는 것이 좋습니다.
- 최소한의 노력으로 큰 이익을 기대할 수 있도록 문제가 너무 평행하거나
- 속도 이득은 매우 중요하므로 많은 추가 작업이 필요합니다.
이 각각에 대한 몇 가지 분명한 가능성이 있습니다 -하지만 거대한 애플리케이션의 수는 분명 근처에도 하나 하나 없습니다. 예를 들어 언제든지 GPU에서 실행되는 CRUD 응용 프로그램을 보게되어 매우 놀랄 것입니다. 그렇다면 아마도 누군가가 그 정확한 목표를 염두에두고 아마도 최적에 접근하는 것은 아닙니다. 비용 / 혜택 비율).
현실은 많은 ( "가장") 응용 프로그램의 경우 일반적인 CPU 속도가 훨씬 빠르며 프로그래밍 편의성 (새로운 기능을 쉽게 개발하는 것과 같은 것)이 훨씬 중요하다는 것입니다. 실행 속도.