L1 캐시 히트 시 데이터 반환 시간은 약 15.4ns(40

단 한 번의 글로벌 메모리 로드 왕복에 약 255ns, 즉 660사이클의 지연 시간이 발생한다. LDG.E 명령어가 실행되면 레지스터 파일과 LSU(Load/Store Unit), 코알레서, L1/L2 캐시, TLB(Translation Lookaside Buffer), 메모리 컨트롤러를 거쳐 GDDR6X DRAM에서 데이터를 가져오는 여정이 시작되기 때문이다. 이 과정에서 L1 캐시 히트가 발생하면 데이터 반환 시간은 약 15.4ns(40사이클)로 크게 줄어든다.

이 수치는 L1에 상주하는 라인들의 무작위 순열을 구성하고, 이를 통해 종속 체인을 추적하는 레이턴시 체이스(latency chase) 실험으로 측정했다. 단일 스레드가 종속적인 체인을 따라가며 하드웨어의 실제 응답 속도를 직접 확인하는 정밀 측정 방식이다. RTX 4090 하드웨어 기반의 리버스 엔지니어링 결과이므로, 타 아키텍처 GPU에서는 측정 수치가 다르게 나타날 수 있다.

L1 캐시는 주소 변환에 소요되는 비용을 줄이기 위해 가상 주소(virtual address)를 사용한다. 프로그램이 사용하는 가상 주소와 하드웨어가 데이터를 저장하는 물리 주소 사이에는 변환(translation) 과정이 존재하지만, L1 캐시는 이 변환 단계가 수행되기 이전에 가상 주소로 접근한다. 주소 변환 단계를 거치지 않고 데이터를 호출함으로써 L1 캐시의 접근 속도를 극대화했다.

기술이 실제로 작동하는 방식

하드웨어 리버스 엔지니어링을 통해 확인된 수치는 RTX 4090에 국한되며, 다른 아키텍처에서는 결과가 달라질 수 있다. `LDG.E R4, [R4.64]` 명령어는 레지스터 R4와 R5에 저장된 64비트 주소에서 32비트 데이터를 읽어 R4에 저장한다. 32개 레인(GPU의 병렬 처리 단위)이 각각 4바이트를 요청하면 총 128바이트의 데이터가 필요하며, 이는 32바이트 섹터 4개로 구성된 1개의 캐시 라인을 소모한다. 데이터 로드 과정은 주소 변환을 거쳐 크로스바를 통과하고 36개의 L2 슬라이스 중 하나에 도달하는 경로로 이어진다.

코알레서(Coalescer, 여러 메모리 요청을 하나로 묶어 전송하는 장치)는 L1 캐시의 32바이트 섹터 단위에 맞춰 메모리 요청을 최적화한다. 각 레인이 요청한 4바이트 데이터를 분석해 이를 서비스하기 위해 필요한 최소한의 L1 섹터 수를 결정한다. 워프(Warp, GPU에서 함께 실행되는 스레드 묶음)가 요청한 128바이트를 처리하기 위해 4개의 연속적인 섹터 요청을 생성한다. 불필요한 중복 요청을 제거하고 섹터 단위로 묶어 L1 캐시 요청 횟수를 최소화한다.

L1 캐시는 128바이트 라인 단위의 4-way

가상 주소 기반의 해싱 스킴으로 결정되는 4개의 슬롯은 L1 캐시의 세트를 구성한다. RTX 4090의 L1 캐시는 128바이트 라인 단위의 4-way set-associative 구조를 채택해 메모리 접근을 최적화한다. 텐서와 같이 2의 거듭제곱 스트라이드로 액세스할 때 특정 세트에 데이터가 집중되어 발생하는 성능 저하를 원천적으로 방지한다. 가상 주소를 해싱해 세트를 결정하는 방식은 메모리 접근 패턴이 편향되더라도 캐시 적중률을 일정하게 유지한다.

레지스터 번호의 하위 비트로 선택되는 두 개의 뱅크는 사이클당 단 한 번의 읽기 작업만 처리한다. 소스 데이터가 동일한 뱅크를 공유하는 명령어는 오퍼랜드 컬렉터(operand collector)를 통해 읽기 과정을 스테이징한다. 뱅크 충돌로 인해 읽기 사이클이 밀리는 현상을 막기 위해 스테이징 단계에서 데이터를 미리 준비한다. 오퍼랜드 컬렉터는 레지스터 파일의 물리적 뱅크 제약을 완충해 연산 유닛에 끊김 없이 데이터를 공급한다.

커널의 메모리 바운드 정도는 L1(15.4ns), L2(127ns), DRAM 왕복(255ns)의 구체적 지연 시간을 기준으로 정량적으로 판단한다.