답변:
그것이 요점입니다.
원칙적으로 플랫폼은 원하는대로 수행 할 수 있습니다. x86에서 GPU 코드로 컴파일 된 코드를 적시에 변환하는 고급 운영 체제를 상상할 수 있습니다. 마찬가지로 OpenGL 드라이버는 호스트 CPU에서 원하는 것을 실행할 수 있습니다.
그러나 실제로, 당신이 방금 설명한 것은 일어나는 일입니다.
일반적으로 그렇습니다. Java는 CPU에서 실행되는 프로그램을 작성하는 데 사용됩니다. 셰이더 언어 (cg, hlsl 등)는 GPU에서 실행되는 프로그램을 작성하는 데 사용됩니다.
규칙에 대한 예외 는 격차를 해소 할 수있는 타사 API 를 사용하는 것 입니다.
david van brink는 귀하의 질문에 일반적으로 답변했습니다.
그러나 그가 말했듯이 OpenGL 드라이버는 CPU에서 무언가를 실행할 수 있으며 실제로 많은 일이 발생합니다. 특히 호환성 컨텍스트에서 일부 이상한 레거시 기능을 그래픽 카드에서 구현할 수 없습니다. 소프트웨어 에뮬레이션이 필요합니다. 예를 들어, CPU에서 stippling이 실행되기 전에 들었습니다. 피킹으로 놀라움을 기대할 수도 있습니다.
애플은 2.1G 컨텍스트를 사용하는 맥 OS에서 훨씬 더 많은 일을 할 수있다. 애플은 하드웨어 범위에 비해 OpenGL에 대한 관점을 상당히 통일하고 있으며 일부 작은 하드웨어에는 에뮬레이션해야 할 부분이 없기 때문이다. 컨텍스트 생성 코드가 소프트웨어 장치를 명시 적으로 지정하는 경우 실제로 CPU에서 ENTIRE OpenGL 2.1 사양을 완전히 실행할 수 있습니다.
반대로 vexcl 또는 boost compute와 같은 컴퓨팅 라이브러리 또는 Microsoft의 AMP 또는 nVidia thrust와 같은 컴퓨팅 라이브러리를 통해 실행되는 코드는 API 설정 플래그에 따라 GPU 또는 CPU에서 실행될 수 있습니다.
그리고 마무리 터치를 위해 CPU 내부에는 SIMD라고 불리는 DSP 아키텍처도 있습니다. 인텔의 ispc 컴파일러는 컴파일 시간에 많은 성능 진단을 통해 SIMD 레인에서 실행되도록 "확장 된"코드를 생성하여 최대한 활용할 수 있도록 도와줍니다. 그것에 OpenMP를 추가하면 GPU 개념에 접근하는 멀티 스레드 SIMD를 얻을 수 있습니다. 하이 엔드 CPU 및 로우 엔드 GPU가있는 경우 실제로 성능이 더 우수 할 수 있습니다.
http://ispc.github.io/