2013-01-18 2 views

답변

1

병렬로 GPU에 렌더링 명령을 대기열에 넣으려고 할 때 이점이 없습니다. 랜더링은 이미 GPU에서 병렬로 실행되며 명령을 병렬로 전송하면 드라이버에 오버 헤드가 많이 발생하여 명령 스트림에서 동기화 지점을 확인해야하며 순서를 변경해야 할 수도 있습니다.

또한 멀티 스레드 OpenGL 작업은 올바르지 않습니다.

+0

동의합니다. 또한 여러 개의 CPU 스레드가 동시에 PCIe 버스에 액세스 할 수있게하려고했는데 그래픽 카드에 동시에 액세스하는 것은 하나의 스레드가 실제로 존재하기 때문에 단일 스레드보다 더 나을 가능성이 거의 없습니다. 한 번에 그 IO 버스에 액세스 할 수 있습니다. – trumpetlicks

+0

@trumpetlicks : PCIe는 PCIe가 특정 패킷 길이 (실제로는 전체 길이 세트가 있지만 실제로는 매우 짧음)로 "트랜잭션"이라는 모든 작업을 수행하므로 그리 나쁘지 않습니다. 여러 스레드가 문제없이 이러한 트랜잭션을 인터리브 할 수 있습니다. 그래서 대부분 대역폭 문제입니다. 그러나 잘 작성된 OpenGL 프로그램에서 먼저 어쨌든 지오메트리를 GPU RAM에 업로드 한 다음 단일 명령으로 전체 렌더링 일괄 처리를 실행합니다. – datenwolf

+0

PCIe 버스의 대역폭 (+ 오버 헤드)은 PCIe 버스보다 훨씬 더 빠르지 만 (PCI가 PCIe보다 훨씬 빠름) 패킷 처리에 대해 완전히 동의합니다 (GPU가 지오메트리의 병렬 처리 등을 수행하도록 함). 메모리로 페이저해야하는 경우 단일 스레드를 여전히 멈추게 할 수 있음), 다중 코어 (또는 HT의 경우 스레드)가 해당 버스에 액세스하려고하면 대부분의 스레드가 대부분의 경우 블록 상태로 유지됨 . GPU로 전송하기 위해 모든 데이터를 수집하고 더 적은 수의 큰 패킷으로 보내므로 (오버 헤드가 적음) 훨씬 더 좋습니다. – trumpetlicks

0

그래픽 카드에 동시에 여러 개의 CPU 스레드가 PCIe 버스에 액세스 할 수있게 허용하면 한 번에 하나의 스레드 만 해당 IO 버스에 실제로 액세스 할 수 있으므로 단일 스레드보다 좋을 가능성이 거의 없습니다 .