여러 프로세서 지원

다중 프로세서 컴퓨터의 사용자 모드 디스플레이 드라이버를 사용하면 Microsoft Direct3D 런타임에서 다중 프로세서 최적화를 처리하거나 드라이버가 자체 다중 프로세서 최적화를 수행할 수 있습니다.

런타임 처리 Multiple-Processor 최적화

Direct3D 런타임에서 처리하는 다중 프로세서 최적화는 LockAsync, UnlockAsyncRename 함수를 지원하는 드라이버에서만 사용하도록 설정됩니다. 이러한 함수를 사용하면 다중 프로세서 최적화가 동적 리소스를 자주 잠그는 애플리케이션에서 잘 작동할 수 있습니다. GetQueryData 함수와 함께 LockAsyncUnlockAsync 함수는 DDI 버전의 0x0000000B 이상을 노출하는 드라이버에서 재진입해야 합니다. 드라이버는 드라이버의 OpenAdapter 함수 호출에서 D3D10DDIARG_OPENADAPTER 구조체의 DriverVersion 멤버에 DDI 버전 값을 반환합니다. 런타임이 재진입 방식으로 드라이버 함수를 호출하는 경우 한 스레드는 해당 함수 내에서 실행할 수 있고 동일한 디스플레이 디바이스를 참조하는 다른 스레드는 다른 드라이버 함수 내에서 실행됩니다.

Direct3D 런타임은 경우에 따라 다중 프로세서 최적화를 사용하여 작업을 별도의 프로세서로 오프로드하고 컴퓨터 성능을 향상시킵니다. 다중 프로세서 최적화를 사용하도록 설정하면 Direct3D 런타임과 사용자 모드 디스플레이 드라이버 사이에 추가 소프트웨어 계층이 추가됩니다. 이 소프트웨어 계층은 Direct3D 런타임이 사용자 모드 디스플레이 드라이버의 함수에 대해 수행할 모든 호출을 가로챌 수 있습니다.

소프트웨어 계층은 사용자 모드 표시 드라이버를 직접 호출하는 대신 작업자 스레드가 비동기적으로 처리하는 일괄 처리로 명령을 큐에 넣습니다. 그러나 소프트웨어 계층은 사용자 모드 디스플레이 드라이버의 함수에 대한 모든 호출을 일괄 처리할 수 없습니다. 특히 소프트웨어 계층은 정보를 반환하는 함수(예: CreateResource)에 대한 호출을 일괄 처리할 수 없습니다. 소프트웨어 계층이 이러한 유형의 드라이버 함수 중 하나를 호출해야 하는 경우 작업자 스레드를 통해 큐에 대기 중인 모든 명령을 플러시한 다음, 소프트웨어 계층은 기본 애플리케이션 스레드에서 드라이버 함수를 호출합니다.

드라이버 처리 Multiple-Processor 최적화

드라이버가 자체 다중 프로세서 최적화를 수행하는 경우 LockAsync, UnlockAsyncRename 함수를 구현해서는 안 됩니다. 이 경우 드라이버는 pfnSetAsyncCallbacksCb 함수를 호출하여 런타임이 작업자 스레드에서 런타임의 콜백 함수에 대한 호출 수신을 시작하거나 중지할지 여부를 런타임에 알려야 합니다.

드라이버가 자체 다중 프로세서 최적화를 수행하는 경우 Direct3D 런타임이 다중 프로세서 최적화를 사용하도록 결정할 때 사용하는 것과 동일한 정책을 따라야 합니다. 이 정책을 사용하면 모든 프로세스에서 시스템 리소스를 공정하게 공유할 수 있습니다. 특히 드라이버는 다음과 같은 상황에서 다중 프로세서 최적화를 사용하지 않도록 설정해야 합니다.

  • 애플리케이션은 창 모드에서 실행됩니다.

  • 컴퓨터에 프로세서(또는 프로세서 코어)가 하나만 포함되어 있습니다. 드라이버는 하이퍼 스레딩이 있는 단일 프로세서 컴퓨터에서 최적화를 사용하지 않도록 설정해야 합니다.

  • 애플리케이션은 다중 프로세서 최적화를 사용하도록 설정하지 않도록 요청했거나 애플리케이션이 소프트웨어 꼭짓점 처리를 사용합니다. 이 정보는 드라이버의 CreateDevice 함수에 전달됩니다.

공급업체가 이러한 상황 중 하나에서 다중 프로세서 최적화를 사용하도록 설정하려는 경우 먼저 Microsoft에 문의해야 합니다.