인덱스 프리미티브를 렌더링 할 때 정점 버퍼 데이터의 순서가 중요합니까?


14

3d 객체의 삼각형을 만들고 있습니다. 계산 된 순서대로 버퍼에 쓸 수 있으면 CPU 코드가 단순화됩니다. 삼각형의 꼭짓점은 연속되지 않습니다.

순서대로 작성하지 않으면 성능이 저하됩니까?

답변:


12

여기에는 최소한 두 가지 요소가 있습니다. 인덱스 된 프리미티브가 렌더링 될 때 GPU는 변환 후 정점 캐시를 활용할 수 있습니다. 이 캐시의 크기는 다양하며 개별 드로우 콜 중에 사용됩니다 (알고있는 한 여러 호출이 아닌 해당 컨텍스트에서 버퍼 데이터를 얼마나 자주 변경하는지는 중요하지 않습니다).

이 캐시를 활용하도록 데이터를 구성하면 (예제 알고리즘은 여기 ) 성능이 향상됩니다. 그러나이 조직은 각 인덱스 트리플이 최근에 본 정점을 최대한 재사용 할 수 있도록 인덱스를 정렬하는 것과 더 관련이 있습니다. 인덱스 버퍼를 통한 삼각형이 버퍼에 무작위로 흩어지지 않는 한 특정 시나리오와 거의 관련이 없습니다.이 경우 캐시를 자주 불고 있습니다. 이것이 사실인지 아닌지 귀하의 질문에 분명하지 않았으므로 언급 할 가치가 있다고 생각했습니다.

문제가 될 가능성이 높은 것은 GPU가 그리기 중에 정점 데이터에 대한 메모리 액세스를 캐시한다는 것입니다. 해당 캐시 의 크기 는 상당히 신뢰할 수 없으며 크기를 현지화되지 않은 정점 데이터로 처리하는 개별 코어의 캐시에서 높은 미스 빈도를 얻을 수 있습니다.

그러나 성능 문제가 응용 프로그램에서 적기를 유발할 수 있는지 여부와 알고리즘의 가독성을 희생하면서 데이터를 더 잘 구성하기 위해 알고리즘을 다시 엔지니어링 할 수있는 특정 (사운드처럼 들립니다) ... 그것은 내가 대답 할 수있는 것이 아닙니다. 몇 가지 시나리오를 프로파일 링하고 확인해야합니다.

내가하지만, 개인적으로 잘못을 읽을 수, 유지 보수 코드의 측면에서와 내가 같이 생각하는 모든 캐시는 통지에 대한 사용자 상당한 충분하지 않을 원인에가는 누락.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.