KR20230158127A - 분산된 데이터센터의 적응형 메모리 일관성 - Google Patents

분산된 데이터센터의 적응형 메모리 일관성 Download PDF

Info

Publication number
KR20230158127A
KR20230158127A KR1020237037631A KR20237037631A KR20230158127A KR 20230158127 A KR20230158127 A KR 20230158127A KR 1020237037631 A KR1020237037631 A KR 1020237037631A KR 20237037631 A KR20237037631 A KR 20237037631A KR 20230158127 A KR20230158127 A KR 20230158127A
Authority
KR
South Korea
Prior art keywords
fabric
memory
access
requestor
attached memory
Prior art date
Application number
KR1020237037631A
Other languages
English (en)
Other versions
KR102629550B1 (ko
Inventor
세르게이 블라고두로프
브랜든 케이. 포터
조나단 알솝
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20230158127A publication Critical patent/KR20230158127A/ko
Application granted granted Critical
Publication of KR102629550B1 publication Critical patent/KR102629550B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

데이터 프로세서에는 데이터 패브릭에 결합하고 메모리 액세스 명령어를 이행하기 위한 패브릭 부착 메모리(fabric-attached memory; FAM) 인터페이스가 포함되어 있다. FAM 인터페이스에 결합된 요청자 측 적응형 일관성 컨트롤러는 데이터 프로세서가 액세스하도록 승인된 FAM 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 패브릭 부착 메모리에 대한 패브릭 관리자에게 요청한다. 알림이 둘 이상의 요청자가 FAM 영역에 액세스하도록 승인되었음을 나타내는 경우, 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화된다.

Description

분산된 데이터센터의 적응형 메모리 일관성
CXL(Compute Express Link) 3.0, Gen-Z 또는 슬링샷(Slingshot)과 같은 새로운 패브릭 표준은 중앙 처리 장치(central processing unit; CPU) 호스트가 FAM(Fabric-Attached Memory) 모듈에 액세스할 수 있는 데이터센터 분리에 대한 접근 방식을 예증한다. 이러한 모듈에는 이와 연관된 컴퓨트 능력이 없거나 거의 없는 데이터센터 패브릭에 부착된 메모리가 포함되어 있다. FAM을 사용하면, 호스트는 로컬 서버의 메모리 용량 제한으로 인해 제약을 받지 않는다. 대신, 호스트는 임의의 특정 호스트에 부착될 필요가 없는 방대한 메모리 풀(pool)에 액세스할 수 있다. FAM은 호스트 간에 파티셔닝되며, 파티션은 호스트 전용으로 지정되거나 여러 호스트 간에 공유될 수 있다.
메모리 일관성은 FAM 시스템과 함께 사용할 소프트웨어 애플리케이션을 개발하는 과정에서 중요한 고려 사항이다. 일관성은 다중 프로세서 또는 다중 스레드 시스템에서 메모리 명령어(다른 메모리 위치에 대한)이 정렬되는 방식을 정의하고, 일관성 모델에 따라 독립적인 메모리 동작을 재정렬하여 구현된다.
높은 수준의 의존성이 관련된 단일 프로세서의 명령 스트림에서 독립적인 메모리 동작에 다양한 순서 제약 조건을 부과하는 다양한 일관성 모델이 개발되었다. 순차 일관성(Sequential Consistency)으로 알려진 단순 일관성 모델에서는, 프로세서가 읽기 및 쓰기 순서를 변경할 수 없다. "TSO(Total Store Order)"로 알려진 또 다른 모델은 저장 버퍼링을 허용한다. 이 방식에서, 저장 버퍼는 지정된 조건이 충족되고 동작 그룹이 메모리로 전송될 수 있을 때까지 메모리로 전송되어야 하는 저장 동작을 보유한다. 로드는 저장소를 통과할 수 있지만, 저장소는 프로그램 순서에 따라 메모리로 전송된다. 로드 동작의 어드레스는 저장 버퍼의 어드레스와 비교하여 확인되며, 저장 버퍼는 어드레스가 일치하는 경우 로드 동작을 충족시키는 데 사용된다.
완화된 또는 약한 일관성 모델로 알려진 다른 일관성 모델은 동작 재정렬이 허용되는 영역을 구분하는 펜스(또는 장벽) 동작의 일부 버전에 의존한다. 해제 일관성은 약한 일관성 모델의 한 예로, 동기화 액세스는 다음의 모든 메모리 액세스 전에 잠금과 같은 동작을 완료해야 하는 "Acquire", 및 해제가 완료되기 전에 잠금 해제와 같은 동작을 완료해야 하는 "Release"로 나뉜다.
도 1은 종래 기술에 따른 패브릭 부착 메모리(fabric-attached memory; FAM) 시스템을 블록도 형태로 예시한다.
도 2는 일부 실시예에 따른 도 1과 같은 FAM 시스템에서 컴퓨트 유닛으로 사용하기에 적합한 가속 처리 유닛(accelerated processing unit; APU)을 블록도 형태로 예시한다.
도 3은 일부 실시예에 따른 적응형 일관성 컨트롤러(adaptive consistency controller; ACC)를 포함하는 FAM 메모리 시스템의 특정 요소를 블록도 형태로 예시한다.
도 4는 일부 실시예에 따른 도 3의 ACC의 동작 프로세스를 예시한 도면이다.
도 5는 예시적인 실시예에 따른 적응형 일관성 컨트롤러에서 메모리 일관성 모델을 관리하기 위한 프로세스 흐름도를 도시한다.
도 6은 일부 실시예에 따른 메모리 일관성 모델을 구현하기 위한 프로세스의 흐름도를 도시한다. 그리고,
도 7은 일부 추가적인 실시예에 따른 메모리 일관성 모델을 구현하기 위한 다른 프로세스의 흐름도를 도시한다.
다음의 설명에서, 다른 도면에서 동일한 참조 번호의 사용은 유사하거나 동일한 항목을 나타낸다. 달리 언급되지 않는 하, "결합된"이라는 단어 및 관련 동사 형태는 당업계에 공지된 수단에 의한 직접 연결 및 간접 전기 연결 모두를 포함하며, 달리 언급되지 않는 한 직접 연결에 대한 설명은 적절한 형태의 간접 전기 연결도 사용하는 대체 실시예를 암시한다.
방법은 패브릭 부착 메모리 및 패브릭을 통해 패브릭 부착 메모리에 결합된 복수의 요청자를 포함하는 패브릭 부착 메모리 시스템과 함께 사용하기 위한 것이다. 패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 대해 패브릭 관리자에게 알림이 요청된다. 둘 이상의 요청자가 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 패브릭 관리자로부터의 알림에 응답하여, 승인된 각 요청자에 대해, 패브릭 부착 메모리 영역과 관련된 로컬 애플리케이션의 선택된 메모리 액세스 명령어에 대해 펜스가 활성화된다.
데이터 프로세서에는 처리 코어, 패브릭 부착 메모리 인터페이스 및 요청자 측 적응형 일관성 컨트롤러가 포함된다. 프로세싱 코어는 애플리케이션을 실행한다. 패브릭 부착 메모리 인터페이스는 프로세서 코어에 결합되고, 데이터 패브릭에 연결하여 처리 코어에서 패브릭 부착 메모리로의 메모리 액세스 명령어를 이행하도록 적응된다. 요청자 측 적응형 일관성 컨트롤러는 처리 코어 및 패브릭 부착 메모리 인터페이스에 결합되어 있으며, 데이터 프로세서가 액세스하도록 승인된 패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 패브릭 부착 메모리에 대한 패브릭 관리자에게 요청한다. 둘 이상의 요청자가 패브릭 결합 메모리 영역에 액세스하도록 승인되었음을 나타내는 패브릭 관리자로부터의 알림에 응답하여, 요청자 측 적응형 일관성 컨트롤러는 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 한다.
패브릭 부착 메모리 시스템은 패브릭 부착 메모리, 데이터 패브릭, 패브릭 관리자 및 복수의 데이터 프로세서를 포함한다. 데이터 패브릭은 패브릭 부차 메모리에 연결된다. 패브릭 관리자는 데이터 패브릭에 연결되어 요청자에게 패브릭 부착 메모리의 메모리 영역에 액세스하도록 승인하거나 승인 취소하도록 동작 가능하다. 복수의 데이터 프로세서는 데이터 패브릭에 연결되며, 각각은 애플리케이션을 실행하는 처리 코어, 패브릭 부착 메모리 인터페이스, 및 처리 코어와 패브릭 부착 메모리 인터페이스에 결합된 요청자 측 적응형 일관성 컨트롤러를 포함한다. 요청자 측 적응형 일관성 컨트롤러는 데이터 프로세서가 액세스하도록 승인된 패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 패브릭 관리자에게 요청한다. 둘 이상의 요청자가 패브릭 결합 메모리 영역에 액세스하도록 승인되었음을 나타내는 패브릭 관리자로부터의 알림에 응답하여, 요청자 측 적응형 일관성 컨트롤러는 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 한다.
도 1은 종래 기술에 따른 패브릭 부착 메모리(fabric-attached memory; FAM) 시스템(100)을 블록도 형태로 예시한다. 도시된 FAM 시스템(100)은 분리된 데이터 센터에 종종 사용되는 많은 토폴로지 중 데이터 패브릭 토폴로지의 한 예일 뿐이다. FAM 시스템(100)은 일반적으로 데이터 센터 패브릭(102), 및 포드(pod)라고 불리는 다수의 장치 그룹(104)을 포함한다.
각 포드(104)는 다수의 컴퓨트 노드 "C", 다수의 메모리 노드 "M" 및 상호 연결 네트워크 "ICN"을 포함한다. 컴퓨트 노드(C)는 라우터 "R"을 통해 ICN에 연결된다. 컴퓨트 노드(C)에는 동일한 일관성 도메인의 일부인 다수의 CPU(각각 다수의 코어) 또는 다수의 가속 처리 유닛(accelerated processing unit; APU)이 포함되어 있다. 각 컴퓨트 노드(C)는 네트워크 인터페이스 카드(network interface card; NIC), CXL 인터페이스, 또는 컴퓨트 노트(C)를 위한 데이터센터 패브릭(102)으로의 게이트웨이인 다른 적절한 패브릭 인터페이스와 같은 패브릭 브리지를 포함한다. 메모리 노드(M)는 라우터(R)를 통해 ICN에 연결된다.각 메모리 노드(M)에는 유사한 패브릭 인터페이스 및 FAM에 대한 요청을 충족하는 매체 컨트롤러가 포함되어 있다. ICN은 다양한 컴퓨트 노드(C)를 메모리 노드(M)와 상호 연결하기 위한 스위치를 포함하고, 일부 토폴로지에는 라우터를 포함할 수 있다.
도시된 토폴로지는 라우터(R)와 ICN에 의해 형성된 로컬 데이터센터 패브릭, 및 데이터 센터 패브릭(102)으로 라벨링된 글로벌 데이터 센터 패브릭을 포함한다. 이 실시예에서, 로컬 데이터 센터 패브릭은 랙(rack) 내에 있고, 글로벌 데이터 센터 패브릭에는 다수의 랙이 포함되어 있다. 그러나, 다양한 패브릭 토폴로지는 랙 또는 데이터센터 내에서 구현될 수 있으며, 네트워크를 통해 원격으로 데이터센터에 액세스하는 컴퓨트 노드를 포함할 수 있다. 많은 토폴로지에는 FAM 풀의 일부인 메모리도 포함하는 컴퓨트 노드(C)가 있다는 점에 유의한다. 이러한 메모리는 패브릭 부착 메모리로 매핑될 수 있으며, "합성 가능성"이라고 불리는 리소스 할당 프로세스에 따라 다른 컴퓨트 노드에 의해 사용 가능하게 될 수 있다.
데이터 센터 패브릭(102)은 CXL, Gen-Z 또는 기타 적절한 메모리 패브릭 프로토콜과 같은 프로토콜에서 데이터 트래픽을 결합하는 스위치 및 라우터를 포함하여 포드(104) 사이의 데이터 상호 연결을 제공한다. 다수의 프로토콜이 데이터 센터 패브릭에서 함께 사용될 수 있다는 점에 유의한다. 이 예시적인 실시예에서, CXL은 랙 내의 장치를 상호 연결하는 데 사용되는 반면, Gen-Z는 데이터 센터 내의 다양한 랙을 상호 연결하는 데 사용된다.
도 2는 도 1의 FAM 시스템(100)과 같은 FAM 시스템에서 컴퓨트 유닛(C)으로 사용하기에 적합한 APU(200)를 블록도 형태로 예시한다. APU(200)는 호스트 데이터 처리 시스템에서 프로세서로 사용하기에 적합한 집적 회로이며, 일반적으로 중앙 처리 유닛(CPU) 코어 콤플렉스(210), 그래픽 코어(220), 디스플레이 엔진 세트(222), 데이터 패브릭(225), 메모리 관리 허브(240), 주변 컨트롤러 세트(260), 주변 버스 컨트롤러 세트(270), 및 시스템 관리 유닛(system management unit; SMU)(280) 및 메모리 인터페이스 그룹(290)을 포함한다.
CPU 코어 콤플렉스(210)는 CPU 코어(212)와 CPU 코어(214)를 포함한다. 이 예에서, CPU 코어 콤플렉스(210)는 두 개의 CPU 코어를 포함하지만, 다른 실시예에서 CPU 코어 콤플레스(210)는 임의의 개수의 CPU 코어를 포함할 수 있다. CPU 코어(212 및 214) 각각은 제어 패브릭을 형성하는 시스템 관리 네트워크(system management network; SMN) 및 로컬 데이터 패브릭(225)에 양방향으로 연결되고, 데이터 패브릭(225)에 메모리 액세스 요청을 제공할 수 있다. CPU(212 및 214) 각각은 단일 코어일 수 있거나 추가로 캐시와 같은 특정 리소스를 공유하는 둘 이상의 단일 코어를 갖는 코어 콤플렉스일 수 있다. CPU 코어(212 및 214) 각각은 아래에 추가로 설명된 바와 같이 데이터 센터 패브릭에서 메모리 일관성을 위한 특정 기능을 수행하는 것을 포함하여 CPU에서 특정 명령어를 실행하도록 실행되는 μ코드(216)를 포함한다.
그래픽 코어(220)는 정점 처리, 단편 처리, 셰이딩, 텍스처 블렌딩 등과 같은 그래픽 동작을 고도로 통합되고 병렬 방식으로 수행할 수 있는 고성능 그래픽 처리 유닛(GPU)이다. 그래픽 코어(220)는 SMN 및 데이터 패브릭(225)에 양방향으로 연결되고, 데이터 패브릭(225)에 메모리 액세스 요청을 제공할 수 있다. 이와 관련하여, APU(200)는 CPU 코어 콤플레스(210)와 그래픽 코어(220)가 동일한 메모리 공간을 공유하는 통합 메모리 아키텍처, 또는 CPU 코어 콤플렉스(210)와 그래픽 코어(220)가 메모리 공간의 일부를 공유하지만, 그래픽 코어(220)는 CPU 코어 콤플렉스(210)에 의해 접근할 수 없는 개인 그래픽 메모리도 사용하는 메모리 아키텍처를 지원할 수 있다. 메모리 영역은 로컬 메모리 또는 데이터 센터 패브릭으로부터 할당될 수 있다.
디스플레이 엔진(222)은 모니터에 디스플레이하기 위해 그래픽 코어(220)에 의해 생성된 오브젝트를 렌더링하고 래스터화한다. 그래픽 코어(220)와 디스플레이 엔진(222)은 시스템 메모리의 적절한 어드레스로 균일하게 변환하기 위해 공통 메모리 관리 허브(240)에 양방향으로 연결된다.
로컬 데이터 패브릭(250)은 임의의 메모리 액세스 에이전트와 메모리 관리 허브(240) 사이의 메모리 액세스 요청 및 메모리 응답을 라우팅하기 위한 크로스바 스위치를 포함한다. 이는 또한 시스템 구성에 기초하여 메모리 액세스의 목적지를 결정하기 위해 기본 입/출력 시스템(basic input/output system; BIOS)에 의해 정의된 시스템 메모리 맵, 뿐만 아니라 각 가상 연결에 대한 버퍼를 포함한다.
주변 컨트롤러(260)는 범용 직렬 버스(Universal Serial Bus; USB) 컨트롤러(262) 및 직렬 고급 기술 결합(Serial Advanced Technology Attachment; SATA) 인터페이스 컨트롤러(264)를 포함하며, 이들 각각은 시스템 허브(266) 및 SMN 버스에 양방향으로 연결된다.이들 두 개의 컨트롤러는 APU(200)에서 사용될 수 있는 주변 컨트롤러의 예시일 뿐이다.
주변 버스 컨트롤러(270)는 시스템 컨트롤러 또는 "사우스브리지"(Southbridge; SB)(272) 및 주변 컴포넌트 상호 연결 익스프레스(Peripheral Component Interconnect Express; PCIe) 컨트롤러(274)를 포함하며, 이들 각각은 입/출력(I/O) 허브(276) 및 SMN 버스에 양방향으로 연결된다.I/O 허브(276)는 또한 시스템 허브(266) 및 데이터 패브릭(225)에 양방향으로 연결된다. 따라서 예를 들어 CPU 코어는 데이터 패브릭(225)이 I/O 허브(276)를 통해 라우팅하는 액세스를 통해 USB 컨트롤러(262), SATA 인터페이스 컨트롤러(264), SB(272) 또는 PCIe 컨트롤러(274)의 레지스터를 프로그래밍할 수 있다. APU(200)용 소프트웨어 및 펌웨어는 읽기 전용 메모리(read-only memory; ROM), 플래시 전기적으로 소거 가능한 프로그래밍 가능 ROM(flash electrically erasable programmable ROM; EEPROM) 등과 같은 다양한 비휘발성 메모리 유형 중 어느 하나일 수 있는 시스템 데이터 드라이브 또는 시스템 BIOS 메모리(표시되지 않음)에 저장된다. 전형적으로, BIOS 메모리는 PCIe 버스를 통해 액세스되고, 시스템 데이터 드라이브는 SATA 인터페이스를 통해 액세스된다.
SMU(280)는 APU(200)의 리소스 동작을 제어하고 이들 간의 통신을 동기화하는 로컬 컨트롤러이다. SMU(280)는 APU(200)의 다양한 프로세서의 파워 업 시퀀싱을 관리하고, 리셋 신호, 인에이블 신호 및 기타 신호를 통해 다수의 오프-칩 장치를 제어한다. SMU(280)는 위상 고정 루프(phase locked loop; PLL)와 같은 하나 이상의 클록 소스(도시되지 않음)를 포함하여 APU(200)의 컴포넌트 각각에 클록 신호를 제공한다. SMU(280)는 또한 다양한 프로세서 및 기타 기능 블록에 대한 전력을 관리하고, 적절한 전력 상태를 결정하기 위해 CPU 코어(212 및 214) 및 그래픽 코어(220)로부터 측정된 전력 소비 값을 수신할 수 있다.
메모리 관리 허브(240)는 그래픽 코어(220) 및 디스플레이 엔진(230)에 직접 메모리 액세스 능력을 제공하기 위해 로컬 데이터 패브릭(250), 그래픽 코어(220) 및 디스플레이 엔진(230)에 연결된다.
메모리 인터페이스(290)는 두 개의 메모리 컨트롤러(291 및 292), DRAM 매체(293 및 294), 및 FAM 메모리 인터페이스(295)를 포함한다. 메모리 컨트롤러(291 및 292) 각각은 로컬 데이터 패브릭(250)에 연결되고, 물리 계층(PHY) 인터페이스를 통해 DRAM 매체(293 및 294) 각각에 연결된다. 이 실시예에서, DRAM 매체(293 및 294)는 DDR 버전 5(DDR5)와 같은 DDR 메모리 기반의 메모리 모듈을 포함한다. 다른 실시예들에서, 저전력 DDR4(LPDDR4), 그래픽 DDR 버전 5(GDDR5) 및 고대역폭 메모리(HBM)와 같은 다른 유형의 DRAM 메모리가 사용된다.
FAM 메모리 인터페이스(295)는 패브릭 브리지(296), 적응형 일관성 컨트롤러(ACC)(297) 및 패브릭 PHY(298)를 포함한다. 패브릭 브리지(296)는 FAM 시스템(100)과 같은 FAM 시스템에 대한 메모리 요청을 수신하고 이행하기 위해 로컬 데이터 패브릭(250)에 연결된 패브릭 부착 메모리 인터페이스이다. 이러한 메모리 요청은 CPU 코어 콤플렉스(210)로부터 비롯된 것일 수도 있고, 그래픽 코어(220)와 같은 기타 시스템 컴포넌트로부터의 직접 메모리 액세스(DMA) 요청일 수도 있다. 패브릭 브리지(296)는 또한 패브릭 PHY(298)에 양방향으로 연결되어 데이터 센터 패브릭에 APU(200)의 연결을 제공한다. 적응형 일관성 컨트롤러(ACC)(297)는 아래에 추가로 설명되는 바와 같이 패브릭 브리지(296) 및 CPU 코어 콤플렉스(210)에 메모리 일관성 제어 입력을 제공하기 위해 패브릭 브리지(296)에 양방향으로 연결된다. 동작 시, ACC(297)는 CPU 코어 콤플렉스(210)의 CPU 코어와 통신하여 지정된 메모리 액세스 명령어가 아래에 추가로 설명되는 것처럼 CPU 코어(212 및 214)에서 실행되는 μ코드(216)에 의해 인식되었다는 알림을 수신한다. ACC(297)는 또한 메모리 일관성 모델을 구성하기 위해 CPU 코어 컴플렉스(210)에 구성 입력을 제공한다.
도 3은 일부 실시예에 따른 FAM 시스템(300)의 특정 요소를 블록도 형태로 예시한다. FAM 시스템(300)은 일반적으로 컴퓨트 노드(302), 데이터 센터 패브릭(102), FAM 메모리 노드(310) 및 패브릭 관리자(320)를 포함한다.
컴퓨트 노드(302)는 데이터 센터 패브릭(102)에 연결된 많은 요청자 컴퓨트 노드 중 하나이며, 일반적으로 APU(200)와 같은 APU로 구현된다. 컴퓨트 노드(302)는 인터넷 서버, 애플리케이션 서버, 슈퍼컴퓨팅 노드, 또는 FAM에 액세스함으로써 이익을 얻는 또 다른 적합한 컴퓨팅 노드를 구현할 수 있다. 시스템의 관련 부분에 초점을 맞추기 위해 컴퓨트 노드(302)의 FAM 인터페이스 컴포넌트만 도시되어 있다. 컴퓨트 노드(302)는 패브릭 브리지(296), 패브릭 PHY(298) 및 ACC(297)를 포함한다.
패브릭 브리지(296)는 도 2와 관련하여 전술한 바와 같이 로컬 데이터 패브릭에 연결되고, PHY(298) 및 ACC(297)에 연결된다. 이 버전의 ACC(297)에는 마이크로컨트롤러(μC)(304)가 포함되어 있다. μC(304)는 아래에 설명된 바와 같이, 메모리 일관성 제어 기능을 수행하며, 일반적으로 기능을 수행하도록 μC(304)를 초기화하고 구성하기 위한 펌웨어를 보유하는 유형의 비일시적 메모리에도 연결된다.
μC(304)는 아래에 설명된 바와 같이 메모리 일관성 제어 기능을 수행하며, 일반적으로 기능을 수행하도록 μC(304)를 초기화하고 구성하기 위한 펌웨어를 보유하는 유형의 비일시적 메모리에도 연결된다.
패브릭 관리자(320)는 FAM 시스템(300)에 대한 구성 및 액세스를 관리하기 위해 데이터 센터 패브릭(102)에 연결된 컨트롤러이다. 패브릭 관리자(320)는 CXL 또는 Gen-Z와 같은 데이터 센터 패브릭(102)에 사용된 특정 표준에 대한 데이터 패브릭 관리 애플리케이션을 실행한다.데이터 패브릭 관리 애플리케이션은 FAM 시스템(300)의 다양한 노드 사이에서 메모리 리소스를 식별 및 구성함으로써 컴퓨트 노드 승인, 메모리 영역 할당, 결합성 관리와 같은 데이터 센터 패브릭 기능을 관리 및 구성한다. 하나의 FAM 메모리 노드(310)와 하나의 컴퓨트 노드(302)가 도시되어 있지만, 시스템은 도 1에 도시된 예시적인 구성과 같은 많은 구성으로 나타날 수 있는 다수의 이러한 노드를 포함한다는 점에 유의한다. 일부 실시예들에서, 패브릭 관리자(320)는 데이터 패브릭 관리 애플리케이션에 액세스하고 FAM 시스템(300) 전반에 걸쳐 각각의 컴퓨트 노드에 있는 각 ACC(297)에 데이터를 보고하기 위해 설치된 적응형 일관성 컨트롤러(ACC) 모듈(322)을 가지고 있다.
FAM 메모리 노드(310)는 매체 컨트롤러(312) 및 메모리(314)를 포함한다. 매체 컨트롤러(312)는 일반적으로 메모리(314)에서 사용하기 위해 선택되는 어떤 유형의 메모리에 적합한 메모리 컨트롤러를 포함한다. 예를 들어, 메모리(314)가 DRAM 메모리인 경우, DRAM 메모리 컨트롤러가 사용된다. 메모리(314)는 또한 영구 메모리 모듈을 포함할 수 있으며 혼합되어 있을 수도 있다. 일부 실시예들에서, ACC(297)는 컴퓨팅 노드(302)에 할당된 FAM 메모리 영역에 액세스하도록 승인된 다른 요청자와 관련된 FAM 메모리 노드(310)의 요청자 테이블(306)에 데이터를 유지한다. 요청자 테이블(306)은 동일한 메모리 영역에 액세스하도록 승인된 컴퓨트 노드에 대한 업데이트를 추적하고, 업데이트 시간을 반영하는 "타임스탬프", 컴퓨트 노드(302)에 할당된 FAM 메모리 영역에 대한 식별자를 반영하는 "영역 ID" 및 각 업데이트에서 메모리 영역에 액세스하도록 승인된 FAM 시스템(300)의 요청자 수를 반영하는 "# 요청자"에 대한 필드를 포함한다. 요청자 테이블(306)은 아래에 추가로 설명되는 바와 같이 패브릭 관리자(320)로부터의 보고에 기초하여 업데이트된다. 이 실시예에서, FAM 메모리 노드(310)는 요청자 테이블(306)을 보유하는 매체 컨트롤러(312)에 의해 액세스 가능한 버퍼를 포함한다.
도 4는 일부 실시예에 따른 ACC(297)의 동작 프로세스를 예시한 도면(400)을 도시한다. 다이어그램(400)은 데이터 패브릭의 요청자 컴퓨트 노드에서의 활동을 도시하고, 요청자 컴퓨트 노드의 CPU 코어 콤플렉스(210), 운영 체제(402), ACC(297) 및 패브릭 브리지(296)를 도시한다. 다이어그램(400)은 또한 패브릭 관리자(320) 및 데이터 패브릭 상의 많은 매체 컨트롤러 중 하나인 매체 컨트롤러(312)를 도시한다.
요청자가 패브릭 관리자(320)에 의해 시스템 메모리에 사용할 특정 FAM 영역을 할당받은 경우, ACC(297)는 "콜백(CALLBACK)"이라고 라벨링된 발신 요청에 의해 도시된 바와 같이, 패브릭 관리자(320)에 콜백 요청을 하여 동일한 메모리 영역을 요청자 컴퓨트 노드로 사용하도록 승인된 요청자의 수에 변경이 있을 때 알림을 요청한다. 패브릭 관리자(320)는 다이어그램(400)의 "# 사용자" 응답에 표시된 바와 같이, 메모리 영역을 사용하도록 승인된 요청자의 수가 변경될 때마다 ACC(297)에 다시 알림을 제공한다. 이 실시예에서, FAM 메모리 노드(310)의 요청자 테이블(306)(도 3)은 다이어그램(400)에서 매체 컨트롤러(312)로 가는 "# 사용자" 화살표로 표시된 바와 같이, 사용자 수가 변경될 때마다 업데이트된다. 일부 실시예들에서, ACC(287)는 ACC(297)에 로컬인 버퍼에 요청자 테이블을 유지한다. 일부 실시예들에서, 패브릭 관리자(320)에서 실행되는 ACC 모듈(322)(도 3)은 메모리 영역에 액세스하도록 승인된 요청자를 모니터링하고 ACC(297)에 알림을 보내는 프로세스를 관리한다. # 사용자 업데이트 알림을 기반으로, ACC(297)는 할당된 FAM 메모리 영역과 함께 사용할 일관성 모델을 설정한다. 일반적으로 이 프로세스에는 현재 요청자가 메모리 영역에 액세스하도록 승인된 유일한 요청자일 경우 일관성 모델을 제1 일관성 모델로 설정하고, 두 명 이상의 요청자가 메모리 영역에 액세스하도록 승인된 경우 일관성 모델을 제2 일관성 모델로 설정하는 것이 포함된다. 일관성 모델 설정은 "SET MODEL (FAMi) = (WB, FENCED)" 명령으로 표시되며, 여기서 "FAMi"는 관련된 패브릭 부착 메모리 영역을 식별하고, "WB, FENCED"는 활성화될 일관성 모델을 나타낸다. 일부 실시예들에서, 제1 일관성 모드는 제2 일관성 모델에 비해 완화된 것을 특징으로 한다. 이 프로세스의 일 예는 도 5와 관련하여 아래에 더 설명된다.
다이어그램(400)에서, CPU 코어 콤플렉스(210)에서 실행되는 μ코드(216)(도 2)는 활성화될 때 제2 일관성 모델을 구현하는 데 도움이 된다. 구체적으로, μ코드(216)는 요청자 노드에 할당된 패브릭 부착 메모리 영역에 관한 지정된 메모리 명령어에 대해 데이터 펜싱이 필요함을 나타내는 CPU 코어 콤플렉스(210)에서 실행되는 애플리케이션의 지정된 메모리 액세스 명령어를 인식한다. μ코드(216)는 도 6 및 도 7과 관련하여 아래에 추가로 설명된 바와 같이 지정된 명령어를 인식하는 다양한 방법을 갖는다. 이러한 명령어가 인식되면, μ코드(216)는 ACC(297)와 통신하여 패브릭 브리지(296)를 통해 데이터 패브릭으로 전송될 선택된 명령어를 식별하는 알림을 보낸다. 그런 다음 ACC(297)는 "펜스(FENCE)"로 라벨링된 나가는 화살표로 표시된 바와 같이 매체 컨트롤러(312)로 가는 명령 스트림에 펜스 명령을 추가한다. 제1 일관성 모델이 활성화되면, μ코드(216)는 이러한 알림을 하지 않고 대신 운영 체제(402)로 설정된 제1 일관성 모델에 의해 처리되는 메모리 일관성을 사용하여 선택된 명령이 정상적으로 실행되도록 할 수 있다. 이 실시예에서, μ코드(216)는 지정된 명령어를 인식하지만, 다른 실시예에서는 이 기능이 CPU 펌웨어 또는 CPU 펌웨어와 μ코드의 조합에 의해 수행된다.
다이어그램은 로컬 데이터센터 패브릭 및 글로벌 데이터센터 패브릭을 포함한 토폴로지에서 매체 컨트롤러(312)로 가는 펜스 명령을 보여 주지만, ACC(297)는 메모리 영역이 패브릭 토폴로지의 두 레벨 모두에 액세스하는 것을 포함하는 시나리오에서 로컬 데이터센터 패브릭 및 글로벌 데이터센터 패브릭 모두의 매체 컨트롤러에 펜스 명령이 전송되도록 한다.
도 5는 예시적인 실시예에 따른 적응형 일관성 컨트롤러에서 메모리 일관성 모델을 관리하기 위한 프로세스의 흐름도(500)를 도시한다. 프로세스는 데이터 패브릭의 요청자 노드가 지정된 FAM 메모리 영역에 액세스하도록 승인되는 블록(502)에서 시작된다. 이러한 승인은 일반적으로 패브릭 관리자에 의해 제공되지만 일부 실시예들에서는 다른 시스템 컴포넌트에 의해 구성될 수 있다. 승인에 기초하여 요청자 노드의 어드레스 지정이 가능한 시스템 메모리 공간에 메모리 영역이 설정된다. 메모리 영역은 일반적으로 다른 요청자 노드와 종속성을 가질 수 있는 요청자 노드에서 실행되는 애플리케이션에 사용된다.
블록(504)에서, 요청자 노드의 ACC(297)는 특정 메모리 영역에 액세스하도록 승인된 요청자 수의 변경 사항에 관한 알림을 패브릭 관리자에게 요청한다. 일 실시예에서, 이 요청은 FAM 영역에 액세스하는 컴퓨트 요청자 수를 추적하기 위해 패브릭 관리자에 대한 콜백 요청 형식을 갖는다. ACC 모듈(322)(도 3)은 이러한 요청을 수신하고 패브릭 관리자에서 요청을 구현하거나 요청을 구현하도록 패브릭 관리자를 구성하기 위해 사용될 수 있다. 다른 실시예들에서, 패브릭 관리자는 패브릭 관리자 애플리케이션의 일부로 이러한 기능을 가질 수 있으며 추가 모듈을 필요로 하지 않는다.
블록(506)에서, 요청자 노드의 ACC(297)는 요청에 응답하여 패브릭 관리자로부터 알림을 수신한다. 이 알림에 기초하여, ACC(297)는 현재 FAM 영역을 사용하도록 승인된 요청자의 수를 결정하고 요청자 테이블(306)(도 3)을 업데이트한다. 일부 실시예들에서, 알림에는 타임스탬프, 영역 ID 및 # 요청자를 포함하여 요청자 테이블(306)에 사용된 데이터 필드가 포함된다. 다른 실시예들에서, 패브릭 관리자는 모든 데이터를 제공하지 않고 대신 FAM 영역에 대해 요청자 권한이 추가 또는 제거되었음을 나타내는 데이터만 제공할 수 있다. 이러한 경우, ACC(297)는 현재 알림 데이터 및 요청자 테이블(306)에 대한 이전 업데이트에 기초하여 요청자 테이블(306)의 데이터를 업데이트할 것이다.
블록(508)에서, 메모리 영역에 대해 둘 이상의 요청자가 승인된 경우, 프로세스는 블록(510)으로 진행된다. 그렇지 않은 경우, 프로세스는 블록(512)으로 진행된다. 블록(510)에서, 프로세스는 FAM 영역과 관련된 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 한다. 블록(508)에서 승인된 단 한 명의 요청자에서 둘 이상의 요청자로 전환이 이루어지면, 프로세스에는 도 4와 관련하여 설명된 바와 같이 요청자 노드에서 제1 메모리 일관성 모델을 비활성화시키고 제2 메모리 일관성 모델을 활성화시키는 것이 포함된다. 블록(508)에서 둘 이상의 요청자가 이미 승인된 경우, 제2 메모리 일관성 모델은 이미 활성화되어 있으므로 변경될 필요가 없다.
블록(512)에서, 블록(506)에서 수신된 업데이트 알림은 단 한 명의 요청자만이 FAM 영역에 대해 승인되는 상태를 초래하므로, 프로세스는 제1 메모리 일관성 모델을 활성화한다. 일부 실시예들에서, 제1 메모리 일관성 모델에는 FAM 영역을 단일 요청자에 대한 후기입(write-back) 메모리로 매핑하는 것이 포함된다. FAM 영역을 로컬 컴퓨트 노드에 대한 후기입 메모리로 매핑하는 것은 바람직하게는 ACC(297)가 CPU 코어 콤플렉스(210)에서 실행되는 운영 체제에 적절한 메시지를 전송함으로써 달성되며, 이는 이후 FAM 영역에 대응하는 메모리 페이지 또는 페이지들을 요청자의 페이지 테이블에 후기입으로 표기한다. FAM 영역을 후기입 메모리로 매핑하면, 일반적인 로컬 일관성 체계(예컨대 x86 TSO(total-store-order) 일관성 체계)가 컴퓨트 노드에 의해 FAM 영역에 대해 적용될 것임을 보장한다. FAM 영역에 대해 단 한 명의 요청자만 승인된 경우, 로컬 메모리가 아닌 FAM을 사용하기 위해 애플리케이션 기능을 변경할 필요가 없다. 블록(506, 508, 510 및 512)의 프로세스는 패브릭 관리자가 관련된 FAM 메모리 영역에 대한 업데이트 알림을 보낼 때마다 반복된다.
도 6은 일부 실시예에 따른 메모리 일관성 모델을 구현하기 위한 프로세스의 흐름도(600)를 도시한다. 일반적으로, 원래 FAM 시스템과 함께 사용하기 위해 작성되지 않은 애플리케이션이 컴퓨트 노드 간에 종속성이 있는 경우 FAM 시스템이 컴퓨트 노드 간의 종속성을 적절하게 설명하려면 수정이 필요하다. 이러한 수정은 코드를 컴파일할 때 이루어질 수 있거나, 애플리케이션에서 선택한 메모리 명령에 명령어를 추가하여 사후에 적용될 수도 있다. 도 6의 프로세스는 FAM 시스템과 함께 사용하기 위해 애플리케이션을 적응시키기 위해 컴파일 시간 명령어가 추가된 애플리케이션에 대해 수행된다. 이러한 애플리케이션에는 FAM 시스템에서 일관성을 처리하기 위한 도구를 사용하여 작성 및 컴파일된 애플리케이션, 및 FAM 시스템과 함께 사용하도록 적응되도록 적절한 도구로 수정된 애플리케이션이 포함된다.
블록(602)에서, 애플리케이션에 포함된 컴파일 시간 명령어를 사용하여 애플리케이션에 대한 펜스를 활성화하는 프로세스가 시작된다. 블록(602)은 ACC(297)가 컴퓨트 노드에 대한 일관성 모델을 변경하여 제2의 보다 완화된 일관성 모델을 활성화할 때 발생한다. 일반적으로, CXL 3.0 및 Gen-Z와 같은 데이터 패브릭 프로토콜은 펜스를 통해 구현되는 완화된 순서 일관성 모델을 사용한다. 완화된 일관성 모델이 활성화되면, ACC(297)는 애플리케이션 코드에 투명하게 중요한 위치에 CXL/Gen-Z 펜스와 같은 데이터센터 패브릭 펜스를 삽입하려고 한다. 이러한 투명성은 ACC(297)에 의해 수행되는 활동이 관련된 애플리케이션에 의한 조정을 요구하지 않아야 함을 의미한다.
블록(604)에서, 프로세스는 선택된 메모리 액세스 명령어에 대한 컴파일 시간 패브릭 인터페이스 명령어를 인식한다. 일반적으로, 선택된 메모리 액세스 명령어는 컴퓨트 스레드 간에 병렬 동기화를 수행하는 플래그, 잠금, 세마포어, 제어 변수 등과 같은 코드의 일부이므로, 메모리 액세스는 순서화될 필요가 있다. 선택된 메모리 액세스 명령어의 위치는 소프트웨어 개발자에 의해 여러 메커니즘을 통해 적응형 컨트롤러에 제공될 수 있는 애플리케이션의 힌트를 통해 식별된다.
C++11 atomic_load/atomic_store 일관성 구성이나 프리미티브와 같은 컴파일러 힌트 또는 OpenMP의 플러시 구성과 같은 런타임 힌트는 "CodeAnalyst" 도구(캘리포니아주 산타클라라에 있는 Advanced Micro Devices 제공)와 같은 개발 도구와 통합되어 개발자가 공유하기 더 쉬운 일관성 힌트를 만들 수 있다. 컴파일러는 표시된 제어 변수 앞에 특수 "FABRIC_ACQUIRE_FENCE" 명령어, 제어 변수 뒤에 특수 "FABRIC_RELEASE_FENCE" 명령어와 같은 요청자 측 패브릭 인터페이스 마커를 삽입한다. 이러한 특수 명령어 또는 마커는 비-FAM 시스템 또는 관련 FAM 영역에 액세스하는 요청자 노드가 하나만 있는 FAM 시스템에서 CPU의 μ코드(216)에 의해 NOP(no-operation)로 변환되지만, 둘 이상의 애플리케이션이 관련 FAM 영역에 액세스할 수 있도록 승인된 경우 블록(604)에서 μ코드(216)에 의해 인식된다.
이러한 명령어를 인식하는 것에 응답하여, 블록(606)에서, CPU μ코드(216)는 ACC(297)에 도 4의 선택된 명령어 화살표로 도시된 바와 같이 명령어에 대한 패브릭 펜스가 필요하다는 것을 알린다. 일부 실시예들에서, 이러한 알림은 CPU에서 ACC(297)로의 로컬 데이터 패브릭을 통한 메시지와 함께 발생한다. 알림에는 관련된 변수의 메모리 어드레스와 같이 로컬 데이터 패브릭을 통해 수신될 때 명령어를 식별하기 위한 ACC(297)에 대한 식별 정보가 포함된다. 다른 실시예들에서, 알림은 명령어가 CPU에 의해 로컬 데이터 패브릭을 통해 패브릭 브리지(296)로 전송될 때 수정될 메모리 액세스 명령어에 미리 결정된 플래그 또는 마커를 추가함으로써 구현될 수 있다. 일부 실시예들에서, 이러한 마커에는 펜스 획득 명령어가 필요한지, 펜스 해제 명령어가 필요한지 여부를 결정하는 데 필요한 정보가 포함된다.
블록(608)에서, 각 알림을 수신하는 것에 응답하여, ACC(297)는 데이터센터 패브릭 펜스 획득/해제를 발행할 것이다. 이들 펜스는 도 4의 FENCE 화살표로 도시된 바와 같이 데이터 패브릭으로 그리고 관련 FAM 영역에 대한 매체 컨트롤러로 가는 명령 스트림에 삽입된 명령이다. 그런 다음 매체 컨트롤러는 관련된 변수에 대한 펜스를 제공하는 명령을 구현한다.
도시된 프로세스는 애플리케이션이 FABRIC_ACQUIRE_FENCE 및 FABRIC_RELEASE_FENCE 명령어를 포함하도록 이미 수정된 후에 발생하지만, 일부 실시예들에서 프로세스는 또한 μ코드(216)가 선택된 메모리 명령어를 인식할 수 있도록 이러한 힌트 또는 마커를 애플리케이션에 삽입하는 것을 포함한다.
도 7은 일부 추가적인 실시예들에 따른 메모리 일관성 모델을 구현하기 위한 또 다른 프로세스의 흐름도(700)를 도시한다. 설명된 프로세스는 패브릭 펜스 구현을 위한 컴파일 시간 명령어로 수정되지 않은 애플리케이션에 대해 수행된다. 이 프로세스는 개발자가 FAM 시스템과 함께 사용하도록 구성된 버전을 제공하지 않은 애플리케이션은 이러한 사용에서 일반적으로 발생하는 일관성 문제를 일으키지 않고 계속 FAM 시스템과 함께 사용할 수 있다는 이점이 있다. 또 다른 이점은 FAM 시스템과 함께 사용할 애플리케이션 버전을 얻기 위해 별도의 또는 더 비싼 소프트웨어 라이센스가 필요한 배포의 경우, 프로세스를 통해 FAM 시스템과 함께 비-FAM 버전을 사용할 수 있다는 것이다.
블록(702)에서, 프로세스는 이러한 애플리케이션에 대한 FAM 펜스 활성화를 시작한다. 이 프로세스에서는 펜스 명령이 필요한 선택된 메모리 액세스 명령어를 인식하는 것이 도 6의 프로세스와 다른데, 왜냐하면 패브릭 펜스에 대한 애플리케이션에는 구체적인 명령어가 포함되어 있지 않기 때문이다. 블록(704)에서, CPU μ코드(216)는 미리 결정된 명령어 유형 목록과 스레드 간 데이터 동기화와 관련된 명령어 접두사의 명령어 인식을 기반으로 펜스가 필요한 애플리케이션의 메모리 액세스 명령어를 인식한다. 일부 실시예들에서, 선택된 메모리 액세스 명령어를 인식할 수 있는 모든 유형의 애플리케이션을 포괄하기 위해 μ코드(216)에 대해 미리 결정된 목록이 제공된다. 목록에는 애플리케이션 간의 종속성과 연관된 명령어 및 명령어 접두사가 포함된다. 예를 들어, 이 목록에는 x86의 LOCK 명령어 접두사, X86의 xacquire/xrelease 및 PowerPC의 SYNC 명령어가 포함될 수 있다.
블록(706)에서, 이 미리 정의된 목록의 명령이 호출될 때마다, CPU μ코드(216)는 ACC(297)에 알리고, 그런 다음 블록(708)에 도시된 바와 같이 패브릭 펜스를 발행할 것이다.
FAM 메모리 인터페이스(295) 또는 ACC(297)나 패브릭 브리지(296)와 같은 그 임의의 부분은 데이터베이스 형태의 컴퓨터 액세스 가능한 데이터 구조 또는 프로그램에 의해 판독되고 집적 회로를 제조하는 데 직접 또는 간접적으로 사용될 수 있는 다른 데이터 구조에 의해 설명되거나 표현될 수 있다. 예를 들어, 이 데이터 구조는 Verilog 또는 VHDL과 같은 고수준 설계 언어(high level design language; HDL)의 하드웨어 기능에 대한 동작 수준 설명 또는 레지스터 전송 수준(register-transfer level; RTL) 설명일 수 있다. 설명은 합성 라이브러리로부터의 게이트 목록을 포함하는 넷리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 넷리스트에는 집적 회로를 포함한 하드웨어의 기능을 나타내는 게이트 세트가 포함되어 있다. 그런 다음 넷트리스트가 배치되고 라우팅되어 마스크에 적용될 기하학적 형상을 설명하는 데이터 세트를 생성한다. 마스크는 그런 다음 다양한 반도체 제조 단계에서 사용되어 집적 회로를 생성할 수 있다. 대안으로, 컴퓨터에 접근 가능한 저장 매체의 데이터베이스는 넷리스트(합성 라이브러리가 있거나 없는) 또는 원하는 대로 데이터 세트 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
특정 실시예가 설명되었지만, 이들 실시예에 대한 다양한 변형이 당업자에게 명백할 것이다. 예를 들어, 패브릭 브리지(296)와 ACC(297)의 내부 아키텍처는 서로 다른 실시예에서 달라질 수 있다. 사용되는 FAM 유형과 FAM 프로토콜도 다를 수 있다. 또한, 특정 패브릭 아키텍처는 PCIe 또는 CXL에 기반한 패브릭 프로토콜 및 전송을 사용하여 데이터 노드 또는 다수의 데이터 노드의 랙 내에서 분리를 제공하는 아키텍처에서, 장치와 이러한 Gen-Z와 같은 프로토콜을 사용한 데이터 센터 사이를 연결하는 파이버 또는 구리 네트워크를 사용할 수 있는 아키텍처까지 다양할 수 있다.따라서, 첨부된 청구범위는 개시된 실시예의 범위 내에 속하는 개시된 실시예의 모든 수정을 포괄하도록 의도된다.

Claims (27)

  1. 패브릭 부착 메모리 및 패브릭을 통해 상기 패브릭 부착 메모리에 결합된 복수의 요청자를 포함하는 패브릭 부착 메모리 시스템과 함께 사용하기 위한 방법으로서,
    패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 패브릭 관리자에게 요청하는 단계; 및
    둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 단일 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 상기 메모리 영역을 상기 단일 요청자에 대한 후기입(write-back) 메모리 영역으로 매핑하는 단계를 더 포함하는, 방법.
  3. 제2항에 있어서, 둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 그렇게 승인된 각 요청자에 대해,
    상기 요청자가 로컬 펜스 명령을 발행하도록 구성된 경우, 상기 선택된 메모리 액세스 명령어에 대해 로컬 펜스 명령이 발행되도록 하고 상기 패브릭 부착 메모리 영역을 상기 요청자에 대한 연속 기입(write-through) 메모리로 매핑하는 단계; 및
    상기 요청자가 로컬 펜스 명령을 발행하도록 구성되지 않은 경우, 상기 패브릭 부착 메모리 영역을 캐시할 수 없는 것으로 매핑하는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서, 펜스가 활성화되도록 하는 단계는 상기 선택된 메모리 액세스 명령어를 요청자 사이의 종속성을 나타내는 것으로 인식하는 것에 응답하여, 요청자 측 적응형 일관성 컨트롤러가 상기 선택된 메모리 액세스 명령어에 대한 펜스 명령을 추가하도록 하는 단계를 포함하는, 방법.
  5. 제3항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 단계는 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 각 개별 요청자에서 실행되는 프로세서 명령어 마이크로코드에 의해 수행되는, 방법.
  6. 제4항에 있어서, 일관성 프리미티브 및 일관성 구성을 인식하는 것에 응답하여 컴파일 동안 요청자 패브릭 인터페이스 마커를 상기 애플리케이션에 삽입하는 단계를 더 포함하는, 방법.
  7. 제3항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 단계는 스레드 간의 데이터 동기화와 연관된 명령어 유형 및 명령어 접두사의 미리 결정된 목록에서의 명령어를 인식하는 것에 기초하는, 방법.
  8. 제1항에 있어서, 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 각 요청자에서, 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 상기 요청자의 테이블을 유지하고 상기 알림 각각에 응답하여 상기 테이블을 업데이트하는 단계를 더 포함하는, 방법.
  9. 제7항에 있어서, 상기 테이블은 적어도 패브릭 부착 메모리 영역 식별자 및 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 컴퓨트 요청자의 수를 포함하는, 방법.
  10. 데이터 프로세서에 있어서,
    애플리케이션을 실행하는 처리 코어;
    상기 프로세서 코어에 결합되고 데이터 패브릭에 결합되어 상기 처리 코어로부터 패브릭 부착 메모리로 메모리 액세스 명령어를 이행하도록 적응된 패브릭 부착 메모리 인터페이스;
    상기 처리 코어 및 상기 패브릭 부착 메모리 인터페이스에 결합되고,
    상기 데이터 프로세서가 액세스하도록 승인된 패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 상기 패브릭 부착 메모리에 대한 패브릭 관리자에게 요청하고;
    둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 동작 가능한 요청자 측 적응형 일관성 컨트롤러를 포함하는, 데이터 프로세서.
  11. 제10항에 있어서, 상기 요청자 측 적응형 일관성 컨트롤러는 단일 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 상기 패브릭 부착 메모리 영역이 후기입 메모리 영역으로 매핑되도록 더 동작하는, 데이터 프로세서.
  12. 제11항에 있어서, 상기 요청자 측 적응형 일관성 컨트롤러는 둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여,
    상기 데이터 프로세서가 로컬 펜스 명령을 발행하도록 구성된 경우, 상기 선택된 메모리 액세스 명령어에 대해 로컬 펜스 명령이 발행되도록 하고 상기 패브릭 부착 메모리 영역을 연속 기입 메모리로 매핑하고;
    상기 데이터 프로세서가 로컬 펜스 명령을 발행하도록 구성되지 않은 경우, 상기 패브릭 부착 메모리 영역이 캐시할 수 없는 것으로 매핑되도록 더 동작하는, 데이터 프로세서.
  13. 제10항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하기 위해 상기 프로세서 코어에 의해 액세스 가능하고 상기 프로세서 코어에 의해 실행 가능한 유형의 비일시적 메모리에 저장된 프로세서 명령어 마이크로코드를 더 포함하는, 데이터 프로세서.
  14. 제13항에 있어서, 상기 프로세서 명령어 마이크로코드는 상기 선택된 메모리 액세스 명령어를 요청자 사이의 종속성을 나타내는 것으로 인식하는 것에 응답하여, 상기 인식된 선택된 메모리 액세스 명령어를 상기 요청자 측 적응형 일관성 컨트롤러에 알려 요청자 측 펜스 명령을 상기 패브릭 부착 메모리 인터페이스에 대한 메모리 명령에 삽입하도록 실행하는, 데이터 프로세서.
  15. 제13항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 것은 일관성 프리미티브 및 일관성 구성 중 하나를 포함하는 상기 로컬 애플리케이션의 표시자를 인식하는 것에 대한 응답을 포함하는, 데이터 프로세서.
  16. 제13항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 것은 컴파일 동안 상기 애플리케이션에 삽입된 패브릭 인터페이스 마커를 인식하는 것을 포함하는, 데이터 프로세서.
  17. 제10항에 있어서, 상기 요청자 측 적응형 일관성 컨트롤러는 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 상기 요청자의 테이블을 유지하고 상기 알림 각각에 응답하여 상기 테이블을 업데이트하는, 데이터 프로세서.
  18. 제19항에 있어서, 상기 테이블은 적어도 패브릭 부착 메모리 영역 식별자 및 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 컴퓨트 요청자의 수를 포함하는, 데이터 프로세서.
  19. 패브릭 부착 메모리 시스템에 있어서,
    패브릭 부착 메모리;
    상기 패브릭 부착 메모리에 결합된 데이터 패브릭;
    상기 데이터 패브릭에 결합되고 상기 패브릭 부착 메모리의 메모리 영역에 액세스하기 위해 요청자를 승인하고 승인을 취소하도록 동작 가능한 패브릭 관리자;
    상기 데이터 패브릭에 결합된 복수의 데이터 프로세서로서, 각각은 애플리케이션을 실행하는 처리 코어, 패브릭 부착 메모리 인터페이스, 및 상기 처리 코어와 상기 패브릭 부착 메모리 인터페이스에 결합되어,
    상기 데이터 프로세서가 액세스하도록 승인된 패브릭 부착 메모리 영역에 액세스하도록 승인된 요청자의 변경 사항에 관한 알림을 상기 패브릭 관리자에게 요청하고;
    둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 로컬 애플리케이션에서 선택된 메모리 액세스 명령어에 대해 펜스가 활성화되도록 동작 가능한 요청자 측 적응형 일관성 컨트롤러를 포함하는, 상기 복수의 데이터 프로세서를 포함하는, 패브릭 부착 메모리 시스템.
  20. 제19항에 있어서, 상기 요청자 측 적응형 일관성 컨트롤러는 단일 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여, 상기 패브릭 부착 메모리 영역이 후기입 메모리 영역으로 매핑되도록 더 동작하는, 패브릭 부착 메모리 시스템.
  21. 제20항에 있어서, 각 개별 요청자 측 적응형 일관성 컨트롤러는 둘 이상의 요청자가 상기 패브릭 부착 메모리 영역에 액세스하도록 승인되었음을 나타내는 상기 패브릭 관리자로부터의 알림에 응답하여,
    상기 각각의 요청자 측 적응형 일관성 컨트롤러의 상기 데이터 프로세서가 로컬 펜스 명령을 발행하도록 구성된 경우, 상기 선택된 메모리 액세스 명령어에 대해 로컬 펜스 명령이 발행되도록 하고 상기 패브릭 부착 메모리 영역을 연속 기입 메모리로 매핑하고;
    상기 요청자 측 적응형 일관성 컨트롤러의 상기 데이터 프로세서가 로컬 펜스 명령을 발행하도록 구성되지 않은 경우, 상기 패브릭 부착 메모리 영역이 캐시할 수 없는 것으로 매핑되도록 더 동작하는, 패브릭 부착 메모리 시스템.
  22. 제19항에 있어서, 각 개별 데이터 프로세서는 상기 선택된 메모리 액세스 명령어를 인식하기 위해 상기 각각의 데이터 프로세서의 상기 프로세서 코어에 의해 액세스 가능하고 상기 프로세서 코어에 의해 실행 가능한 유형의 비일시적 메모리에 저장된 프로세서 명령어 마이크로코드를 포함하는, 패브릭 부착 메모리 시스템.
  23. 제19항에 있어서, 상기 프로세서 명령어 마이크로코드는 상기 선택된 메모리 액세스 명령어를 요청자 사이의 종속성을 나타내는 것으로 인식하는 것에 응답하여, 상기 인식된 선택된 메모리 액세스 명령어를 상기 요청자 측 적응형 일관성 컨트롤러에 알려 요청자 측 펜스 명령을 상기 패브릭 부착 메모리 인터페이스에 대한 메모리 명령에 삽입하도록 실행하는, 패브릭 부착 메모리 시스템.
  24. 제19항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 것은 일관성 프리미티브 및 일관성 구성 중 하나를 포함하는 상기 로컬 애플리케이션의 표시자를 인식하는 것을 포함하는, 패브릭 부착 메모리 시스템.
  25. 제19항에 있어서, 상기 선택된 메모리 액세스 명령어를 인식하는 것은 컴파일 동안 상기 애플리케이션에 삽입된 패브릭 인터페이스 마커를 인식하는 것을 포함하는, 패브릭 부착 메모리 시스템.
  26. 제19항에 있어서, 상기 요청자 측 적응형 일관성 컨트롤러는 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 상기 요청자의 테이블을 유지하고 상기 알림 각각에 응답하여 상기 테이블을 업데이트하는, 패브릭 부착 메모리 시스템.
  27. 제26항에 있어서, 상기 테이블은 적어도 패브릭 부착 메모리 영역 식별자 및 상기 패브릭 부착 메모리 영역에 액세스하도록 승인된 컴퓨트 요청자의 수를 포함하는, 패브릭 부착 메모리 시스템.
KR1020237037631A 2021-03-31 2022-03-16 분산된 데이터센터의 적응형 메모리 일관성 KR102629550B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/219,505 2021-03-31
US17/219,505 US11656796B2 (en) 2021-03-31 2021-03-31 Adaptive memory consistency in disaggregated datacenters
PCT/US2022/020607 WO2022212061A1 (en) 2021-03-31 2022-03-16 Adaptive memory consistency in disaggregated datacenters

Publications (2)

Publication Number Publication Date
KR20230158127A true KR20230158127A (ko) 2023-11-17
KR102629550B1 KR102629550B1 (ko) 2024-01-25

Family

ID=83449085

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237037631A KR102629550B1 (ko) 2021-03-31 2022-03-16 분산된 데이터센터의 적응형 메모리 일관성

Country Status (6)

Country Link
US (1) US11656796B2 (ko)
EP (1) EP4315047A4 (ko)
JP (1) JP2024514502A (ko)
KR (1) KR102629550B1 (ko)
CN (1) CN117120976A (ko)
WO (1) WO2022212061A1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7454580B2 (en) * 2006-04-25 2008-11-18 International Business Machines Corporation Data processing system, processor and method of data processing that reduce store queue entry utilization for synchronizing operations
US20120174083A1 (en) * 2008-06-19 2012-07-05 Tatiana Shpeisman Dynamic optimization for removal of strong atomicity barriers

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5210832A (en) * 1986-10-14 1993-05-11 Amdahl Corporation Multiple domain emulation system with separate domain facilities which tests for emulated instruction exceptions before completion of operand fetch cycle
US7991981B2 (en) * 2008-02-01 2011-08-02 International Business Machines Corporation Completion of asynchronous memory move in the presence of a barrier operation
US8131935B2 (en) * 2009-04-07 2012-03-06 International Business Machines Corporation Virtual barrier synchronization cache
GB2469299B (en) * 2009-04-07 2011-02-16 Imagination Tech Ltd Ensuring consistency between a data cache and a main memory
TWI602181B (zh) * 2012-02-29 2017-10-11 三星電子股份有限公司 記憶體系統以及使用測試元件傳輸失效位址至記憶體元件的操作方法
US9513975B2 (en) 2012-05-02 2016-12-06 Nvidia Corporation Technique for computational nested parallelism
US9442755B2 (en) 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
US10241945B2 (en) * 2015-11-05 2019-03-26 International Business Machines Corporation Memory move supporting speculative acquisition of source and destination data granules including copy-type and paste-type instructions
US20180336034A1 (en) * 2017-05-17 2018-11-22 Hewlett Packard Enterprise Development Lp Near memory computing architecture
US10705951B2 (en) * 2018-01-31 2020-07-07 Hewlett Packard Enterprise Development Lp Shared fabric attached memory allocator
US10620856B2 (en) 2018-03-06 2020-04-14 Vmware, Inc. Input/output (I/O) fencing with persistent reservation information in shared virtual storage environments
US10942824B2 (en) * 2018-10-08 2021-03-09 Hewlett Packard Enterprise Development Lp Programming model and framework for providing resilient parallel tasks

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7454580B2 (en) * 2006-04-25 2008-11-18 International Business Machines Corporation Data processing system, processor and method of data processing that reduce store queue entry utilization for synchronizing operations
US20120174083A1 (en) * 2008-06-19 2012-07-05 Tatiana Shpeisman Dynamic optimization for removal of strong atomicity barriers

Also Published As

Publication number Publication date
US20220317927A1 (en) 2022-10-06
EP4315047A4 (en) 2024-05-29
KR102629550B1 (ko) 2024-01-25
US11656796B2 (en) 2023-05-23
WO2022212061A1 (en) 2022-10-06
CN117120976A (zh) 2023-11-24
JP2024514502A (ja) 2024-04-02
EP4315047A1 (en) 2024-02-07

Similar Documents

Publication Publication Date Title
US11645099B2 (en) Parallel hardware hypervisor for virtualizing application-specific supercomputers
CN109582611A (zh) 加速器结构
KR100598668B1 (ko) 지연 시간이 적은 메모리 시스템 액세스
US10628314B2 (en) Dual clusters of fully connected integrated circuit multiprocessors with shared high-level cache
US10289785B1 (en) Platform architecture creation for a system-on-chip
CN109582605A (zh) 通过PCIe的一致性存储器设备
US8892805B2 (en) High performance system that includes reconfigurable protocol tables within an ASIC wherein a first protocol block implements an inter-ASIC communications protocol and a second block implements an intra-ASIC function
CN112835846A (zh) 片上系统
CN112835845A (zh) 用于管理形成例如微控制器的片上系统的调试的方法和对应片上系统
CN116583825A (zh) 多主机数据处理环境中的存储器迁移
US10339059B1 (en) Global socket to socket cache coherence architecture
KR102629550B1 (ko) 분산된 데이터센터의 적응형 메모리 일관성
Asokan Designing multiprocessor systems in platform studio
Mirian et al. Exploring pipe implementations using an OpenCL framework for FPGAs
Sung et al. Denovond: Efficient hardware for disciplined nondeterminism
US10891232B2 (en) Page-based memory operation with hardware initiated secure storage key update
US11954359B2 (en) Circular buffer architecture using local memories with limited resources
US11880304B2 (en) Cache management using cache scope designation
Zhang Dynamic task management in MPSoC platforms
Fu Architectural Support for Large-scale Shared Memory Systems
Paraskevas Enabling Direct-Access Global Shared Memory for Distributed Heterogeneous Computing
Sung DeNovo: rethinking the memory hierarchy for disciplined parallelism
Erickson Design and evaluation of a hierarchical bus multiprocessor
Nguyen Synchronization in timestamp-based cache coherence protocols
Cabarcas Jaramillo Castell: a heterogeneous cmp architecture scalable to hundreds of processors

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant