GPU는 병렬 작업이 매우 좋습니다. 병렬 작업을 실행하는 경우 좋습니다.
게임은 가장 병렬화가 어려운 응용 프로그램입니다. 메인 게임 루프에 대해 생각하십시오. AI (플레이어가 AI의 특수한 경우로 취급된다고 가정)는 물리에 의해 감지 된 충돌에 응답해야합니다. 따라서 나중에 실행해야합니다. 또는 적어도 물리학은 물리 시스템의 경계 내에서 AI 루틴을 호출해야합니다 (일반적으로 여러 가지 이유로 좋은 아이디어는 아닙니다). 물리학은 객체의 위치를 업데이트하기 때문에 물리학이 실행될 때까지 그래픽을 실행할 수 없습니다. 물론 AI는 새로운 객체를 생성 할 수 있기 때문에 렌더링 전에 AI를 실행해야합니다. AI 및 플레이어 컨트롤 후에 소리를냅니다.
일반적으로 게임은 몇 가지 방식으로 스레드 할 수 있습니다. 스레드에서 그래픽을 분리 할 수 있습니다. 게임 루프는 그래픽스 스레드에 많은 데이터를 넣을 수 있습니다. 기본 보간을 수행 할 수 있으므로 기본 게임 루프가 그래픽과 동기화 될 필요가 없습니다. 소리는 또 다른 실입니다. 게임 루프에 "play this"가 표시되고 재생됩니다.
그 후 모든 것이 고통스러워지기 시작합니다. 복잡한 경로 지정 알고리즘 (예 : RTS)이있는 경우 해당 알고리즘을 스레드 할 수 있습니다. 알고리즘을 완료하는 데 몇 프레임이 소요될 수 있지만 적어도 동시 적입니다. 그 외에도 꽤 어렵습니다.
따라서 게임, 그래픽, 사운드 및 장기 AI 처리의 4 가지 스레드를보고 있습니다. 그다지 중요하지 않습니다. 그리고 그것은 아니다 거의 한 번에 비행 문자 그대로 수백 개의 스레드를 가질 수 GPU를, 충분히. 이것이 GPU에 성능을 제공하는 것입니다. 모든 스레드를 한 번에 사용할 수 있습니다. 그리고 게임은 단순히 그렇게 할 수 없습니다.
이제는 일부 작업에서 "넓게"이동할 수 있습니다. 예를 들어 AI는 일반적으로 서로 독립적입니다. 따라서 한 번에 수십 개의 AI를 처리 할 수 있습니다. 실제로 서로 의존해야 할 때까지. 그럼 넌 곤경에 빠졌어 물리 객체는 서로 독립되어 있습니다. 객체간에 제약이 있거나 무언가와 충돌하지 않는 한. 그런 다음 그들은 매우 의존적입니다.
또한 GPU가 단순히 사용자 입력에 액세스 할 수 없다는 사실이 있습니다. 이것은 내가 이해하는 것처럼 게임에 중요합니다. 그것이 제공되어야 할 것입니다. 또한 파일에 직접 액세스하거나 OS와 대화하는 실제 방법이 없습니다. 다시 말하지만, 이것을 제공하는 어떤 종류의 방법이 있어야 할 것입니다. 아, 그리고 그 모든 소리 처리? GPU는 소리를 내지 않습니다. 그래서 그것들은 CPU로 돌아가서 사운드 칩으로 나가야합니다.
아, 그리고 GPU 코딩은 끔찍합니다. 제대로하기가 어렵고, 한 GPU 아키텍처에 "올바른" 것은 다른 것에 매우 잘못 될 수 있습니다 . 그리고 그것은 단지 AMD에서 NVIDIA로 전환하는 것만이 아닙니다. GeForce 250에서 GeForce 450으로 전환 할 수 있습니다. 기본 아키텍처의 변화입니다. 그리고 쉽게 코드가 제대로 실행되지 않을 수 있습니다. C ++ 및 C조차도 허용되지 않습니다. 당신이 얻는 가장 좋은 것은 OpenCL입니다 .C와 비슷하지만 멋진 점은 없습니다. 재귀 처럼 . 맞습니다 : GPU에 재귀가 없습니다.
디버깅? 오하이오 드 IDE의 디버깅 기능이 마음에 들지 않기를 바랍니다. GDB를 사용하더라도 작별 인사를하십시오. printf
디버깅 에 의지해야합니다 ... 기다립니다 printf
.GPU는 없습니다 . 따라서 메모리 위치에 쓰고 CPU 스텁 프로그램에서 다시 읽도록해야합니다.
맞습니다 : 수동 디버깅. 좋은 결과 내길 바랄 게.
또한 C / C ++에서 사용하는 유용한 라이브러리는 무엇입니까? 또는 XNA 등을 사용하는 .NET 사용자 일 수도 있습니다. 또는 무엇이든. 당신이 사용할 수 없기 때문에 그것은 중요하지 않습니다 어떤 GPU에서 그들 중입니다. 처음부터 모든 것을 코딩해야합니다. 그리고 이미 존재하는 코드베이스가 있다면 모든 코드를 다시 작성할 시간입니다.
그래 복잡한 게임에서는 실제로 끔찍한 일입니다. 그리고 게임이 도움이 될만큼 평행하지 않기 때문에 작동하지 않을 것입니다.