Linux 커널에 일반 GPU 지원이 있습니까?
이 주제는 매우 광범위하기 때문에 더 자세히 설명하겠습니다. 그리고 "능력이 있다"는 것은 기본 지원을 의미합니다. OpenGL과 OpenCL은 사용자 모드에서 애플리케이션을 작성하는 데 도움이 되는 API이므로 제외됩니다.
몇 가지 일반적인 오해는 슈퍼컴퓨터가 GPGPU를 사용하고 Linux를 실행하기 때문에 Linux가 GPGPU를 사용한다는 것입니다. 글쎄요, 정확히는 아닙니다. 슈퍼컴퓨터에서 실행되는 Linux 배포판은 우리가 알고 있는 정규 배포판과 다른 경우가 많습니다. 지금까지는 더 이상 Linux가 아니라 완전히 새로운 운영 체제가 되도록 수정되었습니다.
또 다른 잘 알려진 대답은 GPU 지원이 좋지 않을 수 있습니다. 글쎄, 병목 현상이든 아키텍처와 같은 다른 요인이든 거기까지 가서 다른 모든 요인을 제거하지 맙시다.
질문을 다시 표현해 보면 다음과 같습니다.
메인라인 Linux 커널 자체가 GPU의 범용 레지스터를 통한 스트림 처리를 활용합니까? 그렇다면 어느 정도인가?
답변1
커널이 수백 개의 GPU 레지스터를 가상화하고 컨텍스트 전환해야 한다는 생각은 끔찍하며 커널은 그 자체를 사용하여 이익을 얻을 수 있는 어떤 작업도 수행하지 않습니다. 커널에는 프로세스 간 GPU 리소스 공유를 관리하는 코드가 있으며(더 많은 코드가 커널로 꾸준히 마이그레이션되고 있음) 계산을 위해 GPU를 공유하는 프로세스는 opencl 및 cuda 등을 통해 수행되지만 GPU 컨텍스트 전환은 수행되지 않습니다. 위에서 본 것처럼 모든 CPU 스레드에 연결됩니다. 나는 GPU가 완전히 독립적으로 실행되고 일종의 버스 보고서, CPU에 대한 레지스터 판독 또는 인터럽트 등을 통해 결과를 보고하고 있다고 강하게 의심합니다.
답변2
짧은 대답은 '아니요'입니다. 몇 가지 연구와 코드 읽기를 통해 메인라인 Linux 커널 버전 3.12는 GPU 범용 레지스터를 거의 또는 전혀 지원하지 않는다고 생각합니다. 이는 스트림 처리 방향으로 나아가려면 급격한 변화가 필요한 수십 년 간의 CPU 중심 사고에서 비롯됩니다.
그러나 질문의 질이 좋지 않다는 점을 인정하며, 따라서 명확한 답변을 얻을 수 없습니다. 나는 아직도 user50849가 이 질문에 대한 대답에 가깝다고 생각합니다.