텍스처 데이터의 메모리 대역폭은 앱의 GPU 성능에 병목 현상이 발생할 수 있습니다. AGI 시스템 프로필에는 텍스처 메모리 대역폭 문제를 진단하는 데 도움이 되는 카운터가 있습니다.
Qualcomm Adreno 카운터
Qualcomm Adreno GPU가 장착된 기기에서 주목할 만한 카운터는 다음과 같습니다.
계수기
설명
텍스처 메모리 읽기 BW (바이트/초)
외부 메모리에서 읽은 텍스처 데이터의 대역폭입니다.
텍스처 L1 누락 비율
텍스처를 가져오는 L1 캐시 부적중
비기본 수준 텍스처 비율(%)
밉맵인 텍스처 가져오기의 비율입니다.
비등방성 필터링 비율(%)
비등방성으로 필터링된 텍셀의 비율입니다.
ARM 말리 카운터
ARM Mali GPU가 있는 기기에서 주목할 만한 카운터는 다음과 같습니다.
계수기
설명
외부 메모리의 텍스처 읽기 비트
외부 메모리에서 읽은 데이터 비트는 텍스처 단위별로, 셰이더 코어에서 평균을 냅니다.
L2 캐시의 텍스처 읽기 비트
L2 캐시에서 텍스처 단위별로 읽은 데이터 비트가 셰이더 코어에서 평균을 냅니다.
[더보기]
평균 읽기 비트에서 전체 대역폭을 계산하기 위해 카운터 값에 버스 너비 (일반적으로 16바이트)와 총 셰이더 코어 수를 곱합니다.
카운터 분석
이러한 카운터의 동작을 측정하려면 단일 GPU 프레임 과정에서 평균 및 최대 대역폭을 측정한 다음 GPU 사용률의 인접한 블록으로 기술합니다.
그림 1. 단일 프레임의 텍스처 메모리 읽기 대역폭(평균 값은 565MBps, 최대 값은 2.30GBps)
평균 텍스처 메모리 읽기 대역폭은 1GBps 이하, 최대 대역폭은 3GBps 이하가 좋습니다. 텍스처 L1 캐시 부적중도 10% 이하여야 합니다. 대역폭 또는 L1 캐시의 값이 클수록 다음과 같은 심층적인 텍스처 문제가 발생할 수 있습니다.
텍스처가 너무 큼: 텍스처가 클수록 패키지 크기가 커지고, 비용이 더 많이 들고 캐시 효율성이 떨어질 수 있습니다.
텍스처가 압축되지 않음: 모든 Android 휴대전화는 ETC1 또는 ASTC 등 일부 유형의 텍스처 압축을 지원합니다. 텍스처는 압축하여 패키지 크기를 줄이고 텍스처 대역폭을 줄여야 합니다.
기타: 거듭제곱 2 텍스처, 밉매핑, 비등방성 필터링 등 기타 다양한 텍스처 문제를 고려해야 합니다. 이 중 일부는 아래에 설명된 것처럼 시스템 프로필에서 관찰될 수 있지만, 더 자세한 조사가 필요한 경우도 있습니다.
무료 카메라가 있는 3D 게임의 경우 텍스처 애셋은 밉매핑을 사용해야 합니다. 그러면 카메라에서 멀리 있는 객체가 메모리 대역폭을 줄이고 텍스처 캐시 효율을 높이고 이미지 품질을 개선할 수 있습니다. Qualcomm Adreno GPU를 사용하는 기기의 경우 Non-Base Level Textures 카운터 비율이 평균 10% 미만이면 밉매핑이 적절하지 않은 것일 수 있습니다.
그림 2. 단일 프레임의 기본이 아닌 텍스처(평균값 9.2%)
또 다른 고려사항은 비등방성 필터링을 사용하는 것입니다. 비등방성 필터링은 비등방성으로 필터링된 텍셀의 비율에 대해 Qualcomm Adreno GPU의 % 비등방성 필터링 비율 카운터로 설명되어 있습니다. 이렇게 하면 일부 게임의 시각적 품질이 개선될 수 있지만 비용이 매우 많이 들 수 있으며, GPU 성능 비용과 비교하여 사용 여부를 고려해야 합니다.
그림 3. 단일 프레임에 관해 필터링된 비등방성(평균 10.8%)의 부분
더 구체적인 문제를 진단하는 가장 좋은 방법은 프레임 프로필 트레이스를 사용하여 텍스처 애셋을 분석하는 것입니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Analyze texture memory bandwidth usage\n\nThe memory bandwidth of texture data can be a potential bottleneck for your\napp's GPU performance. There are some counters in an **AGI System Profile** that can help diagnose texture memory bandwidth issues.\n\nQualcomm Adreno counters\n------------------------\n\nOn devices with Qualcomm Adreno GPUs, some notable counters include:\n\n| Counter | Description |\n|---------------------------------------|------------------------------------------------------|\n| Texture Memory Read BW (Bytes/Second) | Bandwidth of texture data read from external memory. |\n| % Texture L1 Miss | L1 cache miss from fetching textures. |\n| % Non-Base Level Textures | Percentage of texture fetches that are mipmaps. |\n| % Anisotropic Filtered | Percentage of texels that are anisotropic filtered. |\n\nARM Mali counters\n-----------------\n\nOn devices with ARM Mali GPUs, some notable counters include:\n\n| Counter | Description |\n|-----------------------------------------|-------------------------------------------------------------------------------------------|\n| Texture read beats from external memory | Data beats read from external memory by the texture unit, averaged over the shader cores. |\n| Texture read beats from L2 cache | Data beats read from the L2 cache by the texture unit, averaged over the shader cores. |\n| \\[More\\] | |\n\nTo calculate the overall bandwidth from average read beats, the counter value is multiplied by the bus width (typically 16 bytes) and by the total number of shader cores.\n\nCounter analysis\n----------------\n\nTo measure the behavior of these counters, measure the average and peak\nbandwidth over the course of a single GPU frame, and then delineate with a contiguous block of GPU Utilization.\n**Figure 1.**Texture memory read bandwidth for a single frame, with average value of 565 MBps and peak value of 2.30 GBps\n\nWe recommend an average texture memory read bandwidth of no higher than 1 GBps, and a peak bandwidth no higher than 3 GBps. Texture L1 cache miss should also be no higher than 10%. Higher values for bandwidth or L1 cache may be indicators of deeper texture issues, including:\n\n- *Textures are too large*: Large textures bloat your package size, and are more expensive and may reduce cache efficiency.\n- *Textures are uncompressed*: All Android phones support some types of texture compression, whether it's ETC1 or ASTC. Textures should be compressed to reduce package size and reduce texture bandwidth.\n- *Other*: A variety of other texture concerns should be considered, including power-of-2 textures, mipmapping, anisotropic filtering, and more. Some of these may be observed from the System Profile as discussed below, whereas others may require deeper investigation.\n\nFor three-dimensional games with a free camera, texture assets should use [mipmapping](/agi/sys-trace/link), such that objects at a distance from the camera will have reduced memory bandwidth, better texture cache efficiency, and better image quality. For devices using Qualcomm Adreno GPUs, % **Non-Base Level Textures** counters lower than 10% on average may indicate inadequate mipmapping.\n**Figure 2.**Non-base level textures for a single frame, with an average value of 9.2%\n\nAnother consideration is the use of anisotropic filtering, which is described by the **% Anisotropic Filtered** counter for Qualcomm Adreno GPUs for the proportion of texels that are anisotropic filtered. While this may improve visual quality for some games, it can also be very expensive, and its use should be weighed against the GPU performance cost.\n**Figure 3.**Perecentage of anisotropic filtered for a single frame, with average value of 10.8%\n\nThe best way to diagnose more specific problems is through taking a frame\nprofile trace to analyze texture assets."]]