다중 셰이더 유닛을 고려할 때 텍스쳐 캐시는 어떻게 작동합니까


11

최신 GPU에는 많은 병렬 음영 처리 장치가 있습니다. 해당 시나리오에서 텍스처 캐시가 관리되는 방법을 알고 싶습니다.

답변:


14

최상위 수준에서 GPU는 여러 셰이더 코어로 세분됩니다. 노트북이나 태블릿의 작은 GPU에는 코어가 몇 개 밖에없고 고급 데스크톱 GPU에는 수십 개가있을 수 있습니다.

셰이더 코어 외에도 텍스처 단위도 있습니다. GPU에 따라 셰이더 코어 당 하나의 텍스처 단위 또는 2 개 또는 3 개의 셰이더 코어간에 공유되는 하나의 텍스처 단위와 함께 그룹화 될 수 있습니다.

전체 칩은 단일 L2 캐시를 공유하지만 다른 장치에는 개별 L1 캐시가 있습니다. 텍스쳐 유닛에는 텍스쳐 캐시가 있으며, 셰이더 유닛에는 명령어 및 상수 / 균일에 대한 캐시가 있으며 버퍼로드가 텍스쳐로드와 별도의 경로인지에 따라 버퍼 데이터에 대한 별도의 캐시가있을 수 있습니다 (GPU 아키텍처에 따라 다름).

텍스처 유닛은 셰이더 코어와 독립적으로 비동기 적으로 작동합니다. 셰이더는 텍스처 읽기를 수행 할 때 그들 사이의 작은 버스를 통해 텍스처 유닛에 요청을 보냅니다. 그런 다음 가능한 경우 셰이더가 계속 실행되거나 일시 중단되어 텍스처 읽기가 완료 될 때까지 다른 셰이더 스레드가 실행될 수 있습니다.

텍스쳐 유닛은 많은 요청을 일괄 처리하고 밉 레벨과 이방성을 선택하고 UV를 텍셀 좌표로 변환하고 클램프 / 랩 모드를 적용하는 등의 방식으로 주소 지정 수학을 수행합니다. 필요한 텍셀을 알고 나면 캐시 계층 구조, 메모리 읽기가 CPU에서 작동하는 것과 같은 방식으로 L1을 먼저보고, L2를 먼저 보지 않으면 DRAM을 확인합니다. 많은 보류중인 텍스처 요청이 모두 동일하거나 근처에있는 텍셀을 원한다면 (여기서처럼) 많은 메모리 요청으로 많은 보류중인 요청을 만족시킬 수 있기 때문에 많은 효율성을 얻습니다. 이러한 모든 작업은 파이프 라인이므로 텍스처 단위가 한 배치에서 메모리를 기다리는 동안 다른 배치 요청에 대해 주소 지정 수학을 수행 할 수 있습니다.

데이터가 다시 돌아 오면 텍스처 유닛은 압축 포맷을 디코딩하고 필요에 따라 sRGB 변환 및 필터링을 수행 한 다음 결과를 쉐이더 ​​코어로 다시 반환합니다.


1
감사! 정말 도움이되었습니다. 상수 / 균일 캐시 재 지정 유니폼 캐시 적중률을 향상시키는 데 사용할 수있는 정밀도 (mediump, lowp) 이외의 팁이 있습니까? 유니폼을 신고하는 순서에 차이가 있습니까?
Felipe Lira

2
@PhilLira Packing은 차이를 만들 수 있습니다. 컴파일러는 패딩을 삽입하여 벡터가 16 바이트 경계에 걸쳐 분할되는 것을 방지하므로이를 피하십시오. 나는 mediump / lowp가 실제로 적어도 데스크탑 GPU (어쩌면 모바일에서)에서 유니폼에서 아무것도하지 않는다고 생각합니다. 그래도 균일 한 캐시 적중률에 대해 너무 걱정하지 않아도됩니다. 병목 현상은 거의 발생하지 않습니다.
Nathan Reed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.