KR20220083848A - 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 - Google Patents
프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 Download PDFInfo
- Publication number
- KR20220083848A KR20220083848A KR1020227018954A KR20227018954A KR20220083848A KR 20220083848 A KR20220083848 A KR 20220083848A KR 1020227018954 A KR1020227018954 A KR 1020227018954A KR 20227018954 A KR20227018954 A KR 20227018954A KR 20220083848 A KR20220083848 A KR 20220083848A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- circuit
- request
- data
- atomic operation
- Prior art date
Links
- 230000004044 response Effects 0.000 claims abstract description 122
- 238000004891 communication Methods 0.000 claims description 142
- 238000000034 method Methods 0.000 claims description 92
- 238000012954 risk control Methods 0.000 claims description 33
- 230000009471 action Effects 0.000 claims description 20
- 230000008569 process Effects 0.000 description 32
- 239000000872 buffer Substances 0.000 description 31
- 238000010586 diagram Methods 0.000 description 23
- 238000012545 processing Methods 0.000 description 16
- 230000005540 biological transmission Effects 0.000 description 15
- 230000003139 buffering effect Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000004888 barrier function Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 239000000463 material Substances 0.000 description 4
- 238000005259 measurement Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 230000003595 spectral effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000003044 adaptive effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 235000019800 disodium phosphate Nutrition 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Multimedia (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
DRAM과 같은 제1 메모리 회로(125)에 결합 가능한 메모리 컨트롤러 회로(100)가 개시되고, 상기 메모리 컨트롤러 회로는 상기 제1 메모리 회로로부터 판독하거나 상기 제1 메모리 회로에 기입하기 위한 제1 메모리 제어 회로(155); SRAM과 같은 제2 메모리 회로(175); 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 판독 요청에 응답하여 상기 제2 메모리 회로로부터 판독하고, 만약 그렇지 않은 경우, 상기 판독 요청을 상기 제1 메모리 제어 회로에 전송하도록 적응된 제2 메모리 제어 회로(160); 미리 결정된 원자적 동작 회로부(185); 및 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 프로그래밍 가능한 원자적 동작 회로부(135)를 포함한다. 상기 제2 메모리 제어 회로는 또한 수신된 프로그래밍 가능한 원자적 동작 요청을 상기 프로그래밍 가능한 원자적 동작 회로부에 전송하고 상기 제2 메모리 회로의 캐시 라인에 대한 위험 비트를 설정한다.
Description
관련 출원에 대한 상호 참조
본 출원은 미국 가특허 출원 번호 62/623,331(출원일: 2018년 1월 29일, 발명자: Tony M. Brewer, 발명의 명칭: Memory Controller with Integrated Custom Atomic Unit)의 정규 출원이고 이의 우선권의 이익을 주장하며, 이 선출원은 본 출원과 함께 공동으로 양도되고, 그 전체 내용이 본 명세서에 완전히 기재된 것처럼 이와 완전히 동일한 효력 및 효과를 갖도록 전체 내용이 본 명세서에 병합된다.
기술 분야
본 발명은 일반적으로 메모리 컨트롤러에 관한 것으로, 보다 상세하게는, 반복적으로 액세스되는 메모리 위치에 대해 미리 결정된 및 프로그래밍 가능한 원자적 동작(predetermined and programmable atomic operations) 및 감소된 대기 시간을 모두 제공하는 메모리 컨트롤러에 관한 것이다.
연방 정부에서 후원하는 연구 또는 개발에 관한 진술
본 발명은 국방부(DOD-DARPA)에 의해 수여된 계약 번호 HR0011-16-3-0002 하에서 정부 지원으로 이루어졌다. 정부는 본 발명에 특정 권리를 가진다.
메모리 컨트롤러는 컴퓨팅 기술에서 어디에나 존재하며, 무엇보다도 메모리 컨트롤러는 메모리 회로로부터 데이터를 판독하고, 메모리 회로에 데이터를 기입하고, 메모리 회로에 보유된 데이터를 리프레시하도록 액세스를 제어한다. 다양한 메모리 컨트롤러가 상업적으로 이용 가능하고, 광범위한 애플리케이션에 일반적으로 적합하도록 설계되지만, 기계 학습 및 인공 지능("AI") 애플리케이션을 포함하는 특정 애플리케이션에는 최적화되어 있지 않다.
미국 특허 공개 번호 2007/0005908 A1(발명자: Lakshmanamurthy 등)은 별개의 I/O 에이전트가 원자적 동작을 수행하고 효과적으로 데이터를 페치(fetch)하기 위해 로드 또는 판독 동작일 뿐인 원자적 요청을 메모리 컨트롤러에 발행한 다음, 이 별개의 I/O 에이전트가 원자적 동작을 수행한 후, 결과 데이터를 저장을 위해 별도로 메모리 컨트롤러에 다시 기입하는 시스템을 개시한다. 미국 특허 공개 번호 2007/0005908 A1의 메모리 컨트롤러는 별개의 I/O 에이전트로부터 업데이트된 데이터가 다시 메모리에 기입될 때까지 캐시 라인을 잠그는 것으로 인해 원자적 동작을 전혀 수행하는 것이 아니라 단지 일부 메모리 관리를 제공하는 것일 뿐이다.
따라서, 고성능이고 에너지 효율적인 메모리 컨트롤러가 요구된다. 이러한 메모리 컨트롤러는, 예를 들어, 제한 없이, 고속 푸리에 변환("FFT") 동작 수행, 유한 임펄스 응답("FIR") 필터링, 및 더 큰 응용 분야에서 일반적으로 사용되는 다른 연산 집약적인 동작, 예를 들어, 합성 조리개 레이더(예를 들어, 메모리에 저장된 표(table)에 자주 액세스할 것을 요구하는 것), 5G 네트워킹 및 5G 기지국 운영, 기계 학습, AI, 스텐실 코드 동작, 및 스펙트럼 기술을 사용하는 그래프 클러스터링과 같은 그래프 분석 동작을 위해 상당하고 매우 빈번한 메모리 액세스를 요구하는 연산 집약적 커널 또는 동작, 예를 들어, 메모리에 저장된 데이터에 액세스할 수 있는 속도에 의해 성능이 제한될 수 있는 애플리케이션을 지원한다. 이러한 메모리 컨트롤러는 또한 원자적 동작에 대한 높은 처리량 및 낮은 대기 시간을 포함하여 높은 처리량 및 낮은 대기 시간을 위해 최적화되어야 한다. 또한 이러한 메모리 컨트롤러는 미리 결정된 원자적 동작 및 또한 프로그래밍 가능한 또는 사용자 정의된 원자적 동작을 모두 포함하여 광범위한 원자적 동작을 제공해야 한다.
아래에서 더 상세히 논의되는 바와 같이, 대표적인 장치, 시스템 및 방법은 고성능이고 에너지 효율적인 메모리 컨트롤러를 제공한다. 메모리 컨트롤러의 대표적인 실시형태는 예를 들어 제한 없이 고속 푸리에 변환("FFT") 동작 수행, 유한 임펄스 응답("FIR") 필터링, 및 더 큰 응용 분야에서 일반적으로 사용되는 다른 연산 집약적인 동작, 예를 들어, 합성 조리개 레이더, 5G 네트워킹 및 5G 기지국 운영, 기계 학습, AI, 스텐실 코드 동작, 및 스펙트럼 기술을 사용하는 그래프 클러스터링과 같은 그래프 분석 동작을 위해 상당하고 매우 빈번한 메모리 액세스를 요구하는 연산 집약적인 커널 또는 동작을 지원한다. 메모리 컨트롤러의 대표적인 실시형태는 원자적 동작에 대한 높은 처리량 및 낮은 대기 시간을 포함하여 높은 처리량 및 낮은 대기 시간을 위해 최적화된다. 또한 메모리 컨트롤러의 대표적인 실시형태는 미리 결정된 원자적 동작 및 또한 프로그래밍 가능한 또는 사용자 정의된 원자적 동작을 포함하여 광범위한 원자적 동작을 제공한다.
아키텍처 시뮬레이터를 사용하여 평가될 때, 메모리 컨트롤러의 대표적인 실시형태는 극적인 결과를 생성하였다. 예를 들어, 메모리 컨트롤러의 대표적인 실시형태는 최신 X86 서버 플랫폼에 비해 표준 GDDR6 DRAM 메모리를 사용하여 3배(3.48x) 더 나은 원자적 업데이트 성능을 제공하였다. 또한 예를 들어, 메모리 컨트롤러의 대표적인 실시형태는 또한 최신 X86 서버 플랫폼에 비해 (더 많은 메모리 뱅크(bank)를 갖는) 수정된 GDDR6 DRAM 메모리를 사용하여 17배(17.6x) 더 나은 원자적 업데이트 성능을 제공하였다.
메모리 컨트롤러의 대표적인 실시형태는 또한 매우 낮은 대기 시간 및 높은 처리량의 메모리 판독 및 기입 동작을 제공하였으며, 일반적으로 메모리 뱅크 이용 가능성, 에러 정정 오버헤드, 및 통신 네트워크와 메모리 및 캐시 디바이스 자체를 통해 이용 가능한 대역폭(Gb/s)에 의해서만 제한되어, 최대 대역폭에 도달할 때까지 일정한 대기 시간을 초래하였다.
메모리 컨트롤러의 대표적인 실시형태는 또한 미리 결정된 원자적 동작의 성능과 필적할 수 있는 프로그래밍 가능한 또는 사용자 정의된 원자적 동작에 대해 매우 높은 성능(높은 처리량 및 낮은 대기 시간)을 제공한다. 다중 메모리 액세스를 실행하는 대신에 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 메모리 컨트롤러의 회로부는 원자적 동작 요청을 프로그래밍 가능한 원자적 동작 회로부에 전송하고, 원자적 동작에 사용된 메모리 라인의 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하여, 이 메모리 라인에 대해 다른 동작(판독, 기입 또는 원자적 동작)이 수행되지 않는 것을 보장하며, 이후 원자적 동작이 완료될 때 이 위험 비트가 소거된다. 프로그래밍 가능한 또는 사용자 정의된 원자적 동작을 실행하는 프로그래밍 가능한 원자적 동작 회로부(135)에 제공되는 추가의 직접 데이터 경로는 통신 네트워크의 대역폭에 의해 부과된 임의의 제한 없이 그리고 통신 네트워크의 임의의 혼잡을 증가시키지 않으면서 추가 기입 동작을 허용한다.
대표적인 실시형태에서, 메모리 컨트롤러 회로는 제1 메모리 회로에 결합 가능하고, 상기 메모리 컨트롤러는, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로로서, 판독 요청에 응답하여 상기 제1 메모리 회로로부터 요청된 데이터를 판독하거나 또는 로드하고, 기입 요청에 응답하여 요청된 데이터를 상기 제1 메모리 회로에 기입하거나 또는 저장하도록 적응된 상기 제1 메모리 제어 회로; 제2 메모리 회로; 상기 제2 메모리 회로에 결합된 제2 메모리 제어 회로로서, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 판독 요청에 응답하여 상기 제2 메모리 회로로부터 상기 요청된 데이터를 판독하거나 또는 로드하고, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있지 않은 경우 상기 판독 요청을 상기 제1 메모리 제어 회로에 전송하도록 더 적응된 상기 제2 메모리 제어 회로; 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 미리 결정된 원자적 동작의 적어도 하나의 미리 결정된 원자적 동작을 수행하도록 적응된 미리 결정된 원자적 동작 회로부; 및 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 상기 프로그래밍 가능한 원자적 동작 회로부를 포함한다.
다른 대표적인 실시형태에서, 메모리 컨트롤러 회로가 제1 메모리 회로에 결합 가능하고, 상기 메모리 컨트롤러는, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로로서, 판독 요청에 응답하여 상기 제1 메모리 회로로부터 요청된 데이터를 판독하거나 또는 로드하고, 기입 요청에 응답하여 요청된 데이터를 상기 제1 메모리 회로에 기입하거나 또는 저장하도록 적응된 상기 제1 메모리 제어 회로; 상기 제1 메모리 제어 회로에 결합된 프로그래밍 가능한 원자적 동작 회로부로서, 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 상기 프로그래밍 가능한 원자적 동작 회로부; 제2 메모리 회로; 및 상기 제2 메모리 회로 및 상기 제1 메모리 제어 회로에 결합된 제2 메모리 제어 회로로서, 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 상기 원자적 동작 요청을 상기 프로그래밍 가능한 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하도록 적응된 상기 제2 메모리 제어 회로를 포함한다.
대표적인 실시형태에서, 상기 복수의 미리 결정된 원자적 동작은, 페치(Fetch) 및 AND, 페치 및 OR, 페치 및 XOR, 페치 및 가산, 페치 및 감산, 페치 및 증분, 페치 및 감분, 페치 및 최소, 페치 및 최대, 페치 및 스왑(Swap), 비교 및 스왑, 및 이들의 조합으로 구성된 그룹으로부터 선택된 적어도 2개의 미리 결정된 원자적 동작을 포함할 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작에 대응하는 복수의 프로세서 명령어를 저장하는 명령어 캐시; 상기 프로그래밍 가능한 원자적 동작에 대응하는 스레드 식별자를 저장하는 실행 큐(execution queue); 상기 명령어 캐시 및 상기 실행 큐에 결합된 코어 제어 회로로서, 상기 프로그래밍 가능한 원자적 동작에 대응하는 상기 스레드 식별자에 응답하여, 상기 프로그래밍 가능한 원자적 동작을 실행하기 위해 상기 명령어 캐시에서 시작 또는 다음 명령어 또는 명령어 어드레스를 선택하도록 적응된 상기 코어 제어 회로; 및 상기 프로그래밍 가능한 원자적 동작을 위한 적어도 하나의 명령어를 실행하고 결과 데이터를 생성하도록 적응된 프로세서 코어를 포함할 수 있다.
또한 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 상기 결과 데이터를 수신하고 상기 결과 데이터를 상기 제2 메모리 회로에 기입하기 위해 상기 결과 데이터를 상기 제2 메모리 제어 회로에 전송하기 위해 상기 프로세서 코어에 결합된 메모리 컨트롤러 인터페이스 회로를 더 포함할 수 있다. 대표적인 실시형태에서, 상기 메모리 컨트롤러 회로는, 통신 네트워크에 결합 가능하고 상기 메모리 컨트롤러 인터페이스 회로에 결합된 네트워크 통신 인터페이스를 더 포함할 수 있고, 상기 네트워크 통신 인터페이스는 상기 결과 데이터를 갖는 응답 데이터 패킷을 준비하고 상기 통신 네트워크 상에서 전송하도록 적응될 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 상기 프로그래밍 가능한 원자적 동작을 위한 상기 적어도 하나의 명령어를 실행함으로써 생성된 피연산자 데이터 및 중간 결과를 저장하기 위한 적어도 하나의 데이터 버퍼를 더 포함할 수 있다. 또한 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 상기 프로세서 코어에 결합된 네트워크 커맨드 큐로서, 결과 데이터를 저장하는 상기 네트워크 커맨드 큐; 및 상기 네트워크 커맨드 큐에 결합되고 통신 네트워크에 결합될 수 있는 네트워크 통신 인터페이스로서, 상기 결과 데이터를 갖는 응답 데이터 패킷을 준비하고 상기 통신 네트워크 상에서 전송하도록 적응된 상기 네트워크 통신 인터페이스를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 프로세서 코어는 데이터 버퍼에 결합될 수 있고, 상기 프로세서 코어는, 로드 비-버퍼링 명령어를 실행하여, 피연산자가 상기 데이터 버퍼에 저장되어 있는지 여부를 결정하고, 상기 데이터가 상기 데이터 버퍼에 저장되어 있지 않은 경우, 상기 제2 메모리 제어 회로에 대한 판독 요청을 생성하도록 더 적응될 수 있다. 대표적인 실시형태에서, 상기 프로세서 코어는 저장 및 잠금 소거 명령어를 실행하여 상기 제2 메모리 제어 회로에 대한 원자적 기입 요청을 생성하도록 더 적응될 수 있고, 상기 원자적 기입 요청은 상기 결과 데이터, 및 상기 결과 데이터를 상기 제2 메모리 회로에 기입한 후 메모리 위험 비트를 리셋하거나 또는 소거하기 위한 지정을 가질 수 있다. 대표적인 실시형태에서, 상기 프로세서 코어는 원자적 복귀 명령어를 실행하여 상기 결과 데이터를 상기 제2 메모리 회로에 기입한 후 메모리 위험 비트를 리셋하거나 또는 소거하도록 더 적응될 수 있다. 대표적인 실시형태에서, 상기 프로세서 코어는 원자적 복귀 명령어를 실행하여 상기 결과 데이터를 갖는 응답 데이터 패킷을 생성하도록 더 적응될 수 있다. 대표적인 실시형태에서, 상기 프로세서 코어는 원자적 복귀 명령어를 실행하여 원자적 동작을 완료하도록 더 적응될 수 있다.
대표적인 실시형태에서, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 상기 원자적 동작 요청은 물리적 메모리 어드레스, 프로그래밍 가능한 원자적 동작 식별자, 및 적어도 하나의 스레드 상태 레지스터 값을 포함한다. 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 스레드 상태 정보를 저장하는 적어도 하나의 레지스터를 더 포함할 수 있다. 이러한 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 상기 원자적 동작 요청을 수신한 것에 응답하여, 상기 물리적 메모리 어드레스, 상기 메모리 어드레스에 대응하는 임의의 데이터, 및 상기 적어도 하나의 스레드 상태 레지스터 값을 사용하여 상기 적어도 하나의 레지스터를 초기화하도록 더 적응될 수 있다.
대표적인 실시형태에서, 상기 메모리 컨트롤러 회로는, 통신 네트워크에 결합될 수 있고 상기 제1 메모리 제어 회로 및 상기 제2 메모리 제어 회로에 결합된 네트워크 통신 인터페이스를 더 포함할 수 있고, 상기 네트워크 통신 인터페이스는 상기 통신 네트워크로부터 수신된 복수의 요청 패킷을 디코딩하고, 복수의 응답 데이터 패킷을 준비하고 상기 통신 네트워크 상에서 전송하도록 적응될 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 사용자 정의된 원자적 동작, 다중 사이클 연산, 부동 소수점 연산 및 다중 명령어 연산을 수행하도록 적응된다.
대표적인 실시형태에서, 상기 메모리 컨트롤러 회로는 상기 제1 메모리 회로로부터 판독된 데이터를 상기 제2 메모리 회로로 기입하거나 또는 저장하도록 적응된 기입 병합 회로를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 제2 메모리 제어 회로는 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 원자적 동작 요청에 응답하여 상기 제2 메모리 회로로부터 상기 요청된 데이터를 판독하거나 로드하고, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있지 않은 경우 상기 원자적 동작 요청을 상기 제1 메모리 제어 회로에 전송하도록 더 적응된다. 대표적인 실시형태에서, 상기 제2 메모리 제어 회로는 기입 요청에 응답하거나 또는 원자적 동작 요청에 응답하여 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장하도록 더 적응된다. 대표적인 실시형태에서, 상기 제2 메모리 제어 회로는, 상기 제2 메모리 회로에 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 메모리 어드레스에서 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장한 후에, 설정된 위험 비트를 리셋하거나 또는 소거하도록 더 적응된다. 대표적인 실시형태에서, 상기 제2 메모리 제어 회로는, 기입 데이터를 갖고 상기 제2 메모리 회로에서 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 저장된 현재 데이터를 상기 제1 메모리 제어 회로에 전송하여 상기 현재 데이터를 상기 제1 메모리 회로에 기입하고, 상기 제2 메모리 회로의 상기 현재 데이터를 상기 기입 데이터로 덮어기입(즉, 덮어쓰기(overwrite))하도록 더 적응된다.
대표적인 실시형태에서, 상기 제2 메모리 제어 회로는, 기입 데이터를 갖고 상기 제2 메모리 회로에서 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 메모리 어드레스에 저장된 현재 데이터를 상기 제1 메모리 제어 회로에 전송하여 상기 현재 데이터를 상기 제1 메모리 회로에 기입하고, 상기 제2 메모리 회로의 상기 현재 데이터를 상기 기입 데이터로 덮어기입하고, 상기 메모리 어드레스에서 상기 제2 메모리 회로에 상기 기입 데이터를 기입하거나 또는 저장한 후, 설정된 위험 비트를 리셋하거나 또는 소거하도록 더 적응된다.
대표적인 실시형태에서, 상기 제2 메모리 제어 회로는 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여 상기 원자적 동작 요청을 상기 프로그래밍 가능한 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하도록 더 적응된다. 대표적인 실시형태에서, 상기 제2 메모리 제어 회로는 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여 상기 원자적 동작 요청을 상기 미리 결정된 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 미리 결정된 원자적 동작으로부터 결과 데이터를 상기 제2 메모리 회로에 기입하고, 상기 결과 데이터를 기입한 후에, 설정된 위험 비트를 리셋하거나 또는 소거하도록 더 적응된다.
대표적인 실시형태에서, 상기 제1 메모리 제어 회로는, 상기 제1 메모리 회로에 대한 복수의 판독 또는 기입 요청을 저장하는 복수의 메모리 뱅크 요청 큐; 상기 복수의 메모리 뱅크 요청 큐에 결합된 스케줄러 회로로서, 상기 복수의 메모리 뱅크 요청 큐로부터 상기 복수의 판독 또는 기입 요청의 판독 또는 기입 요청을 선택하고, 상기 제1 메모리 회로에 액세스하기 위해 상기 판독 또는 기입 요청을 스케줄링하도록 적응된 상기 스케줄러 회로; 및 상기 스케줄러에 결합된 제1 메모리 액세스 제어 회로로서, 상기 제1 메모리 회로로부터 데이터를 판독하거나 또는 로드하고 상기 제1 메모리 회로에 데이터를 기입하거나 또는 저장하도록 적응된 상기 제1 메모리 액세스 제어 회로를 포함할 수 있다.
대표적인 실시형태에서, 상기 제1 메모리 제어 회로는, 복수의 메모리 요청을 저장하는 복수의 메모리 요청 큐; 상기 복수의 메모리 요청 큐로부터 메모리 요청을 선택하기 위한 요청 선택 멀티플렉서; 상기 복수의 메모리 요청에 대응하는 데이터를 저장하는 복수의 메모리 데이터 큐; 및 상기 복수의 메모리 데이터 큐로부터 데이터를 선택하기 위한 데이터 선택 멀티플렉서로서, 상기 선택된 데이터는 선택된 메모리 요청에 대응하는, 상기 데이터 선택 멀티플렉서를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 제2 메모리 제어 회로는, 판독 요청 또는 기입 요청을 저장하는 네트워크 요청 큐; 원자적 동작 요청을 저장하는 원자적 동작 요청 큐; 상기 네트워크 요청 큐 및 상기 원자적 동작 요청 큐에 결합되고 상기 네트워크 요청 큐 또는 상기 원자적 동작 요청 큐로부터 요청을 선택하기 위한 인바운드 요청 멀티플렉서; 하나 이상의 메모리 위험 레지스터를 갖는 메모리 위험 제어 회로; 및 상기 메모리 위험 제어 회로 및 상기 인바운드 요청 멀티플렉서에 결합된 제2 메모리 액세스 제어 회로로서, 상기 선택된 요청에 응답하여 상기 제2 메모리 회로로부터 데이터를 판독하거나 또는 로드하거나 또는 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장하고, 상기 하나 이상의 메모리 위험 레지스터에 저장된 위험 비트를 설정하거나 또는 소거하는 신호를 상기 메모리 위험 제어 회로에 보내도록 적응된 상기 제2 메모리 액세스 제어 회로를 포함할 수 있다. 대표적인 실시형태에서, 상기 제2 메모리 제어 회로는, 상기 제2 메모리 액세스 제어 회로에 결합된 지연 회로; 및 상기 제1 메모리 회로에 액세스할 것을 요구하는 인바운드 네트워크 요청을 선택하거나 또는 상기 제2 메모리 회로의 캐시 라인이 판독 요청 또는 기입 요청으로부터의 데이터에 의해 덮어기입되기 전에 상기 제1 메모리 회로에 기입될 데이터를 포함하는 경우 상기 제2 메모리 회로로부터 캐시 퇴거 요청을 선택하기 위한 인바운드 제어 멀티플렉서를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 메모리 컨트롤러 회로는 통신 네트워크에 결합되고, 복수의 기입 데이터 요청 패킷, 복수의 판독 데이터 요청 패킷, 복수의 미리 결정된 원자적 동작 요청 패킷, 복수의 프로그래밍 가능한 원자적 동작 요청 패킷을 상기 메모리 컨트롤러 회로로 라우팅하고, 상기 메모리 컨트롤러 회로로부터 요청 소스 어드레스로 복수의 응답 데이터 패킷을 라우팅할 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는, 비-스위칭식 직접 통신 버스를 통해 상기 제1 메모리 제어 회로에 결합된 프로세서 회로를 포함할 수 있다.
대표적인 실시형태에서, 상기 제1 메모리 제어 회로, 상기 제2 메모리 회로, 상기 제2 메모리 제어 회로, 상기 미리 결정된 원자적 동작 회로부 및 상기 프로그래밍 가능한 원자적 동작 회로부는 단일 집적 회로 또는 단일 시스템 온 칩(SOC)으로서 구현될 수 있다.
대표적인 실시형태에서, 상기 제1 메모리 제어 회로, 상기 제2 메모리 회로, 상기 제2 메모리 제어 회로 및 상기 미리 결정된 원자적 동작 회로부는 제1 집적 회로로서 구현될 수 있고, 상기 프로그래밍 가능한 원자적 동작 회로부는 비-스위칭식 직접 통신 버스를 통해 상기 제1 집적 회로에 결합된 제2 집적 회로로서 구현될 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 판독 요청을 생성하고 상기 제2 메모리 회로에 대한 기입 요청을 생성하도록 적응된다. 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 산술 연산, 논리 연산 및 제어 흐름 결정을 수행하도록 적응된다.
대표적인 실시형태에서, 상기 제1 메모리 회로는 동적 랜덤 액세스 메모리(DRAM) 회로부를 포함하고, 상기 제2 메모리 회로는 정적 랜덤 액세스 메모리(SRAM) 회로를 포함한다.
메모리 컨트롤러 회로를 사용하여 프로그래밍 가능한 원자적 동작을 수행하는 대표적인 방법이 또한 개시되고, 상기 메모리 컨트롤러 회로는 제1 메모리 회로에 결합될 수 있고, 상기 방법은, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로를 사용하여, 판독 요청에 응답하여 상기 제1 메모리 회로로부터 요청된 데이터를 판독하거나 또는 로드하고 기입 요청에 응답하여 요청된 데이터를 상기 제1 메모리 회로에 기입하거나 또는 저장하는 단계; 제2 메모리 회로에 결합된 제2 메모리 제어 회로를 사용하여, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 판독 요청에 응답하여 상기 제2 메모리 회로로부터 상기 요청된 데이터를 판독하거나 또는 로드하고, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있지 않은 경우 상기 판독 요청을 상기 제1 메모리 제어 회로에 전송하는 단계; 미리 결정된 원자적 동작 회로부를 사용하여, 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 미리 결정된 원자적 동작의 적어도 하나의 미리 결정된 원자적 동작을 수행하는 단계; 및 프로그래밍 가능한 원자적 동작 회로부를 사용하여, 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하는 단계를 포함한다.
메모리 컨트롤러 회로를 사용하여 프로그래밍 가능한 원자적 동작을 수행하는 다른 대표적인 방법이 또한 개시되고, 상기 메모리 컨트롤러 회로는 제1 메모리 회로에 결합될 수 있고, 상기 방법은, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로를 사용하여, 판독 요청에 응답하여 상기 제1 메모리 회로로부터 요청된 데이터를 판독하거나 또는 로드하고 기입 요청에 응답하여 요청된 데이터를 상기 제1 메모리 회로에 기입하거나 또는 저장하는 단계; 제2 메모리 회로에 결합된 제2 메모리 제어 회로를 사용하여, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 판독 요청에 응답하여 상기 제2 메모리 회로로부터 상기 요청된 데이터를 판독하거나 또는 로드하고, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있지 않은 경우 상기 판독 요청을 상기 제1 메모리 제어 회로에 전송하고, 그리고 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 상기 원자적 동작 요청을 프로그래밍 가능한 원자적 동작 회로부에 전송하고 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하는 단계; 미리 결정된 원자적 동작 회로부를 사용하여, 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 미리 결정된 원자적 동작의 적어도 하나의 미리 결정된 원자적 동작을 수행하는 단계; 및 프로그래밍 가능한 원자적 동작 회로부를 사용하여, 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하는 단계를 포함한다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 데이터 버퍼에 결합된 프로세서 코어를 포함하고, 상기 방법은, 상기 프로세서 코어를 사용하여, 로드 비-버퍼링 명령어를 실행하여, 피연산자가 상기 데이터 버퍼에 저장되어 있는지 여부를 결정하고, 상기 데이터가 상기 데이터 버퍼에 저장되어 있지 않은 경우, 상기 제2 메모리 제어 회로에 대한 판독 요청을 생성하는 단계를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 프로세서 코어를 포함하고, 상기 방법은, 상기 프로세서 코어를 사용하여, 저장 및 잠금 소거 명령어를 실행하여 상기 제2 메모리 제어 회로에 대한 원자적 기입 요청을 생성하는 단계를 더 포함할 수 있고, 상기 원자적 기입 요청은 상기 결과 데이터, 및 상기 결과 데이터를 상기 제2 메모리 회로에 기입한 후 메모리 위험 비트를 리셋하거나 또는 소거하는 지정을 갖는다. 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 프로세서 코어를 포함하고, 상기 방법은, 상기 프로세서 코어를 사용하여, 원자적 복귀 명령어를 실행하여 상기 결과 데이터를 상기 제2 메모리 회로에 기입한 후 메모리 위험 비트를 리셋하거나 또는 소거하는 단계를 더 포함할 수 있다. 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 프로세서 코어를 포함하고, 상기 방법은, 상기 프로세서 코어를 사용하여, 원자적 복귀 명령어를 실행하여 상기 결과 데이터를 갖는 응답 데이터 패킷을 생성하는 단계를 더 포함할 수 있다. 또한 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 프로세서 코어를 포함하고, 상기 방법은, 상기 프로세서 코어를 사용하여 원자적 복귀 명령어를 실행하여 원자적 동작을 완료하는 단계를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 상기 원자적 동작 요청은 물리적 메모리 어드레스, 프로그래밍 가능한 원자적 동작 식별자 및 적어도 하나의 스레드 상태 레지스터 값을 포함한다. 이러한 대표적인 실시형태에서, 상기 프로그래밍 가능한 원자적 동작 회로부는 스레드 상태 정보를 저장하는 적어도 하나의 레지스터를 더 포함하고, 상기 방법은, 상기 프로그래밍 가능한 원자적 동작 회로부를 사용하여, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 상기 원자적 동작 요청을 수신한 것에 응답하여, 상기 물리적 메모리 어드레스, 상기 메모리 어드레스에 대응하는 임의의 데이터, 및 상기 적어도 하나의 스레드 상태 레지스터 값을 사용하여 상기 적어도 하나의 레지스터를 초기화하는 단계를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 방법은, 상기 제2 메모리 제어 회로를 사용하여, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있는 경우 원자적 동작 요청에 응답하여 상기 제2 메모리 회로로부터 상기 요청된 데이터를 판독하거나 또는 로드하고, 상기 요청된 데이터가 상기 제2 메모리 회로에 저장되어 있지 않은 경우 상기 원자적 동작 요청을 상기 제1 메모리 제어 회로에 전송하는 단계를 더 포함할 수 있다. 대표적인 실시형태에서, 상기 방법은, 상기 제2 메모리 제어 회로를 사용하여, 상기 제2 메모리 회로에 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 메모리 어드레스에서 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장한 후, 설정된 위험 비트를 리셋하거나 또는 소거하는 단계를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 방법은, 상기 제2 메모리 제어 회로를 사용하여, 기입 데이터를 갖고 상기 제2 메모리 회로에서 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 저장된 현재 데이터를 상기 제1 메모리 제어 회로에 전송하여 상기 현재 데이터를 상기 제1 메모리 회로에 기입하고, 상기 제2 메모리 회로의 상기 현재 데이터를 상기 기입 데이터로 덮어기입하는 단계를 더 포함할 수 있다. 대표적인 실시형태에서, 상기 방법은, 상기 제2 메모리 제어 회로를 사용하여, 기입 데이터를 갖고 상기 제2 메모리 회로에서 메모리 어드레스를 지정하는 기입 요청에 응답하여, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 메모리 어드레스에 저장된 현재 데이터를 상기 제1 메모리 제어 회로에 전송하여 상기 현재 데이터를 상기 제1 메모리 회로에 기입하고, 상기 제2 메모리 회로의 상기 현재 데이터를 상기 기입 데이터로 덮어기입하고, 상기 기입 데이터를 상기 메모리 어드레스에서 상기 제2 메모리 회로에 기입하거나 또는 저장한 후, 설정된 위험 비트를 리셋하거나 또는 소거하는 단계를 더 포함할 수 있다.
대표적인 실시형태에서, 상기 방법은, 상기 제2 메모리 제어 회로를 사용하여, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 상기 원자적 동작 요청을 상기 프로그래밍 가능한 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하는 단계를 더 포함할 수 있다.
다른 메모리 컨트롤러가 개시되고, 상기 메모리 컨트롤러는 상기 제1 메모리 회로에 결합될 수 있고, 상기 메모리 컨트롤러는, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로로서, 상기 제1 메모리 회로에 대한 복수의 판독 또는 기입 요청을 저장하는 복수의 메모리 뱅크 요청 큐; 상기 복수의 메모리 뱅크 요청 큐에 결합된 스케줄러 회로로서, 상기 복수의 메모리 뱅크 요청 큐로부터 상기 복수의 판독 또는 기입 요청의 판독 또는 기입 요청을 선택하고, 상기 제1 메모리 회로에 액세스하기 위해 상기 판독 또는 기입 요청을 스케줄링하도록 적응된 상기 스케줄러 회로; 및 상기 스케줄러에 결합된 제1 메모리 액세스 제어 회로로서, 상기 제1 메모리 회로로부터 데이터를 판독하거나 또는 로드하고 상기 제1 메모리 회로에 데이터를 기입하거나 또는 저장하도록 적응된 상기 제1 메모리 액세스 제어 회로를 포함하는, 상기 제1 메모리 제어 회로; 제2 메모리 회로; 복수의 미리 결정된 원자적 동작의 적어도 하나의 미리 결정된 원자적 동작을 수행하도록 적응된 미리 결정된 원자적 동작 회로부; 및 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 프로그래밍 가능한 원자적 동작 회로부; 및 상기 제2 메모리 회로에 결합된 제2 메모리 제어 회로를 포함하고, 상기 제2 메모리 제어 회로는, 판독 또는 기입 요청을 저장하는 적어도 하나의 입력 요청 큐; 메모리 위험 레지스터를 갖는 메모리 위험 제어 회로; 및 상기 제2 메모리 회로로부터 데이터를 판독하거나 또는 로드하고 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장하도록 적응된 제2 메모리 액세스 제어 회로를 포함하고, 상기 제2 메모리 액세스 제어 회로는, 상기 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 상기 원자적 동작 요청을 상기 미리 결정된 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하도록 더 적응된다.
다른 메모리 컨트롤러가 개시되고, 상기 메모리 컨트롤러는 제1 메모리 회로에 결합될 수 있고, 상기 메모리 컨트롤러는, 상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로로서, 상기 제1 메모리 회로에 대한 복수의 판독 또는 기입 요청을 저장하는 복수의 메모리 뱅크 요청 큐; 상기 복수의 메모리 뱅크 요청 큐에 결합된 스케줄러 회로로서, 상기 복수의 메모리 뱅크 요청 큐로부터 상기 복수의 판독 또는 기입 요청의 판독 또는 기입 요청을 선택하고, 상기 제1 메모리 회로에 액세스하기 위해 상기 판독 또는 기입 요청을 스케줄링하도록 적응된 상기 스케줄러 회로; 및 상기 스케줄러에 결합된 제1 메모리 액세스 제어 회로로서, 상기 제1 메모리 회로로부터 데이터를 판독하거나 또는 로드하고 상기 제1 메모리 회로에 데이터를 기입하거나 또는 저장하도록 적응된 상기 제1 메모리 액세스 제어 회로를 포함하는, 상기 제1 메모리 제어 회로; 제2 메모리 회로; 복수의 미리 결정된 원자적 동작의 적어도 하나의 미리 결정된 원자적 동작을 수행하도록 적응된 미리 결정된 원자적 동작 회로부; 및 복수의 프로그래밍 가능한 원자적 동작의 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 프로그래밍 가능한 원자적 동작 회로부; 및 상기 제2 메모리 회로에 결합된 제2 메모리 제어 회로를 포함하고, 상기 제2 메모리 제어 회로는, 판독 또는 기입 요청을 저장하는 적어도 하나의 입력 요청 큐; 메모리 위험 레지스터를 갖는 메모리 위험 제어 회로; 및 상기 제2 메모리 회로로부터 데이터를 판독하거나 또는 로드하고 상기 제2 메모리 회로에 데이터를 기입하거나 또는 저장하도록 적응된 제2 메모리 액세스 제어 회로를 포함하고, 상기 제2 메모리 액세스 제어 회로는, 상기 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청 및 메모리 어드레스에 응답하여, 상기 원자적 동작 요청을 상기 미리 결정된 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터에 저장된 위험 비트를 설정하고, 상기 미리 결정된 원자적 동작으로부터 결과 데이터를 상기 제2 메모리 회로에 기입하고, 상기 결과 데이터를 기입한 후, 설정된 위험 비트를 리셋하거나 소거하도록 더 적응된다.
본 발명의 다른 많은 장점 및 특징은 본 발명의 이하 상세한 설명 및 실시형태로부터 그리고 청구 범위 및 첨부 도면으로부터 쉽게 드러날 것이다.
본 발명의 목적, 특징 및 장점은 첨부 도면과 관련하여 고려될 때 이하 설명을 참조하면 보다 쉽게 이해될 수 있으며, 여러 도면에서 동일한 참조 부호는 동일한 구성 요소를 식별하는 데 사용되고, 알파벳 문자를 갖는 참조 부호는 여러 도면에서 선택된 구성 요소 실시형태의 추가적인 유형, 예시 또는 변형을 식별하는 데 이용된다.
도 1은 대표적인 제1 컴퓨팅 시스템 실시형태의 블록도;
도 2는 대표적인 제2 컴퓨팅 시스템 실시형태의 블록도;
도 3은 대표적인 제1 및 제2 메모리 컨트롤러 회로의 상위 레벨 블록도;
도 4는 대표적인 제1 메모리 컨트롤러 회로 실시형태의 블록도;
도 5는 대표적인 제2 메모리 컨트롤러 회로 실시형태의 블록도;
도 6a, 도 6b 및 도 6c(통칭하여 도 6이라고 함)는 대표적인 제2 메모리 제어 회로 실시형태, 대표적인 제1 메모리 제어 회로 실시형태, 및 대표적인 원자적 및 병합 동작 회로를 각각 도시하는 블록도;
도 7a, 도 7b 및 도 7c(통칭하여 도 7이라고 함)는 요청을 수신하고 디코딩하고 판독 또는 로드 요청을 수행하는 대표적인 방법의 흐름도이고, 도 7a 및 도 7b는 요청을 수신하고 디코딩하고 제1 메모리 회로로부터 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시하고, 도 7c는 제2 메모리 회로로부터 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시하는 도면;
도 8a, 도 8b, 도 8c 및 도 8d(통칭하여 도 8이라고 함)는 원자적 동작 요청의 일부로서 원자적 동작을 수행하는 대표적인 방법을 도시하는 흐름도;
도 9는 판독(또는 로드) 요청의 일부로서 또는 기입(또는 저장) 요청의 일부로서 제2 메모리 회로로부터 데이터 퇴거를 수행하는 대표적인 방법을 도시하는 흐름도;
도 10은 기입 또는 저장 요청을 수행하는 대표적인 방법의 흐름도; 및
도 11은 대표적인 프로그래밍 가능한 원자적 동작 회로부 실시형태의 블록도.
도 1은 대표적인 제1 컴퓨팅 시스템 실시형태의 블록도;
도 2는 대표적인 제2 컴퓨팅 시스템 실시형태의 블록도;
도 3은 대표적인 제1 및 제2 메모리 컨트롤러 회로의 상위 레벨 블록도;
도 4는 대표적인 제1 메모리 컨트롤러 회로 실시형태의 블록도;
도 5는 대표적인 제2 메모리 컨트롤러 회로 실시형태의 블록도;
도 6a, 도 6b 및 도 6c(통칭하여 도 6이라고 함)는 대표적인 제2 메모리 제어 회로 실시형태, 대표적인 제1 메모리 제어 회로 실시형태, 및 대표적인 원자적 및 병합 동작 회로를 각각 도시하는 블록도;
도 7a, 도 7b 및 도 7c(통칭하여 도 7이라고 함)는 요청을 수신하고 디코딩하고 판독 또는 로드 요청을 수행하는 대표적인 방법의 흐름도이고, 도 7a 및 도 7b는 요청을 수신하고 디코딩하고 제1 메모리 회로로부터 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시하고, 도 7c는 제2 메모리 회로로부터 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시하는 도면;
도 8a, 도 8b, 도 8c 및 도 8d(통칭하여 도 8이라고 함)는 원자적 동작 요청의 일부로서 원자적 동작을 수행하는 대표적인 방법을 도시하는 흐름도;
도 9는 판독(또는 로드) 요청의 일부로서 또는 기입(또는 저장) 요청의 일부로서 제2 메모리 회로로부터 데이터 퇴거를 수행하는 대표적인 방법을 도시하는 흐름도;
도 10은 기입 또는 저장 요청을 수행하는 대표적인 방법의 흐름도; 및
도 11은 대표적인 프로그래밍 가능한 원자적 동작 회로부 실시형태의 블록도.
본 발명은 많은 상이한 형태의 실시형태를 가질 수 있지만, 본 명세서는 본 발명의 원리를 예시하는 것으로 고려되는 것일 뿐 본 발명을 예시된 특정 실시형태로 제한하려고 의도된 것은 아닌 것으로 이해하면서 본 발명의 특정 예시적인 실시형태가 도면에 도시되고 본 명세서에 상세히 설명된다. 이와 관련하여, 본 발명에 따른 적어도 하나의 실시형태를 상세하게 설명하기 전에, 본 발명은 그 적용에 있어서 도면에 도시되고 또는 실시예에 설명된 바와 같이 상기 및 하기에 제시된 구성의 상세 및 구성 요소의 배열로 제한되는 것은 아닌 것으로 이해된다. 본 발명에 따른 방법 및 장치는 다른 실시형태도 가능하고 다양한 방식으로 실시되고 수행될 수 있다. 또한, 본 명세서에 사용된 어구 및 용어뿐만 아니라 아래에 포함된 요약서는 설명을 위한 것일 뿐 본 발명을 제한하는 것으로 고려되어서는 안 되는 것으로 이해된다.
도 1은 대표적인 제1 컴퓨팅 시스템(50) 실시형태의 블록도이다. 도 2는 대표적인 제2 컴퓨팅 시스템(50A) 실시형태의 블록도이다. 도 3은 대표적인 제1 및 제2 메모리 컨트롤러 회로의 상위 레벨 블록도이다. 도 4는 대표적인 제1 메모리 컨트롤러 회로(100) 실시형태의 블록도이다. 도 5는 대표적인 제2 메모리 컨트롤러 회로(100A) 실시형태의 블록도이다. 도 6a, 도 6b 및 도 6c로 도시된 도 6은 대표적인 제2 메모리 제어 회로 실시형태, 대표적인 제1 메모리 제어 회로 실시형태, 및 대표적인 원자적 및 병합 동작 회로를 각각 도시하는 블록도이다.
도 1 및 도 2는 비교적 더 크고 더 작은 시스템(50, 50A)을 형성하는 추가 구성 요소를 포함하고 모두 본 발명의 범위 내에 있는 상이한 제1 및 제2 컴퓨팅 시스템(50, 50A) 실시형태를 도시한다. 예를 들어 제한 없이, 각각 시스템 온 칩("SOC")을 위해 적합한 배열일 수 있는 도 1 및 도 2에 도시된 바와 같이, 컴퓨팅 시스템(50, 50A)은, 도시된 바와 같이 다양한 조합으로, 하나 이상의 프로세서(110), 통신 네트워크(150), 선택적으로 하나 이상의 하이브리드 스레딩 프로세서(hybrid threading processor: "HTP")(115), 선택적으로 하나 이상의 구성 가능한 처리 회로(105), 다양한 하나 이상의 선택적인 통신 인터페이스(130), 제1 컴퓨팅 시스템(50)의 제1 메모리 컨트롤러 회로(100), 또는 제2 컴퓨팅 시스템(50A)의 제2 메모리 컨트롤러 회로(100A), 및 제1 및 제2 컴퓨팅 시스템(50, 50A) 모두에서, 제1 메모리 컨트롤러 회로(100) 또는 제2 메모리 컨트롤러 회로(100A)에 각각 결합된 제1 메모리 회로(125)를 포함할 수 있다.
도 3을 참조하면, 제1 메모리 컨트롤러 회로(100)가 통합된 디바이스로서 프로그래밍 가능한 원자적 동작 회로부(135)를 더 포함하는 것으로 인해, 즉 제1 메모리 컨트롤러 회로(100)가 제2 메모리 컨트롤러 회로(100A)의 기능 및 회로부를 모두 포함하고 프로그래밍 가능한 원자적 동작 회로부(135)를 더 포함하는 것으로 인해 제1 메모리 컨트롤러 회로(100)는 제2 메모리 컨트롤러 회로(100A)와는 다르다. 프로세서(110, 110A)는 예를 들어 제한 없이 프로그래밍 가능한 원자적 동작 회로부(135) 및 다른 추가 회로부, 예를 들어, 네트워크 통신 인터페이스 회로부(170) 또는 다른 또는 추가 통신 및 처리 회로부를 포함한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 프로그래밍 가능한 원자적 동작을 수행하는 데 이용된다. 제1 메모리 컨트롤러 회로(100)에서, 이러한 프로그래밍 가능한 원자적 동작은 제1 메모리 컨트롤러 회로(100)의 프로그래밍 가능한 원자적 동작 회로부(135)에서 수행된다. 제2 메모리 컨트롤러 회로(100A)에서, 이러한 프로그래밍 가능한 원자적 동작은 개별 프로세서(110A)의 프로그래밍 가능한 원자적 동작 회로부(135)와 함께 수행된다.
제2 컴퓨팅 시스템(50A)에서, 제2 메모리 컨트롤러 회로(100A)는 예를 들어 제한 없이 개별 버스 구조(60)를 통해 개별 집적 회로로서 또는 별개의 칩렛(chiplet)으로서 프로세서(110A)에 직접 결합된다. 아래에서 더 상세하게 논의되는 바와 같이, 이러한 프로세서(110A)는 프로세서(110)와 동일하게 구현될 수 있고, 또는 대부분 또는 단지 프로그래밍 가능한 원자적 동작을 구현하도록 설계된 상이하거나 더 단순한 프로세서로서 구현될 수 있다. 프로세서(110A)는 제2 메모리 컨트롤러 회로(100A)가 프로세서(110A)와 스위칭 방식 또는 라우팅 방식이 아니라 직접 통신하는 방식의 경로를 갖는 것을 나타내기 위해 단지 별개로 도시되어 있다. 예를 들어, 프로세서(110)는 프로세서(110A)를 구현하는 데 이용될 수 있으며, 프로세서(110A)에는 제2 메모리 컨트롤러 회로(100A)와 직접 통신 경로(예를 들어, 버스(60))가 추가로 제공된다. 전술한 바와 같이, 도 3에 도시된 바와 같이, 제1 메모리 컨트롤러 회로(100)가 예를 들어 단일의 통합된 디바이스 내에 통합된 디바이스로서 또는 SOC의 일부로서 프로그래밍 가능한 원자적 동작 회로부(135)의 추가 회로부 및 기능을 포함하는 반면, 제2 메모리 컨트롤러 회로(100A)가 별개의 프로세서(110A)의 일부인 프로그래밍 가능한 원자적 동작 회로부(135)와 직접 통신하는 것으로 인해 제1 메모리 컨트롤러 회로(100)는 제2 메모리 컨트롤러 회로(100A)와 다르다. 다시 말해, 이러한 통합된 디바이스에서, 제1 메모리 컨트롤러 회로(100)는 제2 메모리 컨트롤러 회로(100A)의 것과 동일한 회로 및 기능을 모두 포함하고, 추가의 프로그래밍 가능한 원자적 동작 회로부(135)를 더 포함한다. 따라서, 설명에 또는 문맥 상 달리 지시되는 않는 한, 제1 및 제2 메모리 컨트롤러 회로(100, 100A)는 통칭하여 본 명세서에서 설명되고, 임의의 모든 설명 및 상황은 제1 및 제2 메모리 컨트롤러 회로(100, 100A)에 모두 적용 가능하다.
프로세서(110, 110A)는 일반적으로 제1 또는 제2 컴퓨팅 시스템(50, 50A) 내에 내장될 수 있거나 또는 PCIe 기반 인터페이스와 같은 통신 인터페이스(130)를 통해 제1 또는 제2 컴퓨팅 시스템(50, 50A)에 결합된 외부 프로세서일 수 있는 멀티-코어 프로세서이다. 이러한 프로세서는 전자 기술 분야에서 알려지게 되거나 알려져 있는 바와 같이 그리고 이하에서 보다 상세히 설명된 바와 같이 구현될 수 있다. PCIe 기반 인터페이스와 같은 통신 인터페이스(130)는 전자 기술 분야에서 알려지게 되거나 알려져 있는 바와 같이 구현될 수 있으며, 시스템(50, 50A) 및 다른 외부 디바이스와의 통신을 제공한다.
제1 메모리 컨트롤러 회로(100) 또는 프로세서(110, 110A)의 프로그래밍 가능한 원자적 동작 회로부(135)는 도 11을 참조하여 아래에서 더 상세히 논의되는 바와 같이, 예를 들어, 하나 이상의 프로세서 코어(605)를 갖고, 프로그래밍 가능한 원자적 동작을 실행하기 위해 확장된 명령어 세트를 더 갖는 RISC-V ISA 기반 멀티-스레딩 프로세서일 수 있다. 프로그래밍 가능한 원자적 동작을 실행하기 위해 확장된 명령어 세트가 제공되면, 대표적인 프로그래밍 가능한 원자적 동작 회로부(135) 및/또는 프로세서(110, 110A)는 예를 들어 제한 없이 미국 특허 출원 번호 16/176,434(이 선출원은 전체 내용이 본 명세서에 완전히 기재된 것처럼 이와 완전히 동일한 효력 및 효과를 갖도록 전체 내용이 본 명세서에 병합됨)에 설명된 하나 이상의 하이브리드 스레딩 프로세서(들)(115)로서 구현될 수 있다. 일반적으로, 제1 메모리 컨트롤러 회로(100) 또는 프로세서(110, 110A)의 프로그래밍 가능한 원자적 동작 회로부(135)는 클록당 높은 명령어 속도를 유지하기 위해 배럴(barrel) 스타일의 라운드 로빈(round-robin) 방식의 순간 스레드 스위칭을 제공한다.
통신 네트워크(150)는 또한 전자 기술 분야에 알려지게 되거나 알려져 있는 바와 같이 구현될 수 있다. 예를 들어, 대표적인 실시형태에서, 통신 네트워크(150)는 프로세서(들)(110, 110A), 제1 또는 제2 메모리 컨트롤러 회로(100, 100A), 선택적으로 하나 이상의 하이브리드 스레딩 프로세서(115), 선택적으로 하나 이상의 구성 가능한 처리 회로(105), 및 다양한 하나 이상의 선택적인 통신 인터페이스(130) 간에 및 중에 데이터 패킷을 라우팅하는 패킷 기반 통신 네트워크이다. 이러한 패킷 기반 통신 시스템에서, 각각의 패킷은 일반적으로 임의의 데이터 페이로드 및/또는 명령어와 함께 목적지 및 소스 어드레싱을 포함한다. 예를 들어, 본 발명을 위해, 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)는 제1 메모리 회로(125)에서 소스 어드레스, 판독(또는 로드) 요청 및 물리적 어드레스를 갖는 패킷을 수신할 수 있다. 이에 응답하여, 아래에 더 상세히 설명되는 바와 같이, 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)는 (아래에서 논의되는 바와 같이, 제1 메모리 회로(125) 또는 제2 메모리 회로(175)에 있을 수 있는) 지정된 어드레스로부터 데이터를 판독하고, 요청된 데이터를 포함하는 소스 어드레스로 응답 패킷을 조립할 수 있다. 유사하게, 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)는 제1 메모리 회로(125)에서 소스 어드레스, 기입(또는 저장) 요청 및 물리적 어드레스를 갖는 패킷을 수신할 수 있다. 이에 응답하여 그리고 아래에 더 상세히 설명되는 바와 같이, 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)는 데이터를 (아래에 논의되는 바와 같이, 제1 메모리 회로(125) 또는 제2 메모리 회로(175)에 있을 수 있는) 지정된 어드레스에 기입하고, 데이터가 (아래에 논의되는 바와 같이, 제1 메모리 회로(125) 또는 제2 메모리 회로(175)에 있을 수 있는) 메모리에 저장된 것을 나타내는 확인(acknowledgement)을 포함하는 소스 어드레스로 응답 패킷을 조립할 수 있다.
예를 들어 제한 없이, 통신 네트워크(150)는 시스템(50, 50A) 실시형태에 따라 접힌 닫힌 구성을 갖는 복수의 크로스바 스위치 및/또는 추가 연결을 제공하는 메시 네트워크로서 구현될 수 있다. 또한 예를 들어 제한 없이, 통신 네트워크(150)는, 데이터 패킷을 다양한 경로들 중 임의의 경로를 따라 라우팅하여, 어드레싱된 목적지에 임의의 선택된 데이터 패킷이 도착하는 것이 라우팅에 따라 복수의 상이한 시간 중 임의의 시간에 발생할 수 있다는 것을 의미하는 비동기식 스위칭 패브릭의 일부일 수 있다. 또한 예를 들어 제한 없이, 통신 네트워크(150)는 동기 메시 통신 네트워크와 같은 동기 통신 네트워크로서 구현될 수 있다. 임의의 및 모든 이러한 통신 네트워크(150)는 동등하고 본 발명의 범위 내에 있는 것으로 고려된다. 통신 네트워크(150)의 대표적인 실시형태는 또한 미국 특허 출원 번호 16/176,434에 설명되어 있다.
선택적인 하나 이상의 하이브리드 스레딩 프로세서(115) 및 하나 이상의 구성 가능한 처리 회로(105)는 미국 특허 출원 번호 16/176,434와 같이 다양한 관련 출원에서 보다 상세히 논의되고, 컴퓨팅 시스템(50, 50A) 내에 포함될 수 있는 다양한 구성 요소의 예를 제공하도록 도시되어 있다.
도 4를 참조하면, 제1 메모리 컨트롤러 회로(100)는 예를 들어 제1 메모리 회로(125)와 기입(저장) 동작 및 판독(로드) 동작을 위해 제1 메모리 회로(125)에 결합된다. 제1 메모리 컨트롤러 회로(100)는 제1 메모리 제어 회로(155), 제2 메모리 제어 회로(160), 원자적 및 병합 동작 회로(165), 제2 메모리 회로(175) 및 네트워크 통신 인터페이스(170)를 포함한다. 네트워크 통신 인터페이스(170)는 일반적으로 어드레스(라우팅) 라인 및 데이터 페이로드 라인(별도로 도시되지 않음)을 포함하는, 예를 들어, 버스 또는 다른 통신 구조(163)를 통해 통신 네트워크(150)에 결합된다. 제1 메모리 제어 회로(155)는 제1 메모리 회로(125)와 기입(저장) 동작 및 판독(로드) 동작을 제공하기 위해 예를 들어 버스 또는 다른 통신 구조(157)를 통해 제1 메모리(125)에 직접 결합된다. 제1 메모리 제어 회로(155)는 또한 출력을 위해 원자적 및 병합 동작 회로(165)에 결합되고, 입력을 위해 제2 메모리 제어 회로(160)에 결합된다. 제2 메모리 제어 회로(160)는 예를 들어 버스 또는 다른 통신 구조(159)를 통해 제2 메모리 회로(175)에 직접 결합되고, 입력(예를 들어, 수신되는 판독 또는 기입 요청)을 위해 예를 들어 버스 또는 다른 통신 구조(161)를 통해 네트워크 통신 인터페이스(170)에 결합되고, 출력을 위해 제1 메모리 제어 회로(155)에 결합된다. 제2 메모리 회로(175)는 일반적으로 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)를 갖는 동일한 집적 회로의 일부라는 것이 주목된다. 원자적 및 병합 동작 회로(165)는 제1 메모리 제어 회로(155)의 출력을 (입력으로서) 수신하고, 출력을 제2 메모리 회로(175), 네트워크 통신 인터페이스(170), 및/또는 직접 통신 네트워크(150)에 제공하도록 결합된다.
도 5를 참조하면, 제2 메모리 컨트롤러 회로(100A)는 예를 들어 제1 메모리 회로(125)와 기입(저장) 및 판독(로드) 동작을 위해 제1 메모리 회로(125)에 결합되고 프로세서(110A)에 결합된다. 제2 메모리 컨트롤러 회로(100A)는 제1 메모리 제어 회로(155), 제2 메모리 제어 회로(160), 원자적 및 병합 동작 회로(165A), 제2 메모리 회로(175) 및 네트워크 통신 인터페이스(170)를 포함한다. 네트워크 통신 인터페이스(170)는 일반적으로 어드레스(라우팅) 라인 및 데이터 페이로드 라인(별도로 도시되지 않음)을 포함하는, 예를 들어, 버스 또는 다른 통신 구조(163)를 통해 통신 네트워크(150)에 결합된다. 제1 메모리 제어 회로(155)는 제1 메모리 회로(125)와 기입(저장) 동작 및 판독(로드) 동작을 제공하기 위해 예를 들어 버스 또는 다른 통신 구조(157)를 통해 제1 메모리(125)에 직접 결합된다. 제1 메모리 제어 회로(155)는 또한 출력을 위해 원자적 및 병합 동작 회로(165A)에 결합되고, 입력을 위해 제2 메모리 제어 회로(160)에 결합된다. 제2 메모리 제어 회로(160)는 예를 들어 버스 또는 다른 통신 구조(159)를 통해 제2 메모리 회로(175)에 직접 결합되고, 입력(예를 들어, 수신되는 판독 또는 기입 요청)을 위해 예를 들어 버스 또는 다른 통신 구조(161)를 통해 네트워크 통신 인터페이스(170)에 결합되고, 출력을 위해 제1 메모리 제어 회로(155)에 결합된다. 원자적 및 병합 동작 회로(165A)는 제1 메모리 제어 회로(155)의 출력을 (입력으로서) 수신하고, 출력을 제2 메모리 회로(175), 네트워크 통신 인터페이스(170) 및/또는 직접 통신 네트워크(150)에 제공하도록 결합된다.
전술한 바와 같이, 도 4 및 도 5를 참조하면, 제1 메모리 컨트롤러 회로(100)가 버스 또는 통신 라인(60A)을 통해 제1 메모리 제어 회로(155)에 결합된 (원자적 및 병합 동작 회로(165)의) 프로그래밍 가능한 원자적 동작 회로부(135)를 포함하고, 제2 메모리 컨트롤러 회로(100A)가 별도의 프로세서(110A)의 프로그래밍 가능한 원자적 동작 회로부(135)에 결합되고 버스 또는 통신 라인(60)을 통해 제1 메모리 제어 회로(155)에 결합되는 것으로 인해 제1 및 제2 메모리 컨트롤러 회로(100, 100A)는 상이하다. 따라서, 제1 메모리 컨트롤러 회로(100)에서 원자적 및 병합 동작 회로(165)는 메모리 위험 소거(리셋) 회로(190), 기입 병합 회로(180), 미리 결정된 원자적 동작 회로부(185) 및 프로그래밍 가능한 원자적 동작 회로부(135)를 포함하고, 제2 메모리 컨트롤러 회로(100A)에서 원자적 및 병합 동작 회로(165A)는 메모리 위험 소거(리셋) 회로(190), 기입 병합 회로(180) 및 미리 결정된 원자적 동작 회로부(185)를 포함한다. 메모리 위험 소거(리셋) 회로(190), 기입 병합 회로(180) 및 미리 결정된 원자적 동작 회로부(185)는 다른 조합 논리 회로부(예를 들어, 가산기(및 감산기), 시프터, 비교기, AND 게이트, OR 게이트, XOR 게이트 등) 또는 다른 논리 회로부를 갖는 상태 기계로서 각각 구현될 수 있고, 또한 예를 들어 피연산자 또는 다른 데이터를 저장하기 위한 하나 이상의 레지스터 또는 버퍼를 포함할 수 있다. 위에서 언급하고 그리고 아래에서 더 자세히 논의된 바와 같이, 프로그래밍 가능한 원자적 동작 회로부(135)는 하나 이상의 프로세서 코어 및 제어 회로부, 및 다른 조합 논리 회로부(예를 들어, 가산기, 시프터 등) 또는 다른 논리 회로부를 갖는 다양한 상태 기계로서 구현될 수 있고, 또한, 예를 들어, 어드레스, 실행 가능한 명령어, 피연산자 및 다른 데이터를 저장하기 위한 하나 이상의 레지스터, 버퍼 및/또는 메모리를 포함할 수 있고, 또는 프로세서(110) 또는 보다 일반적으로 (아래에서 설명된) 프로세서로서 구현될 수 있다. 메모리 위험 소거(리셋) 회로(190)는 원자적 및 병합 동작 회로(165, 165A)에서 별도의 회로일 필요는 없고, 대신 메모리 위험 제어 회로(230)의 일부일 수 있다는 것이 주목된다.
네트워크 통신 인터페이스(170)는 통신 네트워크(150)로부터 데이터 패킷(판독 및 기입 요청 패킷을 포함함)을 수신하기 위한 네트워크 입력 큐(205); 데이터 패킷(판독 및 기입 응답 패킷을 포함함)을 통신 네트워크(150)에 전송하기 위한 네트워크 출력 큐(210); 통신 네트워크(150)로부터 수신되는 데이터 패킷을 디코딩하고 (지정된 필드에서 요청 유형, 소스 어드레스 및 페이로드 데이터와 같은) 데이터를 취하여, 패킷에 제공된 데이터를 제2 메모리 제어 회로(160)에 전송하기 위한 데이터 패킷 디코더 회로(215); 및 통신 네트워크(150) 상에서 송신을 위해, 발신 데이터 패킷(예를 들어, 제1 메모리 회로(125)에 대한 요청의 응답)을 인코딩하기 위한 데이터 패킷 인코더 회로(220)를 포함한다. 데이터 패킷 디코더 회로(215) 및 데이터 패킷 인코더 회로(220)는 상태 기계 또는 다른 논리 회로로서 각각 구현될 수 있다.
제1 메모리 회로(125) 및 제2 메모리 회로(175)는 예를 들어 제한 없이, RAM, FLASH, DRAM, SDRAM, SRAM, MRAM, FeRAM, ROM, EPROM 또는 E2PROM, 또는 임의의 다른 형태의 메모리 디바이스와 같이, 아래에서 더 상세히 논의되는 바와 같이, 임의의 유형 또는 종류의 메모리 회로일 수 있다. 대표적인 실시형태에서, 제1 메모리 회로(125)는 DRAM, 일반적으로는 외부 DRAM 메모리 디바이스이고, 제2 메모리 회로(175)는 SRAM 데이터 캐시이다. 예를 들어, 제1 메모리 회로(125)는 자체 패키징에서 별도의 집적 회로일 수 있고, 또는 예를 들어 공통 인터포저(common interposer)를 공유함으로써 제1 및 제2 메모리 컨트롤러 회로(100, 100A)와의 패키징에 포함될 수 있는 별도의 집적 회로일 수 있다. 또한, 다수의 제1 메모리 회로(125)가 선택적으로 포함될 수 있다. 예를 들어 제한 없이, 제1 메모리 회로(125)는 마이크론 테크놀로지사(Micron Technology)(미국 83716 아이다호주 보이시 페더럴 웨이 8000 사우쓰 소재)로부터 현재 구입 가능한 마이크론 GDDR6 메모리 IC 또는 마이크론 NGM 메모리 IC(마이크론의 차세대 DRAM 디바이스)일 수 있다. 이러한 GDDR6 디바이스는 16 Gb 밀도 및 디바이스당 최대 64 GB/s를 갖는 JEDEC 표준이다.
제2 메모리 회로(175)(예를 들어, SRAM 캐시)는 메모리측 캐시이고, 물리적 어드레스에 의해 액세스된다. 대표적인 실시형태에서, 제2 메모리 회로(175)는 256B 라인 크기를 갖는 1 MB 크기일 수 있다. 256B 라인 크기는 ECC 지원으로 인해 달성 가능한 대역폭이 감소되는 것을 최소화하도록 선택된다. 애플리케이션 시뮬레이션에 기초하여 더 큰 라인 크기도 가능하다. 메모리 라인 크기가 256B라면, 액세스된 제2 메모리 회로(175)의 대부분이 종국적으로 사용된다고 가정할 때, 더 작은 라인 크기에 비해 에너지를 감소시킨다는 장점이 있다. 대표적인 실시형태에서, 통신 네트워크(150)로부터의 요청은 단일 바이트로부터 최대 64 바이트 크기의 액세스를 사용하여 제2 메모리 회로(175)에 액세스할 수 있다. 제2 메모리 회로(175)(예를 들어, SRAM 캐시)의 태그는 부분 라인 판독 및 기입을 처리할 수 있어야 한다.
(캐시로서) 제2 메모리 회로(175)는 동일한 메모리 라인에 대해 반복적으로 원자적 동작을 하는 데 유리하다. 애플리케이션은 장벽 동기화 동작을 사용하여 프로세스의 모든 스레드가 애플리케이션의 섹션을 처리하는 것을 완료한 시기를 결정한다. 메모리 내 원자적 카운트 연산자는 모든 스레드가 장벽에 진입한 시기를 결정하는 데 사용된다. 애플리케이션 섹션에 스레드가 있는 수만큼 많은 원자적 카운트 동작이 존재한다. 캐시 내의 데이터에 대해 원자적 동작을 수행하면 이러한 장벽 카운트 동작이 동작당 단 수 개의 클록으로 완료될 수 있다.
제2 메모리 회로(175)의 제2 높은 장점의 사용은 구성 가능한 처리 회로(105)로부터 액세스를 캐싱하는 것이다. 대표적인 실시형태에서, 구성 가능한 처리 회로(105)는 캐시를 갖지 않고, 데이터가 내부 메모리로 스트리밍되거나 내부 메모리로부터 스트리밍된다. 제2 메모리 회로(175)는 동일한 캐시 라인으로의 액세스가 효율적으로 처리될 수 있게 한다.
상위 레벨에서 그리고 (도 6에 도시된 대표적인 실시형태와 관련하여) 아래에서 더 상세히 논의되는 바와 같이, 도 1 내지 도 5를 참조하면, 제1 및 제2 메모리 컨트롤러 회로(100, 100A)는 컴퓨팅 시스템(50, 50A) 내로부터 데이터 판독(데이터 로드) 요청을 수신할 수 있고, 이 요청은 물리적 메모리 어드레스를 갖고, 네트워크 통신 인터페이스(170)의 데이터 패킷 디코더 회로(215)에서 디코딩되고, 제2 메모리 제어 회로(160)에 전송된다. 제2 메모리 제어 회로(160)는 물리적 메모리 어드레스에 대응하는 요청된 데이터가 제2 메모리 회로(175) 내에 있는지 여부를 결정하고, 만약 그렇다면, 요청된 데이터를 (요청자(소스)의 어드레스를 갖는 대응하는 요청과 함께) 제1 메모리 제어 회로(155)에 제공하고, 종국적으로 통신 네트워크(150) 상에서 송신하기 위해 발신 데이터 패킷을 인코딩하기 위해 데이터 패킷 인코더 회로(220)에 제공한다. 물리적 메모리 어드레스에 대응하는 요청된 데이터가 제2 메모리 회로(175) 내에 없는 경우, 제2 메모리 제어 회로(160)는 요청(및/또는 물리적 메모리 어드레스)을 제1 메모리 제어 회로(155)에 제공하고, 이 제1 메모리 제어 회로는 제1 메모리 회로(125)로부터 요청된 데이터에 액세스하여 요청된 데이터를 획득한다. 통신 네트워크(150) 상에서 송신하기 위해 발신 데이터 패킷을 인코딩하기 위해 요청된 데이터를 데이터 패킷 인코더 회로(220)에 제공하는 것에 더하여, 제1 메모리 제어 회로(155)는 데이터를 기입 병합 회로(180)에 제공하고, 이 기입 병합 회로는 또한 데이터를 제2 메모리 회로(175)에 기입한다.
요청된 데이터를 제2 메모리 회로(175)와 같은 로컬 캐시에 더 기입하는 것은 대기 시간에 상당한 감소를 제공하고, 대표적인 실시형태의 중요하고 신규한 특징이다. 예를 들어, 이 요청된 데이터는 다른 저장된 데이터보다 더 빈번하게 요구될 수 있어서, 이 요청된 데이터를 로컬에 저장하면, 그렇지 않은 경우 제1 메모리 회로(125)로부터 데이터를 페치하는 데 요구될 수 있는 대기 시간(즉, 수반되는 시간 기간)을 감소시킬 수 있다.
본질적으로, 제2 메모리 회로(175)를 로컬 캐시로서 사용하면 (제1 메모리 회로(125)에서) 반복적으로 액세스된 메모리 위치에 대해 감소된 대기 시간을 제공할 수 있다. 또한, 제2 메모리 회로(175)는 서브 메모리 라인 액세스를 위해, 즉 제1 메모리 회로(125)의 전체 메모리 라인을 요구하지 않는 제1 메모리 회로(125)에 액세스하기 위해 판독 버퍼를 제공한다. 제2 메모리 회로(175)를 이렇게 사용하면 또한 데이터 캐시가 작거나 없는 시스템(50, 50A)의 컴퓨팅 요소에 특히 유리하다.
제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)는 제1 메모리 회로(125)(예를 들어, GDDR6 RAM)를 최적으로 제어하여 캐시 미스(cache miss) 시 요청된 데이터를 제2 메모리 회로(175)에 (캐시로서) 로드하고, 캐시 라인이 제2 메모리 회로(175) 밖으로 전송될 때, 즉 다른 수신 데이터를 위한 공간을 만들기 위해 퇴거될 때 제2 메모리 회로(175)로부터 데이터를 저장하는 역할을 한다. 제1 메모리 회로(125)의 대표적인 실시형태로서 GDDR6 디바이스는, 예를 들어 제한 없이 2개의 독립적인 채널을 갖고, 각각의 채널은 16 GT/s에서 동작하는 16 비트 폭을 갖는다. 단일 GDDR6 디바이스는 64 GB/s의 피크 대역폭을 지원할 수 있다. GDDR6 디바이스는 16의 채널 버스트 길이를 가져서, 32B의 데이터 버스트를 초래한다. 최대 메모리 대역폭을 달성하려면 각각의 열린 행으로부터 4개의 버스트(즉, 128 바이트)가 필요하다. 대역폭은 일부 비트가 에러 정정 코딩("ECC")에 이용될 때 감소될 수 있다.
이것의 일부로서, 제2 메모리 제어 회로(160)는, 위험 비트를 (하드웨어에) 설정하여, 캐시 라인이 다른 프로세스에 의해 판독, 덮어기입 또는 수정될 수 없도록 함으로써 제2 메모리 회로(175)에 캐시 라인을 예비한다. 아래에서 더 상세히 논의되는 바와 같이, 이 프로세스는 또한 현재 예비된 캐시 라인을 점유하는 데이터를 제거하거나 "퇴거"시킬 수 있고, 이 데이터는 제2 메모리 회로(175)로부터 대체되거나 "퇴거"되고 제1 메모리 회로(125)에 저장되도록 이 데이터를 기입(저장)하도록 제1 메모리 제어 회로(155)에 제공된다. 요청된 데이터를 제2 메모리 회로(175)에 더 기입한 후, 설정된 임의의 대응하는 위험 비트는 메모리 위험 소거 (리셋) 회로(190)에 의해 소거(리셋)된다.
유사하게, 제1 및 제2 메모리 컨트롤러 회로(100, 100A)는 컴퓨팅 시스템(50, 50A)으로부터 데이터 기입(데이터 저장) 요청을 수신할 수 있고, 이 요청은 물리적 메모리 어드레스를 갖고, 네트워크 통신 인터페이스(170)의 데이터 패킷 디코더 회로(215)에서 디코딩되어 제2 메모리 제어 회로(160)에 전송된다. 제2 메모리 제어 회로(160)는 제2 메모리 회로(175)에 로컬로 기입(저장)한다. 이것의 일부로서, 제2 메모리 제어 회로(160)는, 위험 비트를 (하드웨어에) 설정하여, 캐시 라인이 전이 상태에 있는 동안 다른 프로세스에 의해 판독될 수 없도록 함으로써 제2 메모리 회로(175)에 캐시 라인을 예비할 수 있다. 아래에서 더 상세히 논의되는 바와 같이, 이 프로세스는 또한 현재 예비된 캐시 라인을 점유하는 데이터를 제거하거나 "퇴거"할 수 있으며, 이 데이터는 또한 제1 메모리 회로(125)에 기입(저장)된다. 요청된 데이터를 제2 메모리 회로(175)에 기입/저장한 후, 설정된 임의의 대응하는 위험 비트는 메모리 위험 소거 (리셋) 회로(190)에 의해 소거(리셋)된다.
미리 결정된 유형의 원자적 동작은 또한 하나의 원자적 동작에 의한 증분과 같은 원자적 동작을 수반하지 않는 정규 메모리 판독 또는 기입 동작과 동일한 처리량으로 발생하는, 비교적 간단한 단일 사이클, 정수 원자, 예를 들어, 페치 및 증분 또는 비교 및 스왑과 같이, 요청된 데이터에 대해 미리 결정된 또는 "표준" 원자적 동작에 대한 요청을 수반하는, 원자적 및 병합 동작 회로(165)의 미리 결정된 원자적 동작 회로부(185)에 의해 수행될 수 있다. 이들 동작에 대해, 아래에서 더 상세히 논의되는 바와 같이, 제2 메모리 제어 회로(160)는, 위험 비트를 (하드웨어에) 설정하여, 캐시 라인이 전이 상태에 있는 동안 다른 프로세스에 의해 판독될 수 없도록 함으로써 제2 메모리 회로(175)에 캐시 라인을 예비한다. 이 데이터는 제1 메모리 회로(125) 또는 제2 메모리 회로(175)로부터 획득되고, 요청된 원자적 동작을 수행하기 위해 미리 결정된 원자적 동작 회로부(185)에 제공된다. 원자적 동작 후에, 통신 네트워크(150) 상에서 송신하기 위해 발신 데이터 패킷을 인코딩하기 위해 결과 데이터를 데이터 패킷 인코더 회로(220)에 제공하는 것에 더하여, 미리 결정된 원자적 동작 회로부(185)는 결과 데이터를 기입 병합 회로(180)에 제공하고, 이 기입 병합 회로는 또한 결과 데이터를 제2 메모리 회로(175)에 기입한다. 결과 데이터를 제2 메모리 회로(175)에 기입/저장한 후에, 설정된 임의의 대응하는 위험 비트는 메모리 위험 소거 (리셋) 회로(190)에 의해 소거(리셋)된다.
요청된 데이터에 대해 프로그래밍 가능한 원자적 동작에 대한 요청을 수반하는, (제1 메모리 컨트롤러 회로(100) 또는 프로세서(110A)의 일부일 수 있는) 프로그래밍 가능한 원자적 동작 회로부(135)에 의해 사용자에 맞춘 또는 프로그래밍 가능한 원자적 동작이 수행될 수 있다. 임의의 사용자는 이하에 설명되는 다양한 제약에 따라 이러한 사용자에 맞춘 또는 프로그래밍 가능한 원자적 동작을 제공하기 위해 임의의 이러한 프로그래밍 코드를 준비할 수 있다. 예를 들어, 프로그래밍 가능한 원자적 동작은 부동 소수점 가산과 같은 비교적 간단한 다중 사이클 연산, 또는 블룸 필터 삽입과 같은 비교적 복잡한 다중 명령어 연산일 수 있다. 프로그래밍 가능한 원자적 동작은 시스템 벤더가 아닌 사용자에 의해 정의되는 것으로 인해, 미리 결정된 원자적 동작과 동일하거나 상이할 수 있다. 이 동작에 대해, 또한 아래에서 더 상세히 논의되는 바와 같이, 제2 메모리 제어 회로(160)는, 위험 비트를 (하드웨어에) 설정하여, 캐시 라인이 전이 상태에 있는 동안 다른 프로세스에 의해 판독될 수 없도록 함으로써 제2 메모리 회로(175)에 캐시 라인을 예비한다. 이 데이터는 제1 메모리 회로(125) 또는 제2 메모리 회로(175)로부터 획득되고, 요청된 프로그래밍 가능한 원자적 동작을 수행하기 위해 프로그래밍 가능한 원자적 동작 회로부(135)(예를 들어, 제1 메모리 컨트롤러 회로(100) 내에 있는 프로그래밍 가능한 원자적 동작 회로부 또는 전용 통신 링크(60) 상에서 프로세서(110A))에 제공된다. 원자적 동작 후에, 프로그래밍 가능한 원자적 동작 회로부(135)는 통신 네트워크(150) 상에서 전송하기 위해 결과 데이터를 갖는 발신 데이터 패킷을 직접 인코딩하기 위해 (제1 메모리 컨트롤러 회로(100) 내 또는 프로세서(110A) 내) 결과 데이터를 네트워크 통신 인터페이스(170)에 제공한다. 또한, 프로그래밍 가능한 원자적 동작 회로부(135)는 결과 데이터를 제2 메모리 제어 회로(160)에 제공하고, 이 제2 메모리 제어 회로는 또한 결과 데이터를 제2 메모리 회로(175)에 기입한다. 결과 데이터를 제2 메모리 회로(175)에 기입/저장한 후, 설정된 임의의 대응하는 위험 비트는 제2 메모리 제어 회로(160)에 의해 소거(리셋)된다.
프로그래밍 가능한(즉, "주문형(custom)") 원자적 동작을 위해 취해진 접근법은 프로세서(110) 또는 다른 시스템(50, 50A) 구성 요소와 같은 발신 소스로부터 통신 네트워크(150)를 통해 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)에 전송될 수 있는 다수의 일반 주문형 원자적 요청 유형을 제공하는 것이다. 아래에서 더 상세히 논의되는 바와 같이, 제1 및 제2 메모리 컨트롤러 회로(100, 100A)는 요청을 주문형 원자적 동작으로 식별하고, 요청을 제1 메모리 컨트롤러 회로(100) 내 또는 프로세서(110A) 내 프로그래밍 가능한 원자적 동작 회로부(135)에 전달한다. 대표적인 실시형태에서, 프로그래밍 가능한 원자적 동작 회로부(135)는, (1) 사용자 정의된 원자적 동작을 효율적으로 수행할 수 있는 프로그래밍 가능한 처리 요소이고; (2) 메모리에 로드 및 저장하고, 산술 및 논리 연산 및 제어 흐름 결정을 수행할 수 있고; 및 (3) 사용자 정의된 동작을 원자적으로 수행하기 위해 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A) 또는 이들 구성 요소와 상호 작용을 용이하게 하기 위해 새로운 특수 명령어 세트와 함께 RISC-V ISA를 활용한다. RISC-V ISA는 상위 레벨 언어 연산자 및 데이터 유형을 지원하는 전체 명령어 세트를 포함한다는 것이 주목된다. 프로그래밍 가능한 원자적 동작 회로부(135)는 RISC-V ISA를 이용할 수 있지만, 일반적으로 제1 메모리 컨트롤러 회로(100) 내에 포함될 때 유닛의 다이 크기를 감소시키기 위해 보다 제한된 명령어 세트 및 제한된 레지스터 파일 크기를 지원한다.
도 6을 참조하면, 제2 메모리 제어 회로(160)는 제2 메모리 액세스 제어 회로(225); 메모리 위험 레지스터(260)를 갖는 메모리 위험 제어 회로(230); 네트워크 요청 큐(250); 원자적 동작 복귀 큐(255); 인바운드 요청 멀티플렉서(245); 선택적인 지연 회로(235), 및 인바운드 제어 멀티플렉서(240)를 포함한다. 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)(예를 들어, SRAM)에 결합되고, 대응하는 어드레싱을 사용하여 제2 메모리 회로(175)를 판독하고 제2 메모리 회로에 기입하고, 다양한 메모리 위험 비트를 설정하거나 또는 소거하기 위해 메모리 위험 제어 회로(230)에 신호를 제공하고, 제2 메모리 회로(175)의 캐시 라인이 다른 데이터에 의해 덮어기입되고 제1 메모리 회로(125)에 기입될 데이터를 포함할 때 캐시 "퇴거" 요청을 생성하기 위해 상태 기계 및 논리 회로를 포함한다.
메모리 위험 제어 회로(230)는 메모리 위험 레지스터(260) 및 선택적으로 메모리 위험 레지스터(260)에 저장된 다양한 메모리 위험 비트를 설정하거나 또는 소거하여 하드웨어 기반 캐시 일관성을 제공하기 위한 상태 기계 및 논리 회로를 포함한다. 캐시 "미스", 즉 제2 메모리 회로(175)에 저장되지 않은 데이터에 대한 수신되는 요청은 원하는 데이터를 제2 메모리 회로(175)에 (로컬 캐시로서) 가져오기 위해 제1 메모리 회로(125)에 대한 액세스를 필요로 한다. 이 제1 메모리 회로(125)에 액세스하는 시간 동안, 메모리 라인은 다른 요청에 이용되지 않는다. 메모리 위험 제어 회로(230)는 제2 메모리 회로(175)의 캐시 라인 중 액세스에 이용 가능하지 않는 캐시 라인을 나타내는 위험 비트의 표를 메모리 위험 레지스터(260)에 유지한다. 설정된 위험 비트를 갖는 이 캐시 라인에 액세스를 시도하는 인바운드 요청은 위험이 소거될 때까지 메모리 위험 제어 회로(230)(또는 동등하게 메모리 위험 소거 (리셋) 회로(190))에 의해 유지된다. 위험이 소거되면, 요청은 처리를 위해 인바운드 요청 멀티플렉서(245)를 통해 재전송된다. 제2 메모리 회로(175)의 캐시 라인의 태그 어드레스는 위험 비트 인덱스로 해시된다. 위험 비트의 수는 일반적으로 위험 충돌 확률을 충분히 낮은 수준으로 설정하도록 선택된다.
네트워크 요청 큐(250)는 통신 네트워크(150)로부터 인바운드 요청(예를 들어, 로드, 저장)을 위한 큐를 제공한다. 원자적 동작 복귀 큐(255)는 프로그래밍 가능한 원자적 동작으로부터 데이터를 생성하기 위한 큐를 제공한다. 인바운드 요청 멀티플렉서(245)는 우선순위에 따라 메모리 위험 소거 (리셋) 회로(190)로부터의 요청, 원자적 동작 복귀 큐(255)로부터의 요청, 및 네트워크 요청 큐(250)로부터의 요청인 인바운드 메모리 요청 소스들 간에 선택하고 이 인바운드 메모리 요청 소스들 간의 우선순위를 정하고, 이들 요청을 제2 메모리 액세스 제어 회로(225)에 제공한다. 선택적인 지연 회로(235)는 제2 메모리 회로(175)로부터의 판독 동작에 대한 지연을 모방하기 위한 파이프라인 스테이지이다. 인바운드 제어 멀티플렉서(240)는 (요청된 데이터가 제2 메모리 회로(175)에서 발견되지 않을 때, 즉, 캐시 "미스" 시) 제1 메모리 회로(125)에 액세스할 것을 요구하는 인바운드 네트워크 요청, 및 제2 메모리 회로(175)의 캐시 라인이 (판독 또는 기입 요청으로부터) 다른 수신되는 데이터에 의해 덮어기입되기 전에 제1 메모리 회로(125)에 기입될 데이터를 포함할 때 제2 메모리 회로(175)로부터의 캐시 "퇴거" 요청으로부터 선택한다.
제1 메모리 제어 회로(155)는 스케줄러 회로(270); 하나 이상의 제1 메모리 뱅크 큐(265); 제1 메모리 액세스 제어 회로(275); 출력 데이터 및 요청 데이터를 위한 하나 이상의 큐, 즉 제2 메모리 "히트" 요청 큐(280), 제2 메모리 "미스" 요청 큐(285), 제2 메모리 "미스" 데이터 큐(290), 및 제2 메모리 "히트" 데이터 큐(295); 요청 선택 멀티플렉서(305), 및 데이터 선택 멀티플렉서(310)를 포함한다.
제1 메모리 뱅크 (요청) 큐(265)는 요청이 제1 메모리 회로(125)의 관련된 뱅크에 스케줄링될 수 있을 때까지 제1 메모리 회로(125)의 각각의 개별적으로 관리되는 뱅크가 이 요청을 유지하기 위해 전용 뱅크 요청 큐(265)를 갖도록 제공된다. 스케줄러 회로(270)는 뱅크 큐(265)들 간에 선택하여 제1 메모리 회로(125)의 이용 가능한 뱅크에 대한 요청을 선택하고 이 요청을 제1 메모리 액세스 제어 회로(275)에 제공한다. 제1 메모리 액세스 제어 회로(275)는 제1 메모리 회로(125)(예를 들어, DRAM)에 결합되고, 제1 메모리 회로(125)의 물리적 어드레스를 사용하여 대응하는 어드레싱을 사용하여, 예를 들어, 행 및 열 어드레싱을 사용하여 제1 메모리 회로(125)에 판독(로드) 및 기입(저장)하기 위한 상태 기계 및 논리 회로를 포함한다.
제2 메모리 "히트" 데이터 큐(295)는 요청된 데이터가 응답 메시지에 제공되도록 선택될 때까지 (통신 라인(들)(234) 상에서) 제2 메모리 회로(175)로부터 직접 제공된 판독된 데이터, 즉 제2 메모리 회로(175)에 유지되어 제2 메모리 회로로부터 판독된 데이터를 보유한다. 제2 메모리 "미스" 데이터 큐(290)는 또한 요청된 데이터가 응답 메시지에 제공되도록 선택될 때까지 제1 메모리 회로(125)로부터 제공된 판독된 데이터, 즉 제2 메모리 회로(175)에 있지 않은 제1 메모리 회로(125)에 유지되어 제2 메모리 회로로부터 판독된 데이터를 유지한다. 제2 메모리 "히트" 요청 큐(280)는 요청이 응답 메시지를 준비하도록 선택될 때까지 요청된 데이터가 제2 메모리 회로(175)에서 이용 가능하였을 때 요청 패킷 정보(예를 들어, 응답 패킷의 어드레스를 지정하는 데 사용되는 소스 요청자의 식별자 또는 어드레스)를 유지한다. 제2 메모리 "미스" 요청 큐(285)는 요청이 응답 메시지를 준비하도록 선택될 때까지 요청된 데이터가 제1 메모리 회로(125)에서 이용 가능하였을 때(그리고 제2 메모리 회로(175)에 있지 않았을 때) 요청 패킷 정보(예를 들어, 응답 패킷의 어드레스를 지정하는 데 사용되는 소스 요청자의 식별자 또는 어드레스)를 유지한다.
데이터 선택 멀티플렉서(310)는 (제2 메모리 "미스" 데이터 큐(290)에 유지된) 제1 메모리 회로(125) 판독된 데이터와, (제2 메모리 "히트" 데이터 큐(295)에 유지된) 제2 메모리 회로(175) 판독된 데이터 간을 선택한다. 선택된 데이터는 또한 전술한 바와 같이 제2 메모리 회로(175)에 기입된다. 그런 다음 대응하는 요청 데이터가 요청 선택 멀티플렉서(305)를 사용하여 선택되고, 이 요청 선택 멀티플렉서는 이에 대응하여 제2 메모리 "미스" 요청 큐(285)에 유지된 응답 데이터와, 제2 메모리 "히트" 요청 큐(280)에 유지된 응답 데이터 간을 선택한다. 그런 후 이 판독된 데이터는 대응하는 요청 데이터와 매칭(matched)되어, 요청된 데이터를 갖는 복귀 데이터 패킷이 조립되어 통신 네트워크 상에서 요청 소스의 어드레스로 전송될 수 있도록 한다. 이것이 발생하는 방식은 원자적 및 병합 동작 회로(165)를 사용하는 방식 또는 이하에서 더 상세히 논의되는 선택적인 아웃바운드 응답 멀티플렉서(315)를 사용하는 방식을 포함하여 여러 상이한 방식이 존재한다.
포함되는 경우, 아웃바운드 응답 멀티플렉서(315)는 (1) 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)에 의해 제공된 판독 데이터 및 요청 데이터; 및 (2) (제1 메모리 컨트롤러 회로(100)의 원자적 및 병합 동작 회로(165)에 포함되는) 프로그래밍 가능한 원자적 동작 회로부(135)에 의해 생성된 데이터, 및 요청 선택 멀티플렉서(305)에 의해 제공된 요청 데이터 간을 선택한다. 두 경우 모두, 판독 또는 생성된 데이터 및 요청 데이터는 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 아웃바운드 응답 멀티플렉서(315)에 의해 네트워크 통신 인터페이스(170)에 제공된다. 선택된 실시형태에서, 프로그래밍 가능한 원자적 동작을 수행하는 프로세서(110A)는 그 자체가 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 직접 인코딩하고 준비할 수 있다.
원자적 및 병합 동작 회로(165, 165A)는 기입 병합 회로(180), 미리 결정된 원자적 동작 회로부(185) 및 메모리 위험 소거 (리셋) 회로(190)를 포함하고, 원자적 및 병합 동작 회로(165)는 프로그래밍 가능한 원자적 동작 회로부(135)를 더 포함한다. 기입 병합 회로(180)는 데이터 선택 멀티플렉서(310)로부터 판독 데이터 및 요청 선택 멀티플렉서(305)로부터 요청 데이터를 수신하고, (응답 또는 복귀 데이터 패킷에 사용될 판독 데이터 및 소스 어드레스를 갖는 단일 단위를 생성하기 위해) 요청 데이터와 판독 데이터를 병합하고, 그런 다음 이 데이터를, (1) (라인(236) 상에서) 제2 메모리 회로(175)의 기입 포트에 (또는, 동등하게 제2 메모리 회로(175)에 기입하기 위해 제2 메모리 액세스 제어 회로(225)에) 제공하고; (2) 선택적으로, 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 선택 후 네트워크 통신 인터페이스(170)에 제공하기 위해 아웃바운드 응답 멀티플렉서(315)에 제공하고; 또는 (3) 선택적으로, 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 네트워크 통신 인터페이스(170)에 제공한다. 대안적으로 그리고 다른 옵션으로 도 5c에 도시된 바와 같이, 아웃바운드 응답 멀티플렉서(315)는 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 네트워크 통신 인터페이스(170)에 제공하기 위해 데이터 선택 멀티플렉서(310)로부터 직접 판독 데이터를 수신하고 선택하며 요청 선택 멀티플렉서(305)로부터 직접 요청 데이터를 수신하고 선택할 수 있다.
요청 데이터가 미리 결정된 원자적 동작을 위한 것일 때, 미리 결정된 원자적 동작 회로부(185)는 기입 병합 회로(180)로부터 또는 직접 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)로부터 요청 및 판독된 데이터를 수신한다. 원자적 동작이 수행되고, 기입 병합 회로(180)를 사용하여, 결과 데이터가 제2 메모리 회로(175)에 기입(저장)되고, 또한 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 아웃바운드 응답 멀티플렉서(315)에 제공되거나 또는 직접 네트워크 통신 인터페이스(170)에 제공된다.
미리 결정된 원자적 동작 회로부(185)는 페치 및 증분 또는 비교 및 스왑(예를 들어, 표 1에 나열된 원자적 동작)과 같은 미리 정해진 원자적 동작을 처리한다. 이들 동작은 크기가 32 바이트 이하인 단일 메모리 위치에 대해 간단한 판독-수정-기입 동작을 수행한다. 원자적 메모리 동작은 통신 네트워크(150) 상에서 전송된 요청 패킷으로부터 개시된다. 요청 패킷은 물리적 어드레스, 원자적 연산자 유형, 피연산자 크기 및 선택적으로 최대 32 바이트의 데이터를 갖는다. 원자적 동작은 제2 메모리 회로(175) 캐시 메모리 라인에 판독-수정-기입을 수행하고, 필요한 경우 캐시 메모리를 채운다. 원자적 연산자 응답은 간단한 완료 응답일 수 있고 또는 최대 32 바이트의 데이터를 갖는 응답일 수 있다. 표 1은 대표적인 실시형태에서 예시적인 원자적 메모리 연산자의 리스트를 표시한다. 요청 패킷 크기 필드는 원자적 동작의 피연산자 폭을 지정한다. 대표적인 실시형태에서, 다양한 프로세서(예를 들어, 프로그래밍 가능한 원자적 동작 회로부(135), 프로세서(110, 110A)), 하이브리드 스레딩 프로세서(들)(115), 구성 가능한 처리 회로(들)(105)는 32 및 64 비트 원자적 동작을 지원할 수 있고, 일부 경우에 16 및 32 바이트를 갖는 원자적 동작을 지원할 수 있다.
원자적 식별자 | 원자적 설명 |
0 | 페치 및 AND |
1 | 페치 및 OR |
2 | 페치 및 XOR |
3 | 페치 및 가산 |
4 | 페치 및 감산 |
5 | 페치 및 증분 |
6 | 페치 및 감분 |
7 | 페치 및 최소 |
8 | 페치 및 최대 |
9 | 페치 및 스왑(교환) |
10 | 비교 및 스왑 |
11-15 | 예비 |
16-63 | 주문형(프로그래밍 가능) 원자적 동작 |
전술한 바와 같이, 판독된 데이터를 제2 메모리 회로(175)에 기입(저장)하기 전에, 예비된 캐시 라인에 설정된 위험 비트는 메모리 위험 소거 (리셋) 회로(190)에 의해 소거된다. 따라서, 요청 및 판독 데이터가 기입 병합 회로(180)에 의해 수신되면, 리셋 또는 소거 신호는, 레지스터(260)에서 예비된 캐시 라인에 설정된 메모리 위험 비트를 리셋하거나 또는 소거하기 위해 메모리 위험 소거 (리셋) 회로(190)에 의해 (통신 라인(226) 상에서) 메모리 위험 제어 회로(230)에 전송될 수 있다. 대안적으로, 메모리 위험 소거 (리셋) 회로(190)가 메모리 위험 제어 회로(230)에 포함될 때, 기입 병합 회로(180)는 또한 레지스터(260)에서 예비된 캐시 라인에 설정된 메모리 위험 비트를 리셋하거나 또는 소거하기 위해 (통신 라인(226) 상에서) 리셋 또는 소거 신호를 메모리 위험 제어 회로(230)에 전송할 수 있다. 또한 위에서 언급한 바와 같이, 이 위험 비트를 리셋하거나 또는 소거하면 또한 지정된 (또는 예비된) 캐시 라인을 수반하는 보류 중인 판독 또는 기입 요청을 해제하여, 선택 및 처리를 위해 보류 중인 판독 또는 기입 요청을 인바운드 요청 멀티플렉서(245)에 제공할 수 있다.
도 7a, 도 7b 및 도 7c(통칭하여 도 7이라고 함)는 요청을 수신하고 디코딩하고 판독 또는 로드 요청을 수행하는 대표적인 방법의 흐름도이고, 도 7a 및 도 7b는 제1 메모리 회로로부터 요청을 수신하고 디코딩하고 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시하고, 도 7c는 제2 메모리 회로로부터 판독 또는 로드 요청을 수행하는 대표적인 방법을 도시한다. 도 8a, 도 8b, 도 8c 및 도 8d는 원자적 동작 요청의 일부로서 원자적 동작을 수행하는 대표적인 방법을 도시하는 흐름도이다. 도 9는 판독(또는 로드) 요청의 일부로서 또는 기입(또는 저장) 요청의 일부로서 제2 메모리 회로로부터 데이터 퇴거를 수행하는 대표적인 방법을 도시하는 흐름도이다. 도 10은 기입 또는 저장 요청을 수행하는 대표적인 방법의 흐름도이다.
전술한 바와 같이, 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)는 통신 네트워크(150)로부터 전송된 메모리 판독(또는 로드) 요청 또는 메모리 기입(또는 저장) 요청을 수신할 수 있다. 표 2는 대표적인 실시형태에서 예시적인 판독, 기입 및 원자적 동작, 및 대응하는 요청의 리스트를 도시한다(여기서 "..."는 예를 들어 제한 없이 다른 동작에 대한 요청이 바로 이전의 요청 유형 및 패턴을 사용하여, 예를 들어, 페치 및 XOR 원자적 동작을 위한 AmoXor 요청, 페치 및 AND 원자적 동작을 위한 AmoAnd 요청을 사용하여 지정될 수 있는 것을 나타낸다).
요청 이름 | 설명 |
Read8 | 메모리로부터 8 바이트를 판독한다. |
Read16 | 메모리로부터 16 바이트를 판독한다 |
Read24 | 메모리로부터 24 바이트를 판독한다 |
Read32 | 메모리로부터 32 바이트를 판독한다 |
Read40 | 메모리로부터 40 바이트를 판독한다 |
Read48 | 메모리로부터 48 바이트를 판독한다 |
Read56 | 메모리로부터 56 바이트를 판독한다 |
Read64 | 메모리로부터 64 바이트를 판독한다 |
Write8 | 메모리에 8 바이트를 기입한다 |
Write16 | 메모리에 16 바이트를 기입한다 |
Write24 | 메모리에 24 바이트를 기입한다 |
Write32 | 메모리에 32 바이트를 기입한다 |
Write40 | 메모리에 40 바이트를 기입한다 |
Write48 | 메모리에 48 바이트를 기입한다 |
Write56 | 메모리에 56 바이트를 기입한다 |
Write64 | 메모리에 64 바이트를 기입한다 |
AmoAddW | 메모리에서 미리 결정된 원자적 4 바이트 추가 |
AmoAddD | 메모리에서 미리 결정된 원자적 8 바이트 추가 |
... | 다른 미리 결정된 원자적 동작(표 1) |
AmoCust0A0 | 요청 인수가 없는 주문형(프로그래밍 가능) 원자적 #0 |
AmoCust0A1 | 하나의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #0 |
AmoCust0A2 | 2개의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #0 |
AmoCust0A4 | 4개의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #0 |
... | 주문형(프로그래밍 가능) 원자적 #1-6 |
AmoCust7A0 | 요청 인수가 없는 주문형(프로그래밍 가능) 원자적 #7 |
AmoCust7A1 | 하나의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #7 |
AmoCust7A2 | 2개의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #7 |
AmoCust7A4 | 4개의 8 바이트 요청 인수가 있는 주문형(프로그래밍 가능) 원자적 #7 |
표 3은 대표적인 실시형태에서 응답이 통신 네트워크(150)를 통해 데이터 패킷으로서 전송되는, 판독, 기입 및 원자적 요청에 대한 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)로부터의 예시적인 응답 리스트를 도시한다.
응답 이름 | 설명 |
Data8 | 메모리로부터 8 바이트의 데이터 응답 |
Data16 | 메모리로부터 16 바이트의 데이터 응답 |
Data24 | 메모리로부터 24 바이트의 데이터 응답 |
Data32 | 메모리로부터 32 바이트의 데이터 응답 |
Data40 | 메모리로부터 40 바이트의 데이터 응답 |
Data48 | 메모리로부터 48 바이트의 데이터 응답 |
Data56 | 메모리로부터 56 바이트의 데이터 응답 |
Data64 | 메모리로부터 64 바이트의 데이터 응답 |
Comp | 메모리로부터 완료 (예를 들어, 확인(ACK)) 응답 |
소스 엔티티 또는 디바이스, 즉, 다양한 프로세서(예를 들어, 프로세서(110)), 하이브리드 스레딩 프로세서(들)(115), 구성 가능한 처리 회로(들)(105))와 같은, 판독 또는 기입 요청을 발행하는 엔티티 또는 디바이스는 일반적으로 요청된 판독 데이터 또는 요청된 기입 데이터가 제1 메모리 회로(125) 또는 제2 메모리 회로(175)에 유지되는지 또는 유지될 수 있는지 여부에 관한 정보를 전혀 갖지도 않고 이런 정보를 전혀 요구하지도 않고, 단순히 판독 또는 기입 요청을 메모리에 생성하고, 통신 네트워크(150)를 통해 요청을 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)에 전송할 수 있다는 것이 주목된다.
도 7을 참조하면, 요청을 수신하고 디코딩하고 판독 또는 로드 요청을 수행하는 대표적인 방법을 수행하는 대표적인 방법은, 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)에 의해 요청(예를 들어, 표 2로부터의 요청)을 수신하는 것으로 시작한다(단계(400)에서 시작). 패킷 디코더 회로(215)를 사용하여, 수신된 요청이 디코딩되고, 요청의 유형이 결정되고(판독, 기입, 원자적 동작), 요청은 대응하는 큐(네트워크 요청 큐(250) 또는 원자적 동작 요청 큐(255))에 놓인다(단계(402)). 다른 대표적인 실시형태에서, 패킷 디코더 회로(215)가 포함되지 않은 경우, 이 요청은 단일 요청 큐(결합된 네트워크 요청 큐(250)와 원자적 동작 요청 큐(255))에 놓이고, 그리고 단계(402)의 수신된 요청을 디코딩하고 요청의 유형을 결정하는 단계는 제2 메모리 액세스 제어 회로(225)에 의해 수행된다. 인바운드 요청 멀티플렉서(245)에 의해 큐로부터 요청이 선택되고(단계(404)), 요청이 판독 요청인 경우(단계(406)), 제2 메모리 액세스 제어 회로(225)는 요청된 데이터가 제2 메모리 회로(175)에 저장되어 있는지 여부를 결정한다(단계(408)). 요청이 (단계(408)에서) 판독 요청이 아닌 경우, 제2 메모리 액세스 제어 회로(225)는 이 요청이 기입 요청인지 여부를 결정하고(단계(410)), 만약 그렇다면, 도 10을 참조하여 도시되고 논의된 단계(540)로 진행한다. 수신된 요청이 네트워크 요청 큐(250)로부터의 판독 요청도 아니고 기입 요청도 아닌 경우, 이 요청은 원자적 동작 큐(255)로부터의 원자적 동작 요청이고, 제2 메모리 액세스 제어 회로(225)는 도 8을 참조하여 도시되고 논의된 단계(456)로 진행한다.
이들 단계(400, 402, 404 및 406 또는 410)는 일반적으로 도 7에 도시된 판독 동작만이 아니라 모든 판독, 기입 및/또는 원자적 동작에도 적용 가능하다는 것이 주목된다. 기입(또는 저장) 동작의 경우, 방법은 단계(400, 402, 404 및 410)를 완료하고, 네트워크 요청 큐(250)로부터 선택된 요청이 기입 요청이라고 결정한다. 요청이 판독 요청인지 또는 기입 요청인지 여부를 결정하는 단계(406)와 단계(410)는 임의의 순서로 발생할 수 있으며; 그 결과, 기입 동작을 시작하기 위해 단계(406)를 완료하는 것이 요구되지 않는다는 것이 주목된다. 유사하게, 요청이 원자적 동작 요청인지 여부에 대한 결정은 이 요청이 판독 요청도 아니고 기입 요청도 아닌 것을 배제하는 프로세스에 의해서만이 아니라 별개의 단계(도시되지 않음)로서 발생할 수 있다. 또한, 이 요청이 판독 요청인지, 기입 요청인지 또는 원자적 동작 요청인지 여부를 결정하는 단계들 중 단 2개의 단계만이 요구되고, 임의의 제3 유형의 요청은 이 요청이 제1 유형의 요청도 아니고 제2 유형의 요청도 아닌 것을 배제하는 것에 의해 자동으로 결정된다. 이러한 모든 변형은 동일하고 본 발명의 범위 내에 있는 것으로 고려된다.
제2 메모리 액세스 제어 회로(225)가 (단계(408)에서) 요청된 데이터가 제2 메모리 회로(175)에 저장되어 있지 않다고 결정하면, 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 캐시 라인을 선택하고(단계(411)), 메모리 위험 제어 회로(230)를 사용하여, 제2 메모리 회로(175)의 특정 캐시 라인이 메모리 위험 레지스터(260)에 설정된 위험 비트를 갖고 있는지 여부를 결정한다(단계(412)). 제2 메모리 회로(175)에서 이 캐시 라인에 위험 비트가 설정되면, 제2 메모리 액세스 제어 회로(225)는 (위험 비트가 설정되지 않은) 다른 캐시 라인이 이용 가능한지 여부를 결정하고(단계(414)), 만약 그렇다면, 제2 메모리 회로(175)에서 이용 가능한 캐시 라인을 선택한다(단계(416)). 제2 메모리 회로(175)에서 이용 가능한 캐시 라인이 없는 경우, 즉 모든 캐시 라인이 설정된 위험 비트를 갖는 경우, 제2 메모리 액세스 제어 회로(225)는 위험 비트가 제2 메모리 회로(175)에서 캐시 라인에 대해 리셋되거나 또는 소거될 때까지(단계(420)) 메모리 위험 제어 회로(230)에서 판독 요청을 큐잉하고(단계(418)), 제2 메모리 액세스 제어 회로(225)는 리셋되거나 또는 소거된 위험 비트를 갖는 캐시 라인을 선택하고 단계(416)로 복귀한다.
제2 메모리 회로(175)의 캐시 라인이 단계(411) 또는 단계(416)에서 선택될 때, 제2 메모리 액세스 제어 회로(225)는 선택된 캐시 라인에 이미 저장된 데이터가 있는지 여부를 결정하고(단계(422)), 이 캐시 라인에 데이터가 있는 경우 데이터 퇴거 프로세스를 수행한다(단계(423))(즉, 도 9를 참조하여 도시되고 논의된, 제2 메모리 회로(175)로부터 데이터를 퇴거하기 위한 단계(522 내지 534)를 수행한다).
선택된 캐시 라인에 이미 저장된 데이터가 없거나(단계(422)) 데이터 퇴거 프로세스가 완료된 경우(단계(423)), 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 선택된 캐시 라인에 대해 위험 비트를 설정하여(단계(424)) 다른 요청이 동일한 캐시 라인에 액세스하는 것을 차단하여 이 캐시 라인의 데이터가 전이하는 프로세스에 있고 다른 판독 또는 기입 프로세스가 이 캐시 라인에 액세스하지 않는 것으로 인해 메모리 일관성을 제공하도록 메모리 위험 제어 회로(230)에 신호를 생성한다.
캐시 "미스"가 있었을 때에는, 제2 메모리 액세스 제어 회로(225)는 (제2 메모리 액세스 제어 회로(225)가 제2 메모리 회로(175)에 액세스하고 캐시 미스를 결정하는 데 걸리는 시간 기간을 매칭하기 위해) 요청이 인바운드 제어 멀티플렉서(240)에 의해 선택되고 제1 메모리 뱅크 큐(265)에 저장되도록 판독 요청을 선택적인 지연 회로(235)에 전송하여 (또는 다른 옵션으로서, 요청을 직접 인바운드 제어 멀티플렉서(240)에 전송하여), 제1 메모리 회로(125)에 액세스하기 위한 판독 요청을 큐잉한다(단계(426)). 스케줄러 회로(270)는 종국적으로 제1 메모리 뱅크 큐(265)로부터 판독 요청을 선택하고 제1 메모리 회로(125)의 메모리 뱅크에 액세스하는 것을 스케줄링(또는 개시)한다(단계(428)). 제1 메모리 회로(125)로부터 요청된 데이터는 판독 또는 획득되어 제2 메모리 "미스" 데이터 큐(290)에 제공되고, 대응하는 요청(또는 소스 어드레스와 같은 요청 데이터)은 제2 메모리 "미스" 요청 큐(285)에 제공된다(단계(430)). 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)를 사용하여, 판독 데이터와 대응하는 요청은 기입 병합 회로(180)를 사용하여 선택되고 함께 페어링(paired)되고(단계(432)), 기입 병합 회로(180)는 판독 데이터를 (통신 라인(236)을 통해) 제2 메모리 회로(175)의 선택된 캐시 라인에 (또는, 동등하게 제2 메모리 회로(175)에 기입하기 위해 제2 메모리 액세스 제어 회로(225)에) 기입한다(단계(434)). 본 명세서에서 사용된 바와 같이, 판독 데이터와 대응하는 요청을 함께 "페어링"한다는 것은, 예를 들어, 원자적 동작을 위해 또는 예를 들어, 발신 응답 데이터 패킷을 준비하기 위해 데이터와 요청이 함께 또는 동시에 이용될 수 있도록(즉, 판독 데이터가 잘못된 요청과 페어링되어 잘못된 요청의 소스로 잘못 전송되는 것을 피하기 위해) 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)를 사용하여 이들을 단순히 함께 선택하거나 이들을 함께 매칭시킨다는 것을 의미한다. 판독 데이터를 제2 메모리 회로(175)에서 선택된 캐시 라인에 기입한 경우, 이전에 설정된 위험 비트는 선택된 캐시 라인에 대해 리셋되거나 또는 소거된다(단계(436)). 판독 데이터와 대응하는 요청을 사용하여, 요청된 판독 데이터를 갖는 판독 응답 데이터 패킷(예를 들어, 표 3으로부터의 응답)이 준비되고 일반적으로 통신 네트워크(150)를 통해 소스 어드레스로 전송되고(단계(438)), 그리고 제1 메모리 회로(125)로부터의 판독 동작이 종료되고, 단계(440)에서 복귀할 수 있다.
제2 메모리 액세스 제어 회로(225)가 (단계(408)에서) 요청된 데이터가 메모리 위험 제어 회로(230)를 사용하여 제2 메모리 회로(175)의 캐시 라인에 저장되어 있다고 결정한 경우, 즉 캐시 히트(cache hit)인 경우, 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)의 특정 캐시 라인이 메모리 위험 레지스터(260)에 설정된 위험 비트를 갖고 있는지 여부를 결정한다(단계(442)). 제2 메모리 회로(175)에서 이 캐시 라인에 대해 위험 비트가 설정되면, 제2 메모리 액세스 제어 회로(225)는 위험 비트가 제2 메모리 회로(175)의 이 캐시 라인에 대해 리셋되거나 소거될 때까지(단계(446)) 메모리 위험 제어 회로(230)에서 판독 요청을 큐잉한다(단계(444)).
단계(442) 또는 단계(446)에 따라 현재 설정된 위험 비트가 없는 경우, 제2 메모리 액세스 제어 회로(225)는 이 캐시 라인으로부터 요청된 데이터를 판독하거나 또는 획득하고 이 데이터를 직접 제2 메모리 "히트" 데이터 큐(295)에 전송한다(단계(448)). 단계(448)의 일부로서, 캐시 "히트"가 있을 때에는, 제2 메모리 액세스 제어 회로(225)는 판독 요청을 (제2 메모리 액세스 제어 회로(225)가 제2 메모리 회로(175)에 액세스하여 데이터를 획득하는 데 걸리는 시간 기간과 매칭하기 위해) 선택적인 지연 회로(235)에 전송하고, 대응하는 요청(또는 소스 어드레스와 같은 요청 데이터)은 제2 메모리 "히트" 요청 큐(280)에 제공된다. 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)를 사용하여, 판독 데이터와 대응하는 요청이 선택되고 함께 페어링된다(단계(450)). 판독 데이터와 대응하는 요청을 사용하여, 요청된 판독 데이터를 갖는 판독 응답 데이터 패킷(예를 들어, 표 3으로부터의 응답)이 준비되고 일반적으로 통신 네트워크(150)를 통해 소스 어드레스로 전송되고(단계(452)), 제2 메모리 회로(175)로부터의 판독 동작이 종료되고 단계(454)에서 복귀할 수 있다.
전술한 바와 같이, 제1 메모리 회로(125) 또는 제2 메모리 회로(175)로부터의 임의의 판독 동작 또는 미리 결정된 원자적 동작의 경우, 판독 응답 데이터 패킷을 준비하고 전송하는 데 이용 가능할 수 있는 몇 가지 옵션이 있는 데, 예를 들어, (1) 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 선택한 후 네트워크 통신 인터페이스(170)에 제공하기 위해, 기입 병합 회로(180)를 사용하여 판독 데이터와 대응하는 요청을 아웃바운드 응답 멀티플렉서(315)에 제공하는 옵션; 또는 (2) 선택적으로, 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 기입 병합 회로(180)를 사용하여, 판독 데이터와 대응하는 요청을 네트워크 통신 인터페이스(170)에 제공하는 옵션; 또는 (3) 다른 옵션으로서, 통신 네트워크(150) 상에서 전송하기 위해 응답 또는 복귀 데이터 패킷을 인코딩하고 준비하기 위해 네트워크 통신 인터페이스(170)에 제공하기 위해, 아웃바운드 응답 멀티플렉서(315)가 데이터 선택 멀티플렉서(310)로부터 직접 판독 데이터를 수신하고 선택하고 요청 선택 멀티플렉서(305)로부터 직접 요청 데이터를 수신하고 선택할 수 있다.
전술한 바와 같이, 제1 및/또는 제2 메모리 컨트롤러 회로(100, 100A)에 대해 수신되는 요청은 본질적으로 피연산자 데이터를 획득하기 위한 판독 요청인 원자적 동작, 이후 피연산자 데이터에 대한 원자적 동작, 이후 결과 데이터를 메모리에 저장하기 위한 기입 요청을 위한 것일 수 있다. 원자적 동작 요청의 판독 동작 부분은 일반적으로 이전에 논의된 판독 동작을 추적하며, 캐시 미스의 경우 단계(432)를 통해 또는 캐시 히트의 경우 단계(450)를 통해, 즉 제1 메모리 회로(125) 또는 제2 메모리 회로(175)로부터 데이터를 획득하고 데이터 및 요청을 대응하는 큐(280, 285, 290, 295)에 제공하는 것을 통해 제2 메모리 회로(175)의 선택된 캐시 라인에 대해 위험 비트를 설정하는 추가적인 단계를 수행한다. 명확성을 위해 이들 단계는 또한 아래에서 논의된다.
도 8을 참조하면, 단계(410) 이후에, 요청이 원자적 동작 요청인 경우, 제2 메모리 액세스 제어 회로(225)는 요청된 피연산자 데이터가 제2 메모리 회로(175)에 저장되어 있는지 여부를 결정한다(단계(456)). 제2 메모리 액세스 제어 회로(225)가 (단계(456)에서) 요청된 데이터가 메모리 위험 제어 회로(230)를 사용하여 제2 메모리 회로(175)의 캐시 라인에 저장되어 있다고 결정한 경우, 즉 캐시 히트인 경우, 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)의 이 특정 캐시 라인이 메모리 위험 레지스터(260)에 설정된 위험 비트를 갖는지 여부를 결정한다(단계(458)). 제2 메모리 회로(175)에서 이 캐시 라인에 대해 위험 비트가 설정되면, 제2 메모리 액세스 제어 회로(225)는 위험 비트가 제2 메모리 회로(175)의 이 캐시 라인에 대해 리셋되거나 소거될 때까지(단계(462)) 메모리 위험 제어 회로(230)에서 원자적 동작 요청을 큐잉한다(단계(460)).
단계(458) 또는 단계(462) 후에 현재 설정된 위험 비트가 없는 경우, 제2 메모리 액세스 제어 회로(225)는 (원자적 동작 후에 데이터가 업데이트될 때) 제2 메모리 회로(175)에서 이 캐시 라인에 대해 위험 비트를 설정하고(단계(464)), 이 캐시 라인으로부터 요청된 데이터를 획득하고, 이 데이터를 직접 제2 메모리 "히트" 데이터 큐(295)에 전송하여(단계(466)), 원자적 동작의 "페치" 부분(예를 들어, 페치 및 AND 또는 페치 및 스왑(교환))을 수행한다. 단계(466)의 일부로서, 캐시 "히트"가 있을 때, 제2 메모리 액세스 제어 회로(225)는 (제2 메모리 액세스 제어 회로(225)가 제2 메모리 회로(175)에 액세스하여 데이터를 획득하는 데 걸리는 시간 기간과 매칭하기 위해) 원자적 동작 요청을 선택적 지연 회로(235)에 전송하고, 대응하는 요청(또는 소스 어드레스와 같은 요청 데이터)은 제2 메모리 "히트" 요청 큐(280)에 제공된다. 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)를 사용하여, 판독 피연산자 데이터와 대응하는 원자적 동작 요청이 선택되고 함께 페어링된다(단계(468)).
제2 메모리 액세스 제어 회로(225)가 (단계(456)에서) 요청된 데이터가 제2 메모리 회로(175)에 저장되어 있지 않다고 결정한 경우, 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 캐시 라인을 선택하고(단계(470)), 메모리 위험 제어 회로(230)를 사용하여, 제2 메모리 회로(175)에서 이 특정 캐시 라인이 메모리 위험 레지스터(260)에 설정된 위험 비트를 갖고 있는지 여부를 결정한다(단계(472)). 제2 메모리 회로(175)에서 이 캐시 라인에 대해 위험 비트가 설정되면, 제2 메모리 액세스 제어 회로(225)는 (위험 비트가 설정되지 않은) 다른 캐시 라인이 이용 가능한지 여부를 결정하고(단계(474)), 만약 그렇다면, 제2 메모리 회로(175)에서 이용 가능한 캐시 라인을 선택한다(단계(476)). 제2 메모리 회로(175)에 이용 가능한 캐시 라인이 없는 경우, 즉 모든 캐시 라인이 설정된 위험 비트를 갖는 경우, 제2 메모리 액세스 제어 회로(225)는 위험 비트가 제2 메모리 회로(175)에서 캐시 라인에 대해 리셋되거나 또는 소거될 때까지(단계(480)) 메모리 위험 제어 회로(230)에서 원자적 동작 요청을 큐잉하고(단계(478)), 제2 메모리 액세스 제어 회로(225)는 단계(476)로 복귀하여 리셋되거나 또는 소거된 위험 비트를 갖는 이 캐시 라인을 선택한다.
제2 메모리 회로(175)에서 캐시 라인이 단계(470) 또는 단계(476)에서 선택될 때, 제2 메모리 액세스 제어 회로(225)는 선택된 캐시 라인에 이미 저장된 데이터가 있는지 여부를 결정하고(단계(482)), 이 캐시 라인에 데이터가 있는 경우 데이터 퇴거 프로세스를 수행한다(단계(484))(즉, 도 9를 참조하여 도시되고 논의된, 제2 메모리 회로(175)로부터 데이터를 퇴거하기 위한 단계(522 내지 534)를 수행한다).
선택된 캐시 라인에 이미 저장된 데이터가 없거나(단계(482)) 데이터 퇴거 프로세스가 완료된 경우(단계(484)), 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 선택된 캐시 라인에 대해 위험 비트를 설정하여(단계(486)) 다른 요청이 동일한 캐시 라인에 액세스하는 것을 차단하여, 이 캐시 라인의 데이터가 전이하는 프로세스에 있고 다른 판독 또는 기입 프로세스가 이 캐시 라인에 액세스하지 않는 것으로 인해 메모리 일관성을 제공하도록 메모리 위험 제어 회로(230)에 신호를 생성한다.
캐시 "미스"가 있을 때에는, 제2 메모리 액세스 제어 회로(225)는 (제2 메모리 액세스 제어 회로(225)가 제2 메모리 회로(175)에 액세스하고 캐시 미스를 결정하는 데 걸리는 시간 기간을 매칭하기 위해) 요청이 인바운드 제어 멀티플렉서(240)에 의해 선택되고 제1 메모리 뱅크 큐(265)에 저장되도록 원자적 동작 요청을 선택적 지연 회로(235)에 전송하여 (또는 다른 옵션으로서, 요청을 직접 인바운드 제어 멀티플렉서(240)에 전송하여), 제1 메모리 회로(125)에 액세스하기 위한 원자적 동작 요청을 큐잉한다(단계(488)). 스케줄러 회로(270)는 종국적으로 제1 메모리 뱅크 큐(265)로부터 원자적 동작 요청을 선택하고 제1 메모리 회로(125)의 메모리 뱅크에 액세스하는 것을 스케줄링(또는 개시)한다(단계(490)). 제1 메모리 회로(125)로부터 요청된 데이터는 획득(판독)되어 제2 메모리 "미스" 데이터 큐(290)에 제공되고, (소스 어드레스와 같은 요청 데이터를 포함하는) 대응하는 원자적 동작 요청은 제2 메모리 "미스" 요청 큐(285)에 제공되어(단계(492)) 원자적 동작의 "페치" 부분을 수행한다. 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)를 사용하여, 판독 데이터와 대응하는 요청이 선택되고 함께 페어링된다(단계(494)).
이 시점에서 원자적 동작 요청을 처리하기 위해 단계(468) 또는 단계(494) 후에, 제2 메모리 회로(175)에는 예비되고(예를 들어, 위험 비트가 설정되고), 피연산자 데이터가 제2 메모리 회로(175) 또는 제1 메모리 회로(125)로부터 판독(획득)되고, 그리고 판독 데이터가 대응하는 원자적 동작 요청과 페어링되거나 매칭된 이용 가능한 캐시 라인이 있다. 원자적 동작 요청이 미리 결정된 원자적 동작에 대한 것이면(단계(496)), 데이터 선택 멀티플렉서(310) 및 요청 선택 멀티플렉서(305)는 데이터 및 요청을 미리 결정된 원자적 동작 회로부(185)에 전송하고(단계(498)), 미리 결정된 원자적 동작 회로부(185)는 요청된 원자적 동작, 예를 들어, 페치 및 AND, 페치 및 OR, 페치 및 XOR, 페치 및 가산, 페치 및 감산, 페치 및 증분, 페치 및 감분, 페치 및 최소, 페치 및 최대, 페치 및 스왑(교환), 비교 및 스왑을 수행하여 결과 데이터를 생성한다(단계(500)). 기입 병합 회로(180)를 사용하여, 결과 데이터는 (통신 라인(236)을 통해) 제2 메모리 회로(175)에 (또는, 동등하게 제2 메모리 회로(175)에 기입하기 위해 제2 메모리 액세스 제어 회로(225)에) 선택된 캐시 라인에 기입된다(단계(502)). 결과 데이터를 제2 메모리 회로(175)에서 선택된 캐시 라인에 기입한 경우, 이전에 설정된 위험 비트는 메모리 위험 소거(리셋) 회로(190) 또는 메모리 위험 제어 회로(230)를 사용하여 선택된 캐시 라인에 대해 리셋되거나 또는 소거된다(단계(504)). 결과 데이터와 대응하는 원자적 동작 요청을 사용하여, 요청된 결과 데이터를 갖는 원자적 동작 응답 데이터 패킷(예를 들어, 표 3의 응답)이 준비되어 네트워크 통신 인터페이스(170)에 의해 일반적으로 통신 네트워크(150)를 통해 (요청에 제공된) 소스 어드레스로 전송되고(단계(506)), 미리 결정된 원자적 동작은 단계(508)로 복귀하여 종료할 수 있다.
원자적 동작 요청이 단계(496)에서 미리 결정된 원자적 동작에 대한 것이 아닌 경우, 즉 프로그래밍 가능한 또는 주문형 원자적 동작에 대한 것인 경우, 원자적 동작 요청 및 판독 데이터는 아래에서 더 상세히 논의되는 "작업 설명자(work descriptor)"의 일부로서 프로그래밍 가능한 원자적 동작 회로부(135)에 전송되고(단계(510)), 통신 라인 또는 버스(60)를 통해 프로세서(110A)에 전송되고, 또는 통신 라인 또는 버스(60A)를 통해 원자적 및 병합 동작 회로(165) 내의 프로그래밍 가능한 원자적 동작 회로부(135)에 전송된다. 프로그래밍 가능한 원자적 동작 회로부(135)는, 아래에 자세히 설명된 바와 같이, 요청된 프로그래밍 가능한 원자적 동작을 수행하여 결과 데이터를 생성하고(단계(512)), 프로그래밍 가능한 원자적 동작 요청과 함께 결과 데이터를 원자적 동작 요청 큐(255)에 전송한다(단계(514)). 인바운드 요청 멀티플렉서(245)를 사용하여 프로그래밍 가능한 원자적 동작 요청을 선택하고, 제2 메모리 액세스 제어 회로(225)를 사용하여 결과 데이터는 본질적으로 기입 동작으로서 제2 메모리 회로(175)에서 선택된 캐시 라인에 기입된다(단계(516)). 결과 데이터를 제2 메모리 회로(175)에서 선택된 캐시 라인에 기입한 경우, 이전에 설정된 위험 비트는 메모리 위험 소거 (리셋) 회로(190) 또는 메모리 위험 제어 회로(230)를 사용하여 선택된 캐시 라인에 대해 리셋되거나 소거된다(단계(518)). 결과 데이터와 대응하는 프로그래밍 가능한 원자적 동작 요청을 사용하여, 요청된 결과 데이터를 갖는 프로그래밍 가능한 원자적 동작 응답 데이터 패킷(예를 들어, 표 3으로부터의 응답)이 준비되어, 일반적으로 통신 네트워크(150)를 통해 소스 어드레스로 전송되고(단계(520)), 프로그래밍 가능한 원자적 동작이 단계(505)로 복귀하고 종료할 수 있다.
프로그래밍 가능한 원자적 동작 응답 데이터 패킷이 준비되어 전송될 수 있는 몇 가지 방식이 존재한다. 예를 들어, 프로그래밍 가능한 원자적 동작 회로부(135)가 원자적 및 병합 동작 회로(165)에 포함되는 경우, 프로그래밍 가능한 원자적 동작 응답 데이터 패킷이 (예를 들어, 네트워크 통신 인터페이스(170)의 패킷 인코더(220) 등을 사용하여) 전술한 바와 같이 임의의 다른 응답 패킷이 준비되고 전송되는 것과 동일한 방식으로 준비되고 전송될 수 있다. 대안적으로, 프로그래밍 가능한 원자적 동작 회로부(135)가 프로세서(110A)에 포함될 때, 프로그래밍 가능한 원자적 동작 응답 데이터 패킷은 또한 일반적으로 유사하거나 동일한 네트워크 통신 인터페이스(170)를 갖는 프로세서(110A)에 의해 직접 준비되고 전송될 수 있다.
전술한 바와 같이, 제2 메모리 회로(175)에서 선택된 캐시 라인에 현재 유지된 데이터는 제1 메모리 회로(125)에 전송되어야 하고, 현재 유지된 데이터를 보존하고 계속 저장하고, 제2 메모리 회로(175)에서 선택된 캐시 라인이 다른 데이터를 위해, 본 명세서에서 데이터 "퇴거"로 지칭되는 프로세스를 위해 이용되도록 허용하여야 한다(그리고 단계(423)(판독 동작), 단계(484)(원자적 동작) 또는 단계(556)(기입(또는 저장) 요청(도 10을 참조하여 도시되고 논의됨))에서 사용된다). 도 9를 참조하면, 단계(422)(판독 동작) 또는 단계(482)(원자적 동작) 또는 단계(554)(기입(또는 저장) 요청) 후에, 데이터 퇴거 프로세스가 시작되고(단계(522)에서 시작), 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 선택된 캐시 라인에 대한 위험 비트를 (레지스터(260)에) 설정하여(단계(524)), 이 캐시 라인의 데이터가 교체 데이터로 전이하는 프로세스에 있는 것으로 인해 다른 요청이 동일한 캐시 라인에 액세스하는 것을 차단하도록 메모리 위험 제어 회로(230)에 신호를 생성한다. 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 선택된 캐시 라인과 대응하는 메모리 어드레스로부터 현재 데이터를 판독하고(단계(526)), 제1 메모리 회로(125)에 기입(저장)하기 위해 퇴거된 데이터 및 메모리 어드레스(기입 요청과 효과가 동일하거나 동등함)를 큐잉하고(단계(528)), 예를 들어, 현재 판독된 데이터 및 메모리 어드레스를 인바운드 제어 멀티플렉서(240)에 전송하여, 데이터 및 요청은 (메모리 어드레스를 사용하여) 인바운드 제어 멀티플렉서(240)에 의해 선택되고 제1 메모리 뱅크 큐(265)에 저장된다. 스케줄러 회로(270)는 종국적으로 제1 메모리 뱅크 큐(265)로부터 퇴거된 데이터 및 메모리 어드레스를 선택하고, 제1 메모리 회로(125)의 메모리 뱅크에 액세스하는 것을 스케줄링(또는 개시)한다(단계(530)). 퇴거된 데이터는 지정된 메모리 어드레스에서 제1 메모리 회로(125)에 저장되고(단계(532)), 메모리 위험 제어 회로(230)(또는 메모리 위험 소거 (리셋) 회로(190))는 제2 메모리 회로(175)에서 선택된 캐시 라인에 대한 (레지스터(260)의) 위험 비트를 리셋하거나 또는 소거한다(단계(534)). 데이터 퇴거 프로세스는 단계(536)로 복귀하여 종료할 수 있고, 제2 메모리 회로(175)에서 선택된 캐시 라인은 이제 제1 메모리 회로(125)에 저장된 이전 데이터의 손실 없이 덮어기입될 수 있다. 단계(534 또는 536) 후에, 위험 비트를 소거하거나 또는 리셋할 때, 데이터 퇴거 프로세스를 요구한 프로세스가 재개될 수 있다(예를 들어, 판독(또는 로드) 프로세스를 위해 단계(424)로 진행하거나, 기입 프로세스를 위해 단계(558)로 진행하거나, 또는 원자적 동작 프로세스를 위해 단계(486)로 진행할 수 있다).
전술한 바와 같이, 위에서 논의된 단계(400, 402, 404, 406 및 410)는 일반적으로 도 7에 도시된 판독 동작만이 아니라 모든 판독, 기입 및/또는 원자적 동작에도 적용 가능하다. 도 10을 참조하면, 기입(또는 저장) 동작의 경우, 방법은 단계(400, 402, 404 및 410)를 완료하고, 네트워크 요청 큐(250)로부터 선택된 요청이 기입 요청이라고 결정한다. 요청이 판독 요청인지 또는 기입 요청인지를 결정하는 단계(406)와 단계(410)는 임의의 순서로 발생할 수 있으며, 그 결과, 단계(406)의 완료는 기입 동작을 시작하는 데 요구되지 않는다는 것이 주목된다. 또한 전술한 바와 같이, 요청이 (제3 유형의 요청으로서) 기입 요청이라고 결정하는 임의의 결정은 또한 배제하는 프로세스를 통해 또는 디폴트에 의해 발생할 수도 있는 데, 즉 이것이 제1 유형의 요청(판독)도 아니고 제2 유형의 요청(원자적 동작)도 아닌 결정에 의해 발생할 수 있다.
도 10을 참조하면, 요청이 기입(또는 저장) 동작을 수행하기 위한 기입 요청이라고 이전에 결정한 경우, 기입(또는 저장) 동작이 시작되고(단계(540)에서 시작), 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 캐시 라인을 선택하고(단계(542)), 메모리 위험 제어 회로(230)를 사용하여, 제2 메모리 회로(175)의 이 특정 캐시 라인이 메모리 위험 레지스터(260)에 설정된 위험 비트를 갖고 있는지 여부를 결정한다(단계(544)). 제2 메모리 회로(175)에서 이 캐시 라인에 대해 위험 비트가 설정되면, 제2 메모리 액세스 제어 회로(225)는 (위험 비트가 설정되지 않은) 다른 캐시 라인이 이용 가능한지 여부를 결정하고(단계(546)), 만약 그렇다면, 제2 메모리 회로(175)에서 이용 가능한 캐시 라인을 선택한다(단계(548)). 제2 메모리 회로(175)에 이용 가능한 캐시 라인이 없는 경우, 즉 모든 캐시 라인이 설정된 위험 비트를 갖는 경우, 제2 메모리 액세스 제어 회로(225)는 위험 비트가 제2 메모리 회로(175)의 캐시 라인에 대해 리셋되거나 소거될 때까지(단계(552)), 메모리 위험 제어 회로(230)에 기입 요청을 큐잉하고(단계(550)), 제2 메모리 액세스 제어 회로(225)는 단계(548)로 진행하여 리셋되거나 또는 소거된 위험 비트를 갖는 이 캐시 라인을 선택한다.
제2 메모리 회로(175)의 캐시 라인이 단계(542) 또는 단계(548)에서 선택될 때, 제2 메모리 액세스 제어 회로(225)는 선택된 캐시 라인에 이미 저장된 데이터가 있는지 여부를 결정하고(단계(554)), 이 캐시 라인에 데이터가 있는 경우, 데이터 퇴거 프로세스를 수행한다(단계(556))(즉, 도 9를 참조하여 도시되고 논의된, 제2 메모리 회로(175)로부터 데이터를 퇴거하기 위한 단계(522 내지 534)를 수행한다).
선택된 캐시 라인에 이미 저장된 데이터가 없거나(단계(554)) 데이터 퇴거 프로세스가 완료된 경우(단계(556)), 제2 메모리 액세스 제어 회로(225)는 제2 메모리 회로(175)에서 선택된 캐시 라인에 대해 위험 비트를 설정하여(단계(558)) 다른 요청이 동일한 캐시 라인에 액세스하는 것을 차단하여 이 캐시 라인의 데이터가 전이하는 프로세스에 있고 다른 판독 또는 기입 프로세스가 이 캐시 라인에 액세스하지 않게 하는 것으로 인해 메모리 일관성을 제공하도록 메모리 위험 제어 회로(230)에 신호를 생성한다.
그런 다음, 기입 요청의 기입 데이터는 기입 요청에 지정된 어드레스를 사용하여 제2 메모리 회로(175)에 기입(저장)되고(단계(560)), 이전에 설정된 위험 비트는 리셋되거나 또는 소거된다(단계(562)). 제2 메모리 회로(175)에 기입하고 위험 비트를 소거하는 이들 단계는 예를 들어 다음과 같은 몇 가지 방식, 즉 (1) 제2 메모리 액세스 제어 회로(225)를 사용하여 기입 데이터를 제2 메모리 회로(175)에 저장하고 제2 메모리 회로(175)에서 선택된 캐시 라인에 대한 위험 비트를 리셋하거나 또는 소거하기 위해 메모리 위험 제어 회로(230)에 신호를 생성하는 방식; 또는 (2) 제2 메모리 "히트" 요청 큐(280)를 통해 요청을 라우팅하고 기입 데이터를 제2 메모리 "히트" 데이터 큐(295)에 라우팅한 후 기입 병합 회로(180)를 사용하여 기입 데이터를 (통신 라인(236)을 통해) 제2 메모리 회로(175)에서 선택된 캐시 라인에 기입하고, 제2 메모리 회로(175)에서 선택된 캐시 라인에 대한 위험 비트를 리셋하거나 또는 소거하기 위해 메모리 위험 제어 회로(230)에 신호를 생성하는 방식 중 임의의 방식으로 발생할 수 있다. 기입 요청으로부터의 소스 어드레스를 사용하여, 확인(또는 완료)을 갖는 기입 동작 응답 데이터 패킷이 준비되고 일반적으로 통신 네트워크(150)를 통해 소스 어드레스로 전송되고(단계(564)), 기입 동작이 단계(566)로 복귀하여 종료할 수 있다. 이미 언급된 방법 및 구성 요소 중 임의의 것이 응답 데이터 패킷을 준비하고 전송하는 데 이용될 수 있다.
그 결과, 제2 메모리 회로(175)는 제2 메모리 회로(175)에 기입된 가장 최근의 데이터가 이후 "퇴거"되고 나서 제1 메모리 회로(125)로 이동하거나 또는 제1 메모리 회로에 재저장될 때까지 이 데이터를 저장한다. 가장 최근의 데이터는 비교적 신속하게 다시 이용될 수 있으므로, 제2 메모리 회로(175)에 데이터를 저장하면 또한 대기 시간을 감소시킬 수 있다.
병렬 실행 스레드를 사용하여 해결된 애플리케이션은 종종 다수의 스레드가 내용을 수정하려고 시도할 수 있는 메모리 영역을 갖는다. 올바른 결과를 얻으려면 다수의 스레드로부터 동작들이 한 번에 하나씩 수행되어야 한다. 애플리케이션에 필요한 많은 동작은 미리 결정되거나 내장된 원자적 동작 세트가 충분치 않을 정도로 복잡하다. 이러한 보다 복잡한 동작은 메모리 잠금을 설정하는 것, 동작을 수행하는 것, 및 메모리 잠금을 소거하는 것을 포함하여 일련의 명령어를 수행한다. 종래 기술에서, 이 동작 시퀀스는 메모리에 여러 번 액세스하고, 메모리 잠금이 소거될 때까지 기다리면서 프로세서 스레드가 폴링(poll)해야 할 가능성을 갖는다.
대표적인 실시형태에 따르면, 사용자 정의된 프로그래밍 가능한 원자적 동작은 사용자가 단일 애플리케이션에 가치 있는 원자적 동작을 정의할 수 있게 한다. 사용자 정의된 원자적 동작은 단일 프로세서 명령어를 실행하는 것에 의해 수행된다.
대표적인 실시형태에 따르면, 사용자는 애플리케이션이 사용자 정의된 원자적 동작을 메모리 컨트롤러 회로(100, 100A)에 발행할 수 있게 하는 프로그래밍 가능한 원자적 동작 명령어 세트를 생성할 수 있다. 원자적 동작은 미리 결정된 원자적 동작과 유사하게 발행된다. 프로그래밍 가능한 원자적 동작 요청은 물리적 메모리 어드레스, 프로그래밍 가능한 원자적 동작 식별자 및 일반적으로 일부 개수의 스레드 상태 레지스터 값을 포함한다. 메모리 컨트롤러 회로(100, 100A)는 프로그래밍 가능한 원자적 동작 요청을 수신하고, 제2 메모리 제어 회로(160)는 제2 메모리 회로(175)의 타깃 캐시 라인 상에 위험을 놓고(위험 비트를 설정하고), 그런 다음 프로그래밍 가능한 원자적 동작 요청 정보를 메모리 컨트롤러 회로(100, 100A) 내 또는 메모리 컨트롤러 회로에 결합된 프로그래밍 가능한 원자적 동작 회로부(135)에 전달한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 제공된 프로그래밍 가능한 원자적 동작 요청 정보(메모리 어드레스, 메모리 어드레스에 위치된 64 비트 메모리 값, 및 스레드 상태 레지스터를 포함함)로부터 레지스터 상태를 초기화한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 프로그래밍 가능한 원자적 동작을 수행하기 위해 일련의 명령어를 실행한다. 프로그래밍 가능한 원자적 동작의 결과는 타깃 메모리 라인 또는 제2 메모리 회로(175)에 다시 저장되고, 가능하게는 요청 패킷으로 요청 소스 또는 프로세서에 반환될 수 있다.
요청 소스 또는 프로세서는 일반적으로 시스템 호출을 통해 시스템(50, 50A)에 프로그래밍 가능한 원자적 동작이 요구된다는 것을 통지한다. 운영 체제는 프로그래밍 가능한 원자적 동작 회로부(135)와 관련된 메모리에 제공된 명령어 세트를 로드함으로써 시스템 호출을 처리한다.
프로그래밍 가능한 원자적 동작 회로부(135)는 프로그래밍 가능한 원자적 동작 요청 패킷 내의 프로그래밍 가능한 원자적 동작 원자적 식별자로부터 획득된 위치에서 시작하는 로드된 명령어를 실행함으로써 사용자 정의된 프로그래밍 가능한 원자적 동작을 실행하기 시작한다.
프로그래밍 가능한 원자적 동작 회로부(135)는 원자적 동작을 수신할 때 제2 메모리 제어 회로(160)에 의해 원래 설정된 위험 비트에 의해 커버되는 제2 메모리 회로(175)의 메모리 라인으로 모든 메모리 요청을 강제한다. 추가적으로, 프로그래밍 가능한 원자적 동작 회로부(135)는 프로그래밍 가능한 원자적 동작이 완료되는 것을 보장하기 위해 실행을 위한 명령어의 수를 유한한 수로 제한해야 한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 또한 범위를 벗어난 메모리 라인에 대한 액세스 및 너무 많은 명령어의 실행을 검출하고, 실패 상태와 함께 요청 소스 또는 프로세서에 다시 응답한다. 요청 소스 또는 프로세서는 트랩을 발행하여 시스템에 장애를 통지한다.
대표적인 실시형태에서, 예시적인 프로그래밍 가능한 원자적 동작 명령어는 예를 들어 표 4에 표시된 바와 같은 대표적인 형식을 갖는다.
31 27 | 26 | 25 | 24 20 | 19 15 | 14 12 | 11 7 | 6 0 | |
10000 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST0 |
10001 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST1 |
10010 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST2 |
10011 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST3 |
10100 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST4 |
10101 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST5 |
10110 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST6 |
10111 | aq | rl | 00000 | 00000 | ac | 00000 | 0101110 | AMOCUST7 |
대표적인 실시형태에서, 프로그래밍 가능한 원자적 동작 회로부(135)에 의해 수행되는 프로그래밍 가능한 원자적 메모리 동작을 다시 참조하면, 프로그래밍 가능한 원자적 동작 회로부(135)는 프로그래밍 가능한 원자적 메모리 동작을 효율적으로 수행하도록 수정된 RISC-V 프로세서 ISA에 기초한다. 이들 수정에 의해, 프로그래밍 가능한 원자적 동작 회로부(135) 또는 다른 프로세서(110, 110A) 또는 HTP(115), 예를 들어, RISC-V 프로세서가 스레드를 즉석에서 생성하고, 원자적 동작을 수행하기 위해 메모리로부터 최소량의 데이터에 액세스하고, 원자적 동작이 완료되면 메모리 위험 비트(잠금)를 소거하고, 통신 네트워크(150)를 통해 응답 패킷을 전송하는 옵션으로 이전에 생성된 스레드를 종료할 수 있다.
이 수정은 다수의 스레드에 걸쳐 배럴 스타일의 명령어 처리를 포함한다. 배럴 처리에 의해, 프로그래밍 가능한 원자적 동작 회로부(135) 또는 다른 프로세서(110, 110A)는 다른 즉시 실행 가능한 스레드로 스위칭함으로써 메모리 액세스 대기 시간을 숨길 수 있다. 배럴 처리는 단일 원자적 동작에 대한 전체 시간을 증가시키지만 이러한 처리 스타일은 원자적 동작 처리량을 크게 증가시킨다. 이 트레이드오프는 많은 메모리 위치에 걸쳐 주문형 원자적 동작을 수행해야 하는 애플리케이션에 적합하다. (예를 들어, 배리어 동작을 카운트하는) 단일 메모리 위치에서 원자적 동작을 수행하는 애플리케이션은 미리 결정된 원자적 동작을 사용할 수 있다. 이 상황에서, 메모리 위치는 제2 메모리 회로(175)에 캐싱되고 메모리 위험 비트(잠금)는 비교적 최소 시간 기간 동안 설정된다.
프로그래밍 가능한 원자적 동작 회로부(135) 또는 다른 프로세서(110, 110A)는 스레드당 판독/기입 메모리 버퍼 세트를 갖는다. 메모리 버퍼는 제1 및 제2 메모리 회로(125, 175)에 액세스하는 것을 최소화하기 위해 판독 프리페치(prefetching) 및 기입 병합(coalescing)을 허용한다. RISC-V 아키텍처는 획득/해제 명령어 기능이 있는 이런 스타일의 메모리 인터페이스를 지원한다.
대표적인 실시형태에서, 프로그래밍 가능한 원자적 동작 회로부(135)는 미국 특허 출원 번호 16/176,434에 설명된 보다 상세히 설명된 전술된 바와 같은 HTP(115)로 구현된다. 이러한 실시형태에서, HTP(115)는 프로세서(110A)로서 이용되고, 또한 제2 메모리 컨트롤러 회로(100A)와의 직접 통신 링크(또는 라인)(60)가 제공된다.
도 11은 대표적인 프로그래밍 가능한 원자적 동작 회로부(135)가 HTP(115)에 포함될 수 있는 경우를 포함하는, 대표적인 프로그래밍 가능한 원자적 동작 회로부(135)(또는 다른 프로세서(110, 110A)) 실시형태의 블록도이다. 용이한 도시 및 논의를 위해, HTP(115)의 스레드 메모리 및 네트워크 응답 메모리의 모든 레지스터가 도 11에 도시된 것은 아니라는 것이 주목된다. 도 11을 참조하면, 프로그래밍 가능한 원자적 동작 회로부(135)는 메모리 컨트롤러 인터페이스 회로(720), 코어 제어 회로부(610) 및 하나 이상의 프로세서 코어(605)를 포함한다.
메모리 컨트롤러 인터페이스 회로(720)는 프로그래밍 가능한 원자적 동작 회로부(135) 사이의 통신과 제1 메모리 컨트롤러 회로(100) 또는 별도의 제2 메모리 컨트롤러 회로(100A)의 균형을 관리하고, 예를 들어, (1) 프로그래밍 가능한 원자적 동작 회로부(135)의 제어 논리 및 스레드 선택 회로부(630), 코어 제어 및 스레드 메모리(615) 및/또는 데이터 버퍼(715)에 프로그래밍 가능한 원자적 동작 요청 및 판독 데이터를 제공하고; 및 (2) 프로세서 코어(605)에 의해 프로그래밍 가능한 원자적 동작이 완료될 때 생성된 결과 데이터를 프로그래밍 가능한 원자적 동작 요청 데이터와 함께 원자적 동작 요청 큐에 제공하여 결과 데이터를 제2 메모리 회로(175)에 저장하는 것을 수행한다.
코어 제어 회로부(610)는, (프로세서 코어(605)에서 실행되는 대응하는 명령어에 대한 스레드를 관리하는) 제어 논리 및 스레드 선택 회로부(630), 프로그래밍 가능한 원자적 동작을 수행하기 위한 명령어를 저장하는 명령어 캐시(640), 및 실행 큐(645), 코어 제어 및 스레드 메모리(615) 및 데이터 버퍼(715)를 포함하는 다양한 유형의 메모리 및 레지스터를 포함한다. 프로그래밍 가능한 원자적 동작 회로부(135)가 프로세서(110A) 또는 HTP(115)로서 구현될 때, 프로세서(110A) 또는 HTP(115)는 통신 네트워크(150)를 통해 통신하기 위해 전술한 바와 같이 네트워크 통신 인터페이스(170)를 더 포함한다. 제어 논리 및 스레드 선택 회로(630)는 예를 들어 제한 없이 복수의 다양한 논리 게이트(예를 들어, NAND, NOR, AND, OR, 배타적 OR 등) 및 다양한 상태 기계 회로(제어 논리 회로(들)(631), 스레드 선택 제어 회로부(705)) 및 멀티플렉서(예를 들어, 입력 멀티플렉서(687), 스레드 선택 멀티플렉서(685)) 중 임의의 것의 조합을 사용하여 형성된 회로부를 포함한다. 네트워크 통신 인터페이스(170)는 통신 네트워크(150)로부터 데이터 패킷을 수신하기 위한 입력 큐(205); 데이터 패킷(응답 패킷을 포함함)을 통신 네트워크(150)에 전송하기 위한 출력 큐(210); 통신 네트워크(150)로부터 수신되는 데이터 패킷을 디코딩하고, (지정된 필드에서) 데이터를 취하고 패킷에 제공된 데이터를 코어 제어 및 스레드 메모리(615)의 관련 레지스터에 전송하기 위한 데이터 패킷 디코더 회로(215); 및 통신 네트워크(150)에서 전송하기 위해 발신 데이터 패킷(예를 들어, 프로그래밍 가능한 원자적 메모리 동작 응답 패킷, 제1 메모리 회로(125)에 대한 요청)을 인코딩하기 위한 데이터 패킷 인코더 회로(220)를 포함한다. 데이터 패킷 디코더 회로(215) 및 데이터 패킷 인코더 회로(220)는 상태 기계 또는 다른 논리 회로부로서 각각 구현될 수 있다. 선택된 실시형태에 따라, 각각의 프로세서 코어(605)에 대해 별개의 코어 제어 회로부(610) 및 별개의 코어 제어 및 스레드 메모리(615)가 있을 수 있고, 또는 단일 코어 제어 회로부(610) 및 단일 코어 제어 및 스레드 메모리(615)가 다중 프로세서 코어(605)에 이용될 수 있다.
프로그래밍 가능한 원자적 동작 요청 및 판독 데이터는, 전술한 바와 같이, 통신 버스 또는 라인(60, 60A)을 사용하여, 요청 선택 멀티플렉서(305) 및 데이터 선택 멀티플렉서(310)로부터 메모리 컨트롤러 인터페이스 회로(720)에 각각 제공된다. 요청은 요청의 소스에 대한 정보(예를 들어, 소스 어드레스), 및 수행될 특정 프로그래밍 가능한 원자적 동작의 지정인 원자적 메모리 연산자 식별자를 포함한다. 집합적으로, 소스 어드레스, 원자적 메모리 연산자 식별자 및 (피연산자 데이터로서) 판독 데이터는 "작업 설명자"를 포함한다.
프로그래밍 가능한 원자적 동작은 시스템(50, 50A) 사용자가 일련의 타깃 애플리케이션에 특정된 원자적 메모리 동작 세트를 정의할 수 있게 한다. 이러한 프로그래밍 가능한 원자적 동작은 프로세서 코어(605)에 의해 실행되기 위해 명령어 캐시(640)에 저장된 프로그램 명령어를 포함한다. 대표적인 실시형태에서, 메모리 컨트롤러 인터페이스 회로(720)는 프로세서 코어(605)에 의해 프로그래밍 가능한 원자적 동작을 실행하기 시작하기 위한 명령어를 선택하기 위해 원자적 메모리 연산자 식별자를 (가상) 명령어 어드레스로 변환하는 변환 표(translation table)를 포함하는 레지스터(710) 세트를 포함한다. 다른 대표적인 실시형태에서, 코어 제어 및 스레드 메모리(615)는 프로세서 코어(605)에 의해 프로그래밍 가능한 원자적 동작을 실행하기 시작하기 위한 명령어를 선택하기 위해 원자적 메모리 연산자 식별자를 (가상) 명령어 어드레스로 변환하는 변환 표를 포함하는 레지스터(710) 세트를 포함한다.
작업 설명자가 메모리 컨트롤러 인터페이스 회로(720)를 통해 도착하면, 제어 논리 및 스레드 선택 회로부(630)는 스레드 ID 풀 레지스터(별도로 도시되지 않음)로부터 이용 가능한 스레드 식별자(ID)를 작업 설명자의 스레드에 할당하고, 할당된 스레드 ID는 코어 제어 및 스레드 메모리(615)의 다른 레지스터에 대한 인덱스로 사용되며, 이 코어 제어 및 스레드 메모리의 다른 레지스터는 이후 작업 설명자로부터 대응하는 데이터 및 일반적으로 프로그램 카운트 및 하나 이상의 인수로 채워진다. 제어 논리 및 스레드 선택 회로부(630)는 필요에 따라 데이터 버퍼(715)를 로드하는 것과 같은 프로그래밍 가능한 원자적 동작을 위한 스레드 실행 명령어를 시작하기 위한 준비로 스레드 상황 상태의 나머지를 자율적으로 초기화한다. 데이터 버퍼(715)는 판독 요청 데이터 및 기입 데이터, 프리페치된 데이터, 및 프로그래밍 가능한 원자적 동작의 실행 동안 생성될 수 있는 임의의 중간 결과를 저장함으로써 요청(예를 들어, 제1 메모리 회로(125)에 대한 요청)을 최소화하는 데 이용된다.
이 스레드 ID에는 유효 상태(이것이 실행 준비가 된 것을 나타냄)가 주어지고, 그리고 프로그래밍 가능한 원자적 동작을 위한 스레드에는 일반적으로 이용 가능한 가장 높은 (제1) 우선순위가 할당되기 때문에 스레드 ID는 실행(실행 준비) 큐(645)의 제1 우선순위 큐(655)로 푸시된다. 프로그래밍 가능한 원자적 동작 회로부(135)가 다른 연산을 수행할 수도 있는 HTP(115)로 구현된다면, 프로그래밍 가능한 원자적 동작을 위한 스레드 ID 전용 큐가 제공되며, 이 전용 큐는 빠른 선택과 실행을 위해 가장 높은 우선순위를 다시 갖는다. 멀티플렉서(685)와 같은 제어 논리 및 스레드 선택 회로부(630)의 선택 회로부는, 실행(실행 준비) 큐(들)(645)에서 다음 스레드 ID를 선택하고, 이 다음 스레드 ID는 코어 제어 및 스레드 메모리(615)(프로그램 카운트 레지스터 및 스레드 상태 레지스터)에서 인덱스로서 사용되고, 명령어 캐시(640)로부터 명령어를 선택하고 이 명령어는 실행을 위해 실행 파이프라인(650)에 제공된다. 그런 다음 실행 파이프라인은 프로그래밍 가능한 원자적 동작을 위해 이 명령어를 실행한다.
명령어의 실행이 완료되면, 제어 논리 및 스레드 선택 회로부(630)의 제어 하에 동일한 삼중 정보(스레드 ID, 유효 상태 및 우선순위)는 다양한 조건에 따라, 프로그래밍 가능한 원자적 동작에 대한 명령어를 계속 실행하기 위해 실행을 계속 선택하기 위해 실행(실행 준비) 큐(들)(645)의 제1 우선순위 큐(655)로 반환될 수 있다. 예를 들어, 선택된 스레드 ID의 마지막 명령어가 복귀 명령어(프로그래밍 가능한 원자적 동작에 대한 스레드 실행이 완료되었으며 결과적인 원자적 동작 데이터가 제공되고 있는 것을 나타냄)인 경우, 제어 논리 및 스레드 선택 회로부(630)는 스레드 ID 풀 레지스터에서 스레드 ID의 이용 가능한 풀에 스레드 ID를 반환하여 다른 상이한 스레드에 의해 사용하기 위해 이용 가능하게 할 수 있다. 또한 예를 들어, 유효 지시자는 변할 수 있는 데, 예를 들어, (예를 들어, 정보가 제1 메모리 회로(125)로부터 반환되거나 제1 메모리 회로에 기입되는 것을 스레드가 기다리거나 또는 다른 이벤트를 기다릴 수 있는 동안) 일시 중지 상태로 변할 수 있고, 이 경우에, 스레드 ID(이제 일시 중지 상태)는 상태가 다시 유효로 변하거나 (프로그래밍 가능한 원자적 동작을 위해 사용자에 의해 제공된 명령어가 어떤 방식으로 문제가 있는 경우 프로그래밍 가능한 원자적 동작 회로부(135)를 중지시키거나 정지시키는 것을 피하기 위해) 미리 결정된 시간 기간이 경과할 때까지 실행(실행 준비) 큐(들)(745)로 반환되지 않는다.
이전 예를 계속 들면, 선택된 스레드 ID에 대한 마지막 명령어가 반환 명령어인 경우, 반환 정보(스레드 ID 및 반환 인수)는 이후 일반적으로 선입 선출(FIFO)로서 구현된 네트워크 커맨드 큐(690)로 실행 파이프라인(650)에 의해 푸시된다. 스레드 ID는 거래 ID 및 소스(호출자) 어드레스(또는 다른 식별자)와 같은 반환 정보를 얻기 위해 스레드 반환 레지스터에서 색인으로 사용되고, (제1 메모리 컨트롤러 회로(100)의 네트워크 통신 인터페이스(170)에서 또는 프로세서(110A)의 네트워크 통신 인터페이스(170)에서) 패킷 인코더 회로는 이후 (통신 네트워크(150) 상에서) 발신 복귀 데이터 패킷을 생성한다. 또한, 전술한 바와 같이, 결과 데이터는 결과 데이터가 제2 메모리 회로(175)에 기입될 수 있도록 메모리 컨트롤러 인터페이스 회로(720)에 제공된다.
시스템(50, 50A)에 의해 지원되는 프로그래밍 가능한 원자적 동작 세트(및 대응하는 명령어)는 부팅 시에 수립된다. 원자적 메모리 연산자 식별자를 (가상) 명령어 어드레스로 변환하는 레지스터(710)의 표는 운영 체제에 의해 로드된다.
또한 프로그래밍 가능한 원자적 동작이 완료되는 것(그리고 결과 데이터가 제2 메모리 회로(175)에 기입될 때 위험 비트가 이후에 소거되거나 리셋되는 것)을 보장하기 위해, 예를 들어, 대응하는 기입 어드레스 공간을 주어진 프로그래밍 가능한 원자적 동작이 기입 특권을 갖는 메모리 영역으로 제한하고, 프로그래밍 가능한 원자적 동작에서 실행될 수 있는 명령어의 수를 제한하는 것을 포함하여 다양한 제약이 프로그래밍 가능한 원자적 동작에 놓일 수 있다. 또한, 프로그래밍 가능한 원자적 동작이 제2 메모리 회로(175)에서 캐시 라인을 무기한으로 예비하는 것을 허용하지 않기 위해, 위험 비트는 미리 결정된 시간 기간 후에 자동으로 소거되거나 리셋될 수 있다.
예를 들어, 수신되는 작업 설명자는 또한 예를 들어 표 5에 표시된 정보로, 코어 제어 및 스레드 메모리(615)의 스레드 레지스터의 새로운 스레드를 (프로그래밍 가능한 원자적 동작을 위해) 초기화하는 데 이용된다.
항목 이름 |
RISC-V
(코어 605) 레지스터 |
항목 설명 |
원자적 요청 어드레스 | A0 | 프로그래밍 가능(주문형) 원자적 요청으로 전송된 어드레스 |
메모리 데이터(8 바이트) | A1 | 프로그래밍 가능(주문형) 원자적 요청 어드레스를 사용하여 메모리에 액세스하여 획득된 데이터 |
원자적 요청 인수#1 | A2 | 선택적인 프로그래밍 가능(주문형) 원자적 요청 인수. 통신 네트워크(150)를 통해 전송되는 원자적 요청 패킷에는 최대 4개의 인수가 포함될 수 있다. |
원자적 요청 인수#2 | A3 | 선택적인 프로그래밍 가능(주문형) 원자적 요청 인수. |
원자적 요청 인수#3 | A4 | 선택적인 프로그래밍 가능(주문형) 원자적 요청 인수. |
원자적 요청 인수#4 | A5 | 선택적인 프로그래밍 가능(주문형) 원자적 요청 인수. |
예를 계속 들면, 생성된 스레드는 표준 및 주문형 RISC-V 명령어를 실행하여 프로그래밍 가능한(주문형) 원자적 동작을 수행한다. 페치 및 동작 커맨드의 경우, RISC-V 명령어는 A1 및 A2에 정의된 동작을 수행하고, 결과를 A0에 제공된 어드레스에 기입한다. A0의 어드레스는 메모리 라인 위험 잠금을 소거하는 데에도 사용된다.
새로운 RISC-V 명령어가 프로그래밍 가능한 원자적 동작을 지원하기 위해 고안되었다.
로드 비-버퍼링 명령어(로드 비-버퍼링 (NB))는 데이터 버퍼(715)에서 버퍼 히트를 검사하지만, 버퍼 미스에서는 요청된 피연산자에 대해서만 메모리 요청을 발행하고, 획득된 데이터를 버퍼에 넣지 않는다. 이런 유형의 명령어는 NB 접미사(비-버퍼링)를 갖는다.
LB.NB RA,40(SP)
NB 로드 명령어는 어셈블리로 작성된 런타임 라이브러리에서 사용될 것으로 예상된다.
예시적인 로드 명령어는 로드 비-버퍼링 명령어 형식을 보여주는 표 6에 나열되어 있다.
31 20 | 19 15 | 14 12 | 11 7 | 6 0 | |
Imm[11:0] | rs1 | 000 | rd | 0000010 | LB.NB |
Imm[11:0] | rs1 | 001 | rd | 0000010 | LH.NB |
Imm[11:0] | rs1 | 010 | rd | 0000010 | LW.NB |
Imm[11:0] | rs1 | 011 | rd | 0000010 | LD.NB |
Imm[11:0] | rs1 | 100 | rd | 0000010 | LBU.NB |
Imm[11:0] | rs1 | 101 | rd | 0000010 | LHU.NB |
Imm[11:0] | rs1 | 110 | rd | 0000010 | LWU.NB |
Imm[11:0] | rs1 | 010 | rd | 0000110 | FLW.NB |
Imm[11:0] | rs1 | 011 | rd | 0000110 | FLD.NB |
프로그래밍 가능한(주문형) 원자적 동작은 원자적 동작이 제1 또는 제2 메모리 컨트롤러 회로(100, 100A)에 의해 수신될 때 (제공된 어드레스로서) 제2 메모리 회로(175)의 캐시 라인에 위험 비트를 ("잠금"으로) 설정한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 잠금이 소거되어야 할 때를 지시한다. 이것은 프로그래밍 가능한 원자적 동작 회로부(135)가 프로그래밍 가능한(주문형) 원자적 동작을 위해 (또는 저장이 요구되지 않은 경우 원자적 복귀 명령어에서) 수행하는 마지막 저장 동작에서 발생한다. 프로그래밍 가능한 원자적 동작 회로부(135)는 위험 소거 저장 동작을 실행함으로써 위험 비트가 소거되거나 리셋되는 것을 나타낸다.
위험 비트를 나타내는 저장 명령어는 소거되거나 또는 리셋되어야 한다:
SB.CL RA, 40(SP)
SH.CL RA, 40(SP)
SW.CL RA, 40(SP)
SD.CL RA, 40(SP)
FSW.CL RA, 40(SP)
FSD.CL RA, 40(SP)
이러한 저장 명령어의 형식은 저장 및 잠금 소거 명령어 형식을 보여주는 표 7에 나와 있다.
31 25 | 24 20 | 19 15 | 14 12 | 11 7 | 6 0 | |
Imm[11:5] | rs2 | rs1 | 000 | Imm[4:0] | 0110010 | SB.CL |
Imm[11:5] | rs2 | rs1 | 001 | Imm[4:0] | 0110010 | SH.CL |
Imm[11:5] | rs2 | rs1 | 010 | Imm[4:0] | 0110010 | SW.CL |
Imm[11:5] | rs2 | rs1 | 011 | Imm[4:0] | 0110010 | SD.CL |
Imm[11:5] | rs2 | rs1 | 010 | Imm[4:0] | 0110110 | FSW.CL |
Imm[11:5] | rs2 | rs1 | 011 | Imm[4:0] | 0110110 | FSD.CL |
원자적 복귀(AR) 명령어(AR)는 프로그래밍 가능한 원자적 동작의 스레드의 실행을 완료하는 데 사용되며, 선택적으로 위험 비트(잠금)를 소거하고, 선택적으로 프로그래밍 가능한 원자적 동작을 발행한 소스에 대한 응답을 다시 제공한다.
AR 명령어는 0, 1개 또는 2개의 8 바이트 인수 값을 발행하는 컴퓨팅 요소로 다시 보낼 수 있다. 다시 보낼 인수의 수는 ac2 접미사(A1 또는 A2)에 의해 결정된다. 접미사가 없는 것은 0의 인수를 의미하고, A1은 단일 8 바이트 인수를 의미하고, A2는 2개의 8 바이트 인수를 의미한다. 필요한 경우, 인수는 RISC-V X 레지스터(a1 및 a2)로부터 획득된다.
AR 명령어는 또한 원자적 명령어와 관련된 (제공된 어드레스로서) 제2 메모리 회로(175)의 캐시 라인에 대해 이전에 설정된 위험 비트를 소거할 수 있다. AR은 a0 레지스터의 값을 어드레스로 사용하여 잠금 소거 동작을 전송한다. 명령어에 접미사(CL)가 포함된 경우 잠금 소거 동작이 발행된다. 잠금 소거 동작은 잠금을 소거하는 데 사용되는 어드레스로서 레지스터(A0)의 값을 사용한다.
AR 명령어에는 원자적 동작과 관련된 위험 비트 잠금이 소거될지 여부에 따라 두 가지 변형이 있다. 제안된 명령어는 원자적 복귀 명령어 형식을 나타내는 다이어그램인 표 8에 나와 있다.
31 25 | 24 20 | 19 15 | 14 12 | 11 7 | 6 0 | |
1010000 | 00000 | 00000 | ac2 | 00000 | 1110010 | AR |
1011000 | 00000 | 00000 | ac2 | 00000 | 1110010 | AR.CL |
표 9는 원자적 복귀 명령어에 대한 AC2 접미사 옵션을 도시한다.
ac2 인코딩 | 접미사 | 인수 카운트 |
0 | 접미사 없음 | 0 |
1 | A1 | 1 |
2 | A2 | 2 |
다음의 실시예 1은 프로그래밍 가능(주문형) 원자적 동작으로서 구현된 원자적 페치 및 XOR 연산을 도시한다.
실시예 1:
// a0 - 원자적 어드레스
// a1 - (a0)의 64 비트 메모리 값
// a2 - 64 비트 원자적 피연산자
페치_및_xor:
xor.d a2, a1, a2 // a1은 메모리 값을 포함하고, a2는 XOR될 값을 포함한다
sd.cl a2, 0(a0) // a0은 메모리 어드레스를 포함하고, 위험 비트 잠금을 소거한다
ar // 버퍼로부터 라인을 퇴거하고, 원자적 스레드를 종료한다
제1 명령어(xor.d)는 원자적 피연산자와 액세스된 메모리 값에 대해 XOR 연산을 수행한다. 제2 명령어(sd.cl)는 레지스터(a2)에 있는 64 비트 값을 레지스터(a0)에 제공된 원자적 동작 어드레스에 저장한다. 추가적으로, 저장 동작은 (제공된 어드레스로서) 제2 메모리 회로(175)의 캐시 라인에 대해 이전에 설정된 위험 비트를 소거하는 데 사용된다. 마지막 명령어(ar)는 스레드를 종료시킨다. sd.cl 명령어는 64 비트 값을 스레드 기입 버퍼에 저장하지만 기입 버퍼를 메모리로 강제하지는 않는다는 것이 주목된다. ar 명령어는 모든 더티(dirty) 기입 버퍼를 메모리로 강제하는 데 사용된다. 이는 sd.cl 명령어가 64 비트 값을 기입 버퍼에 기입하고, 그런 다음 ar 명령어에 의해 제2 메모리 회로(175)에 기입될 때 관련 위험 위험을 소거하는 데 필요한 것으로 기입 버퍼를 표시하는 것을 의미한다.
다음의 실시예 2는 프로그래밍 가능한 원자적 동작으로서 구현된 이중 비교 및 스왑(Double Compare and Swap: DCAS) 동작을 도시한다.
실시예 2:
// a0 - 원자적 어드레스
// a1 - (a0)의 64 비트 메모리 값
// a2 - DCAS 비교 값 1
// a3 - DCAS 비교 값 2
// a4 - DCAS 스왑 값 1
// a5 - DCAS 스왑 값 2
atomic_dcas:
bne a1, a2, fail // 제1 8 바이트 비교
ld.nb a6, 8(a0) // 제2 8 바이트 메모리 값 로드 -
메모리 캐시에 히트해야 한다
bne a6, a3, fail // 제2 8 바이트 비교
sd a4, 0(a0) // 제1 8 바이트 스왑 값을 스레드 저장 버퍼에 저장한다
sd.cl a5, 8(a0) // 제2 8 바이트 값을 저장하고 위험 비트를 소거한다
li a1, 0
ar.a1 // AMO 성공 응답
fail:
li a1, 1
ar.a1.cl // AMO 실패 응답(및 위험 비트 소거)
실시예 2는 로드 비-버퍼링 명령어(ld.nb)의 사용을 보여준다. 비-버퍼링 로드는 필요한 8 바이트만을 메모리로부터 가져오는 데 사용된다. 비-버퍼링 로드를 사용하면 전체 메모리 버퍼(예를 들어, 64 바이트)를 프리페치하는 것을 방지된다.
실시예 2는 또한 일련의 저장 명령어(sd 및 sd.cl)의 사용을 도시한다. 제1 명령어(sd)는 64 비트를 기입 버퍼에 기입한다. 제2 명령어(sd.cl)는 제2 64 비트 값을 기입 버퍼에 기입한다. ar 명령어는 기입 버퍼에 있는 16 바이트의 더티 데이터를 위험 비트를 소거하는 것이 필요하다는 태그가 붙는 단일 요청으로 메모리에 다시 기입한다.
DCAS의 이러한 구현은 성공 또는 실패를 나타내는 단일 값을 반환한다. 제2 ar 명령어는 동작을 수행한 이전 저장이 없어서 위험 비트를 소거하는 데 사용된다.
전술된 바와 같이 대표적인 장치, 시스템 및 방법은 고성능이고 에너지 효율적인 메모리 컨트롤러(100, 100A)를 제공한다. 메모리 컨트롤러(100, 100A)의 대표적인 실시형태는, 예를 들어 제한 없이, 고속 푸리에 변환("FFT") 동작 수행, 유한 임펄스 응답("FIR") 필터링, 및 더 큰 응용 분야에서 일반적으로 사용되는 다른 연산 집약적인 동작, 예를 들어, 합성 조리개 레이더, 5G 네트워킹 및 5G 기지국 운영, 기계 학습, AI, 스텐실 코드 운영, 및 스펙트럼 기술을 사용하는 그래프 클러스터링과 같은 그래프 분석 동작을 위해 상당히 매우 빈번한 메모리 액세스를 요구하는 연산 집약적인 커널 또는 동작을 지원한다. 메모리 컨트롤러(100, 100A)의 대표적인 실시형태는 미리 결정된 원자적 동작 및 또한 프로그래밍 가능한 사용자 정의된 원자적 동작과 같은 광범위한 원자적 동작을 포함하는, 원자적 동작에 대한 높은 처리량과 낮은 대기 시간을 포함하여, 높은 처리량 및 낮은 대기 시간을 위해 최적화된다.
메모리 컨트롤러(100, 100A)의 대표적인 실시형태는 최신 X86 서버 플랫폼에 비해 극적인 결과를 생성하였다. 예를 들어, 메모리 컨트롤러(100, 100A)의 대표적인 실시형태는 표준 GDDR6 DRAM 메모리를 사용하여 3배(3.48x) 더 나은 원자적 업데이트 성능을 제공하였고, (더 많은 메모리 뱅크를 갖는) 수정된 GDDR6 DRAM 메모리를 사용하여 17배(17.6x) 더 나은 원자적 업데이트 성능을 제공하였다.
메모리 컨트롤러(100, 100A)의 대표적인 실시형태는 또한 매우 낮은 대기 시간 및 높은 처리량의 메모리 판독 및 기입 동작을 제공하였으며, 일반적으로 메모리 뱅크 이용 가능성, 에러 정정 오버헤드, 및 통신 네트워크(150)와 메모리(125, 175) 디바이스 자체를 통해 이용 가능한 대역폭(Gb/s)에 의해서만 제한되어, 최대 대역폭에 도달할 때까지 일정한 대기 시간을 초래하였다.
메모리 컨트롤러(100, 100A)의 대표적인 실시형태는 또한 미리 결정된 원자적 동작의 성능과 필적할 수 있는 프로그래밍 가능한 또는 사용자 정의된 원자적 동작을 위한 매우 높은 성능(높은 처리량 및 낮은 대기 시간)을 제공한다. 프로그래밍 가능한 또는 사용자 정의된 원자적 동작을 실행하는 프로그래밍 가능한 원자적 동작 회로부(135)에 제공되는 추가의 직접 데이터 경로는 통신 네트워크(150)의 대역폭에 의해 부과되는 임의의 제한 없이 및 통신 네트워크(150)의 혼잡을 증가시키지 않으면서 추가 기입 동작을 허용한다.
본 명세서에서 사용된 "프로세서 코어"(605)는 임의의 유형의 프로세서 코어일 수 있고, 본 명세서에서 논의된 기능을 수행하도록 구성, 설계, 프로그래밍 또는 달리 적응된 하나 이상의 프로세서 코어로서 구현될 수 있다. 본 명세서에서 사용된 "프로세서"(110, 110A)는 임의의 유형의 프로세서일 수 있으며, 본 명세서에서 논의된 기능을 수행하도록 구성, 설계, 프로그래밍 또는 달리 적응된 하나 이상의 프로세서로서 구현될 수 있다. 본 명세서에서 프로세서라는 용어가 사용될 때, 프로세서(110, 110A)는 단일 집적 회로("IC")의 사용을 포함할 수 있고, 또는 함께 연결되거나, 배열되거나 그룹화된 복수의 집적 회로 또는 다른 구성 요소, 예를 들어, 컨트롤러, 마이크로프로세서, 디지털 신호 프로세서("DSP"), 어레이 프로세서, 그래픽 또는 이미지 프로세서, 병렬 프로세서, 다중 코어 프로세서, 주문형 IC, 응용 특정 집적 회로("ASIC"), 전계 프로그래밍 가능한 게이트 어레이("FPGA"), 적응형 컴퓨팅 IC, 관련 메모리(예를 들어, RAM, DRAM 및 ROM), 및 다른 IC 및 구성 요소를 아날로그든 또는 디지털이든 사용하는 것을 포함할 수 있다. 그 결과, 본 명세서에서 사용된 프로세서 또는 컨트롤러라는 용어는 관련된 메모리, 예를 들어, 마이크로프로세서 메모리 또는 추가 RAM, DRAM, SDRAM, SRAM, MRAM, ROM, FLASH, EPROM 또는 E2PROM과 함께 본 명세서에서 논의된 기능을 수행하는 단일 IC, 또는 주문형 IC, ASIC, 프로세서, 마이크로프로세서, 컨트롤러, FPGA, 적응형 컴퓨팅 IC, 또는 집적 회로의 일부 다른 그룹의 배열을 동등하게 의미하고 이들을 포함하는 것으로 이해된다. 관련된 메모리를 갖는 프로세서(110, 110A)는 본 명세서에서 논의된 본 발명의 방법을 수행하도록 (프로그래밍, FPGA 상호 연결 또는 배선을 통해) 적응되거나 구성될 수 있다. 예를 들어, 방법은 예를 들어, 프로세서(110, 110A)가 동작할 때(즉, 전력이 투입되고 기능할 때) 후속 실행을 위한 일련의 프로그램 명령어 또는 다른 코드(또는 동등한 구성 또는 다른 프로그램)로서 관련된 메모리(및/또는 메모리(125)) 및 다른 동등한 구성 요소와 함께 프로세서(110, 110A)에 프로그래밍되고 저장될 수 있다. 동등하게, 프로세서(110, 110A)가 전체적으로 또는 부분적으로 FPGA, 주문형 IC 및/또는 ASIC로 구현될 수 있을 때, FPGA, 주문형 IC 또는 ASIC는 또한 본 발명의 방법을 구현하도록 설계, 구성 및/또는 배선될 수 있다. 예를 들어, 프로세서(110, 110A)는 가능하게는 메모리(125)를 포함하여, 본 발명의 방법을 구현하도록 각각 배선, 프로그래밍, 설계, 적응 또는 구성된, 통칭하여 "프로세서" 또는 "컨트롤러"로 지칭되는, 아날로그 및/또는 디지털 회로, 컨트롤러, 마이크로프로세서, DSP 및/또는 ASIC의 배열로서 구현될 수 있다.
데이터 저장소(또는 데이터베이스)를 포함할 수 있는 제1 메모리 회로(125) 및 제2 메모리 회로(175)는, 선택된 실시형태에 따라 알려지게 되거나 알려져 있는, 예를 들어, RAM, FLASH, DRAM, SDRAM, SRAM, MRAM, FeRAM, ROM, EPROM 또는 E2PROM, 또는 임의의 다른 유형의 메모리 디바이스, 예를 들어, 자기 하드 드라이브, 광학 드라이브, 자기 디스크 또는 테이프 드라이브, 하드 디스크 드라이브, 다른 기계 판독 가능한 저장 디바이스 또는 메모리 매체, 예를 들어, 플로피 디스크, CDROM, CD-RW, 디지털 다용도 디스크(digital versatile disk: DVD) 또는 다른 광 메모리, 또는 임의의 다른 형태의 메모리, 저장 매체 또는 데이터 저장 장치 또는 회로를 포함하지만 이들로 제한되지 않는, 휘발성이든 비-휘발성이든, 이동식이든 비-이동식이든, 예를 들어, 메모리 집적 회로("IC"), 또는 집적 회로의 메모리 부분(예를 들어, 프로세서(110, 110A) 또는 프로세서 IC 내 상주 메모리)을 포함하지만 이들로 제한되지 않는, 현재 알려진 또는 장래에 이용될 수 있는, 정보를 저장하거나 또는 통신하기 위한 임의의 컴퓨터 또는 다른 기계 판독 가능한 데이터 저장 매체, 메모리 디바이스 또는 다른 저장 디바이스 또는 통신 디바이스 내를 포함하여 임의의 개수의 형식으로 구현될 수 있다. 메모리(125, 175)는 다양한 조회 표(lookup table), 파라미터, 계수, 다른 정보 및 데이터, (본 발명의 소프트웨어의) 프로그램 또는 명령어, 및 데이터베이스 표와 같은 다른 유형의 표를 저장하도록 적응될 수 있다.
전술한 바와 같이, 프로세서(110, 110A)는 예를 들어 본 발명의 소프트웨어 및 데이터 구조를 사용하여, 본 발명의 방법을 수행하도록 배선 또는 프로그래밍된다. 그 결과, 다양한 명령어를 포함하는 본 발명의 시스템 및 관련 방법은, 전술한 비-일시적 컴퓨터 판독 가능한 매체 내에 구현된 명령어 및/또는 메타 데이터 세트와 같은, 이러한 프로그래밍 또는 다른 명령어를 제공하는 소프트웨어로서 구현될 수 있다. 또한, 메타데이터는 또한 조회 표 또는 데이터베이스의 다양한 데이터 구조를 정의하는 데 이용될 수 있다. 이러한 소프트웨어는 예로서 또는 제한 없이 소스 또는 객체 코드 형태일 수 있다. 또한 소스 코드는 일부 형태의 명령어 또는 객체 코드(어셈블리 언어 명령어 또는 구성 정보를 포함)로 컴파일링될 수 있다. 본 발명의 소프트웨어, 소스 코드 또는 메타데이터는 다양한 하드웨어 정의 또는 하드웨어 모델링 언어(예를 들어, 베릴로그(Verilog), VHDL, RTL) 및 결과 데이터베이스 파일(예를 들어, GDSII)을 포함하는, 본 명세서에 논의된 기능을 수행하는, C, C++, Matlab, SystemC, LISA, XML, 자바(Java), BREW, SQL 및 그 변형(예를 들어, SQL 99 또는 사유 버전의 SQL), DB2, 오라클(Oracle), 또는 임의의 다른 유형의 프로그래밍 언어와 같은, 임의의 유형의 코드로서 구현될 수 있다. 그 결과, 본 명세서에서 동등하게 사용된 "구성자", "프로그램 구성자", "소프트웨어 구성자" 또는 "소프트웨어"는 (예를 들어, 프로세서 또는 컴퓨터에 인스턴스화되거나 또는 로드되어 프로세서(110, 110A)를 포함하여 실행되는 경우) 관련 기능 또는 지정된 방법을 제공하거나 제공하도록 해석될 수 있는 임의의 구문 또는 시그너처를 갖는 임의의 종류의 임의의 프로그래밍 언어를 의미하고 지칭한다.
본 발명의 소프트웨어, 메타데이터 또는 다른 소스 코드 및 임의의 결과 비트 파일(목적 코드, 데이터베이스 또는 조회 표)은, 전술한 바와 같이, 메모리(125), 예를 들어, 플로피 디스크, CDROM, CD-RW, DVD, 자기 하드 드라이브, 광학 드라이브, 또는 임의의 다른 유형의 데이터 저장 장치 또는 매체와 관련하여 전술한 바와 같이 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터로서 임의의 컴퓨터 또는 다른 기계 판독 가능한 데이터 저장 매체와 같은 임의의 유형적인 비-일시적인 저장 매체에 구현될 수 있다.
통신 인터페이스(들)(130)는 관련 채널, 네트워크 또는 버스에 적절히 연결되도록 이용되고; 예를 들어, 통신 인터페이스(들)(130)는 유선 또는 무선 인터페이스를 위한 임피던스 매칭, 드라이버 및 다른 기능을 제공할 수 있고, 무선 인터페이스를 위한 복조 및 아날로그-디지털 변환을 제공할 수 있고, 다른 디바이스와 프로세서(110, 110A) 및/또는 메모리(125)의 물리적 인터페이스를 각각 제공할 수 있다. 일반적으로, 통신 인터페이스(들)(130)는 프로그램 명령어, 파라미터, 구성 정보, 제어 메시지, 데이터 및 다른 관련 정보와 같은, 선택된 실시형태에 따라 데이터를 수신 및 전송하는 데 사용된다.
통신 인터페이스(들)(130)는 임의의 적용 가능한 표준(예를 들어 제한 없이, 예를 들어, 다양한 PCI, USB, RJ 45, 이더넷(고속 이더넷, 기가비트 이더넷, 300ase-TX, 300ase-FX 등), IEEE 802.11, 블루투스, WCDMA, WiFi, GSM, GPRS, EDGE, 3G, 및 위에서 언급한 다른 표준 및 시스템 중 하나)을 사용하여, 시스템(50, 50A)과 임의의 유형의 네트워크 또는 외부 디바이스, 예를 들어, 무선, 광학 또는 유선 사이에 데이터 통신을 제공하도록 이 기술 분야에 알려진 것으로 구현되거나 알려져 있을 수 있는 것으로 구현될 수 있고, 임피던스 매칭 기능, 고전압 제어 버스와 인터페이스하기 위한 저전압 프로세서의 전압 변환, 유선 또는 무선 트랜시버, 및 프로세서(110, 110A)로부터의 신호에 응답하여 다양한 라인 또는 커넥터를 턴온하거나 턴오프하는 다양한 스위칭 메커니즘(예를 들어, 트랜지스터)을 포함할 수 있다. 또한, 통신 인터페이스(들)(130)는 또한 예를 들어, 디스플레이 상에 출력하기 위해 예를 들어 실시간으로 정보를 수신하기 위해, 예를 들어 배선 또는 RF 또는 적외선 신호를 통해, 시스템(50, 50A)의 외부에서 신호를 수신하거나 및/또는 전송하도록 구성되거나 및/또는 적응될 수 있다. 통신 인터페이스(들)(130)는 임의의 선택된 아키텍처를 사용하여 임의의 유형의 버스 또는 네트워크 구조 또는 매체에 연결을 제공할 수 있다. 예로서, 제한 없이, 이러한 아키텍처는 산업 표준 아키텍처(Industry Standard Architecture: ISA) 버스, 강화된 ISA(EISA) 버스, 마이크로 채널 아키텍처(Micro Channel Architecture: MCA) 버스, 주변 구성 요소 상호 연결(Peripheral Component Interconnect: PCI) 버스, SAN 버스, 또는 임의의 다른 통신 또는 신호 매체, 예를 들어, 이더넷, ISDN, T1, 위성, 무선 등을 포함한다.
본 발명은 본 발명의 원리를 예시하는 것으로 고려되어야 하고, 본 발명을 도시된 특정 실시형태로 제한하려고 의도된 것이 아니다. 이와 관련하여, 본 발명은 그 적용에 있어서, 도면에 도시되거나 또는 실시예에 설명된 바와 같이, 상기 및 하기에 제시된 구성의 세부 사항 및 구성 요소의 배열로 제한되는 것은 아닌 것으로 이해된다. 본 발명에 따른 시스템, 방법 및 장치는 다른 실시형태도 가능하고 다양한 방식으로 실시 및 수행될 수 있다.
본 발명은 특정 실시형태와 관련하여 설명되었지만, 이들 실시형태는 단지 예시적인 것일 뿐, 본 발명을 제한하는 것이 아니다. 본 발명의 설명에서, 본 발명의 실시형태를 철저히 이해하기 위해 전자 부품, 전자적 및 구조적 연결, 재료 및 구조적 변형의 예와 같은 다수의 특정 세부 사항이 제공된다. 그러나, 이 기술 분야의 통상의 기술자라면 본 발명의 실시형태가 하나 이상의 특정 세부 사항 없이 또는 다른 장치, 시스템, 조립체, 구성 요소, 재료, 부품 등을 사용하여 실시될 수 있다는 것을 인식할 수 있을 것이다. 다른 경우에, 잘 알려진 구조, 재료 또는 동작은 본 발명의 실시형태의 양태를 모호하게 하는 것을 피하기 위해 구체적으로 도시되거나 설명되지 않는다. 또한, 다양한 도면은 일정한 비율로 그려지지 않았으며 본 발명을 제한하는 것으로 고려되어서는 안 된다.
본 명세서에 걸쳐 "일 실시형태", "실시형태" 또는 특정 "실시형태"라는 언급은 실시형태와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시형태에 포함되는 것을 의미할 뿐, 반드시 모든 실시형태에 포함되는 것은 아니며, 또한, 반드시 동일한 실시형태를 언급하는 것은 아니다. 또한, 본 발명의 임의의 특정 실시형태의 특정 특징, 구조 또는 특성은 다른 특징의 대응하는 사용 없이 선택된 특징의 사용을 포함하여 임의의 적합한 방식으로 및 하나 이상의 다른 실시형태와의 임의의 적절한 조합으로 조합될 수 있다. 또한, 특정 응용, 상황 또는 재료를 본 발명의 본질적인 범위 및 사상에 적응시키기 위해 많은 수정이 이루어질 수 있다. 본 명세서에 기술되고 도시된 본 발명의 실시형태의 다른 변형 및 수정은 본 발명의 내용에 비추어 가능하며 본 발명의 사상 및 범위의 일부인 것으로 고려되는 것으로 이해된다.
본 명세서에서 수치 범위를 언급하는 경우, 동일한 정밀도로 사이의 각각의 개재하는 수가 명시적으로 고려된다. 예를 들어, 6 내지 9의 범위의 경우, 6 및 9에 더하여 숫자 7 및 8이 고려되고, 6.0 내지 7.0의 범위의 경우, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9 및 7.0의 수가 명시적으로 고려된다. 또한, 범위 내의 모든 개재하는 하위 범위가 임의의 조합으로 고려되고 본 발명의 범위 내에 있다. 예를 들어, 5 내지 10의 범위의 경우, 5 내지 6, 5 내지 7, 5 내지 8, 5 내지 9, 6 내지 7, 6 내지 8, 6 내지 9, 6 내지 10, 7 내지 8, 7 내지 9, 7 내지 10, 8 내지 9, 8 내지 10, 및 9 내지 10의 하위 범위가 개시된 범위 내에 있는 것으로 고려된다.
도면에 도시된 하나 이상의 요소는 또한 특정 응용에 따라 유용할 수 있는 바와 같이, 더 분리되거나 통합된 방식으로 구현될 수 있고, 또는 심지어 특정 경우에 제거되거나 동작 불가능하게 될 수 있는 것으로 이해된다. 일체형으로 형성된 구성 요소의 조합은 특히 이산 구성 요소를 분리하거나 또는 조합하는 것이 불명확하거나 식별할 수 없는 실시형태에서 본 발명의 범위 내에 있다. 또한, 본 명세서에서 "결합" 또는 "결합 가능한"과 같은 다양한 형태를 포함하는 "결합된"이라는 용어의 사용은, 일체로 형성된 구성 요소 및 다른 구성 요소들을 통해 결합된 구성 요소들을 포함하는, 임의의 직접 또는 간접 전기적, 구조적 또는 자기적 결합, 연결 또는 부착, 또는 이러한 직접 또는 간접 전기적, 구조적 또는 자기적 결합, 연결 또는 부착을 위한 적응 또는 능력을 의미하고 포함한다.
신호와 관련하여 본 명세서에서 주어진 측정 항목을 "나타내고" 또는 주어진 측정 항목을 "대표하는" 파라미터를 언급하는 데, 여기서 측정 항목은 레귤레이터 또는 그 입력 또는 출력의 적어도 일부의 상태의 측정값이다. 파라미터를 조정하면 측정 항목을 만족스럽게 조정하기에 충분할 정도로 직접 측정 항목과 관련된 경우 파라미터는 측정 항목을 나타내는 것으로 고려된다. 파라미터가 측정 항목의 배수 또는 분수를 나타내는 경우 파라미터는 측정 항목을 허용 가능한 표현인 것으로 고려될 수 있다.
더욱이, 도면/도면들에서 임의의 신호 화살표는 달리 구체적으로 언급되지 않는 한, 단지 예시적인 것일 뿐 본 발명을 제한하는 것이 아닌 것으로 고려되어야 한다. 단계의 성분들의 조합은 또한 본 발명의 범위 내에서, 특히 분리 또는 결합 능력이 불분명하거나 예측 가능한 경우에 고려될 수 있다. 일반적으로 본 명세서 및 하기 청구 범위에 사용된 논리합 용어 "또는"은, 달리 지시되지 않는 한, 논리곱 및 논리합의 의미(및 "배타적 논리합"을 의미하는 것으로 국한되지 않음)를 모두 갖는 "및/또는"을 의미하는 것으로 의도된다. 본 명세서 및 하기 청구 범위에 사용된 단수 요소 및 "상기" 요소는 문맥 상 명백히 달리 지시되지 않는 한 복수를 포함한다. 또한, 본 명세서의 설명 및 하기 청구 범위에 사용된 " 내에"의 의미는 문맥 상 명백히 달리 지시하지 않는 한 "내에" 및 "상에"를 포함한다.
'발명의 내용'란 또는 '요약서'란에 설명된 것을 포함하여, 본 발명의 예시된 실시형태에 대한 전술한 설명은 본 발명을 모두 설명하려고 의도된 것도 아니고 본 발명을 본 명세서에 개시된 정확한 형태로 한정하거나 제한하려고 의도된 것이 아니다. 상기로부터, 다수의 변형, 수정 및 대체가 의도되고 본 발명의 신규한 개념의 사상 및 범위를 벗어나지 않으면서 수행될 수 있는 것으로 이해된다. 본 명세서에 예시된 특정 방법 및 장치와 관련하여 제한을 두는 것으로 의도되거나 유추되서는 안 되는 것으로 이해된다. 물론, 청구 범위에 속하는 이러한 모든 수정은 첨부된 청구범위에 의해 포함되는 것으로 의도된다.
Claims (15)
- 제1 메모리 회로(125)에 결합 가능한 시스템(50A)으로서,
적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 프로그래밍 가능한 원자적 동작 중 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 수행하도록 적응된 프로그래밍 가능한 원자적 동작 회로부(programmable atomic operations circuitry)(135)를 포함하는 프로세서 회로(110A); 및
상기 프로세서 회로(110A)에 결합된 메모리 컨트롤러 회로(100A)
를 포함하고,
상기 메모리 컨트롤러 회로(100A)는,
상기 제1 메모리 회로에 결합 가능한 제1 메모리 제어 회로(155) - 상기 제1 메모리 제어 회로는 판독 요청에 응답하여 상기 제1 메모리 회로로부터 요청된 데이터를 판독 또는 로드하고, 기입 요청에 응답하여 요청된 데이터를 상기 제1 메모리 회로에 기입 또는 저장하도록 적응됨 -;
제2 메모리 회로(175); 및
상기 제2 메모리 회로 및 상기 제1 메모리 제어 회로에 결합된 제2 메모리 제어 회로(160) - 상기 제2 메모리 제어 회로는, 메모리 어드레스 및 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청에 응답하여, 상기 원자적 동작 요청을 상기 프로그래밍 가능한 원자적 동작 회로부에 전송하고, 상기 메모리 어드레스에 대응하는 메모리 위험 레지스터(memory hazard register)에 저장된 위험 비트를 설정하도록 적응됨 -
를 포함하는, 시스템(50A). - 제1항에 있어서,
상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청은 물리적 메모리 어드레스, 프로그래밍 가능한 원자적 동작 식별자, 및 적어도 하나의 스레드 상태 레지스터 값을 포함하는, 시스템(50A). - 제2항에 있어서,
상기 프로그래밍 가능한 원자적 동작 회로부(135)는 스레드 상태 정보를 저장하는 적어도 하나의 레지스터(615, 710)를 더 포함하는, 시스템(50A). - 제3항에 있어서,
상기 프로그래밍 가능한 원자적 동작 회로부(135)는, 상기 적어도 하나의 프로그래밍 가능한 원자적 동작을 지정하는 원자적 동작 요청을 수신하는 것에 응답하여, 상기 물리적 메모리 어드레스, 상기 메모리 어드레스에 대응하는 임의의 데이터, 및 상기 적어도 하나의 스레드 상태 레지스터 값으로 상기 적어도 하나의 레지스터(615, 710)를 초기화하도록 더 적응되는, 시스템(50A). - 제1항에 있어서,
상기 메모리 컨트롤러 회로(100A)는, 적어도 하나의 미리 결정된 원자적 동작을 지정하는 원자적 동작 요청에 응답하여 복수의 미리 결정된 원자적 동작 중 상기 적어도 하나의 미리 결정된 원자적 동작을 수행하도록 적응된 미리 결정된 원자적 동작 회로부(185)를 더 포함하는, 시스템(50A). - 제5항에 있어서,
상기 복수의 미리 결정된 원자적 동작은, 페치 및 AND(Fetch-and-AND), 페치 및 OR(Fetch-and-OR), 페치 및 XOR(Fetch-and-XOR), 페치 및 가산(Fetch-and-Add), 페치 및 감산(Fetch-and-Subtract), 페치 및 증분(Fetch-and-Increment), 페치 및 감분(Fetch-and-Decrement), 페치 및 최소(Fetch-and-Minimum), 페치 및 최대(Fetch-and-Maximum), 페치 및 스왑(Fetch-and-Swap), 비교 및 스왑(Compare-and-Swap), 및 이들의 조합으로 구성된 그룹으로부터 선택되는 적어도 2개의 미리 결정된 원자적 동작을 포함하는, 시스템(50A). - 제1항에 있어서,
상기 프로그래밍 가능한 원자적 동작 회로부(135)는,
상기 적어도 하나의 프로그래밍 가능한 원자적 동작에 대응하는 복수의 프로세서 명령어를 저장하는 명령어 캐시(640);
상기 프로그래밍 가능한 원자적 동작에 대응하는 스레드 식별자를 저장하는 실행 큐(645);
상기 명령어 캐시 및 상기 실행 큐에 결합된 코어 제어 회로(610) - 상기 코어 제이 회로는, 상기 프로그래밍 가능한 원자적 동작에 대응하는 스레드 식별자에 응답하여, 상기 프로그래밍 가능한 원자적 동작의 실행을 위해 상기 명령어 캐시에서 시작 또는 다음 명령어 또는 명령어 어드레스를 선택하도록 적응됨 -; 및
상기 프로그래밍 가능한 원자적 동작을 위한 적어도 하나의 명령어를 실행하고, 결과 데이터를 생성하도록 적응된 프로세서 코어(605)
를 포함하는, 시스템(50A). - 제7항에 있어서,
상기 프로세서 코어(605)는 저장 및 잠금 소거 명령어(store and clear lock instruction)를 실행하여 상기 제2 메모리 제어 회로에 대한 원자적 기입 요청을 생성하도록 더 적응되고, 상기 원자적 기입 요청은 상기 결과 데이터, 및 상기 결과 데이터를 상기 제2 메모리 회로에 기입한 다음에 메모리 위험 비트를 리셋 또는 소거하기 위한 지정(designation)을 갖는, 시스템(50A). - 제1항에 있어서,
상기 프로그래밍 가능한 원자적 동작 회로부(135)는 사용자 정의된 원자적 동작(user-defined atomic operations), 다중 사이클 연산(multi-cycle operations), 부동 소수점 연산(floating point operations) 및 다중 명령어 연산(multi-instruction operations)을 수행하도록 적응되는, 시스템(50A). - 제1항에 있어서,
상기 제1 메모리 제어 회로(155)는,
상기 제1 메모리 회로(125)에 대한 복수의 판독 또는 기입 요청을 저장하는 복수의 메모리 뱅크 요청 큐(265);
상기 복수의 메모리 뱅크 요청 큐에 결합된 스케줄러 회로(270) - 상기 스케줄러는 상기 복수의 메모리 뱅크 요청 큐로부터 상기 복수의 판독 또는 기입 요청 중의 판독 또는 기입 요청을 선택하고, 상기 제1 메모리 회로(125)에 대한 액세스를 위해 상기 판독 또는 기입 요청을 스케줄링하도록 적응됨 -; 및
상기 스케줄러에 결합된 제1 메모리 액세스 제어 회로(275) - 상기 제1 메모리 액세스 제어 회로는 상기 제1 메모리 회로로부터 데이터를 판독 또는 로드하고, 상기 제1 메모리 회로(125)에 데이터를 기입 또는 저장하도록 적응됨 -
를 포함하는, 시스템(50A). - 제10항에 있어서,
상기 제1 메모리 제어 회로(155)는,
복수의 메모리 요청을 저장하는 복수의 메모리 요청 큐(280, 285);
상기 복수의 메모리 요청 큐로부터 메모리 요청을 선택하는 요청 선택 멀티플렉서(305);
상기 복수의 메모리 요청에 대응하는 데이터를 저장하는 복수의 메모리 데이터 큐(290, 295); 및
상기 복수의 메모리 데이터 큐로부터 데이터를 선택하는 데이터 선택 멀티플렉서(310) - 상기 선택된 데이터는 상기 선택된 메모리 요청에 대응함 -
를 더 포함하는, 시스템(50A). - 제1항에 있어서,
상기 제2 메모리 제어 회로(160)는,
판독 요청 또는 기입 요청을 저장하는 네트워크 요청 큐(250);
원자적 동작 요청을 저장하는 원자적 동작 요청 큐(255);
상기 네트워크 요청 큐 및 상기 원자적 동작 요청 큐에 결합되어 상기 네트워크 요청 큐 또는 상기 원자적 동작 요청 큐로부터 요청을 선택하는 인바운드 요청 멀티플렉서(245);
하나 이상의 메모리 위험 레지스터(260)를 갖는 메모리 위험 제어 회로(230); 및
상기 메모리 위험 제어 회로 및 상기 인바운드 요청 멀티플렉서에 결합된 제2 메모리 액세스 제어 회로(225) - 상기 제2 메모리 액세스 제어 회로는, 상기 선택된 요청에 응답하여 상기 제2 메모리 회로(175)로부터 데이터를 판독 또는 로드하거나 또는 상기 제2 메모리 회로에 데이터를 기입 또는 저장하고, 상기 하나 이상의 메모리 위험 레지스터에 저장된 위험 비트를 설정 또는 소거하도록 상기 메모리 위험 제어 회로에 시그널링하도록 적응됨 -
를 포함하는, 시스템(50A). - 제12항에 있어서,
상기 제2 메모리 제어 회로(160)는,
상기 제2 메모리 액세스 제어 회로에 결합된 지연 회로(235); 및
판독 요청 또는 기입 요청으로부터의 데이터에 의해 덮어기입되기 전에 상기 제1 메모리 회로에 기입될 데이터를 상기 제2 메모리 회로의 캐시 라인이 포함할 때 상기 제2 메모리 회로로부터 캐시 퇴거 요청(cache eviction request)을 선택하거나, 또는 상기 제1 메모리 회로에 액세스하는 것을 요구하는 인바운드 네트워크 요청을 선택하는 인바운드 제어 멀티플렉서(240)
를 더 포함하는, 시스템(50A). - 제1항에 있어서,
상기 프로세서 회로(110A)는, 비-스위칭식 직접 통신 버스(unswitched, direct communication bus)(60, 60A)를 통해 상기 제1 메모리 제어 회로에 결합되는, 시스템(50A). - 제1항에 있어서,
상기 제1 메모리 제어 회로(155), 상기 제2 메모리 회로(175), 상기 제2 메모리 제어 회로(160), 미리 결정된 원자적 동작 회로부(185) 및 상기 프로세서 회로(110A)는 단일 집적 회로 또는 단일 시스템 온 칩(SOC)으로서 구현되는, 시스템(50A).
Applications Claiming Priority (8)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862623331P | 2018-01-29 | 2018-01-29 | |
US62/623,331 | 2018-01-29 | ||
PCT/US2019/015467 WO2019148131A1 (en) | 2018-01-29 | 2019-01-28 | Memory controller with programmable atomic operations |
US16/259,862 | 2019-01-28 | ||
KR1020207023320A KR102407106B1 (ko) | 2018-01-29 | 2019-01-28 | 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 |
US16/259,862 US10956086B2 (en) | 2018-01-29 | 2019-01-28 | Memory controller |
US16/259,879 | 2019-01-28 | ||
US16/259,879 US10915271B2 (en) | 2018-01-29 | 2019-01-28 | Memory controller with programmable atomic operations |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207023320A Division KR102407106B1 (ko) | 2018-01-29 | 2019-01-28 | 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220083848A true KR20220083848A (ko) | 2022-06-20 |
Family
ID=65411950
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227018968A KR20220083849A (ko) | 2018-01-29 | 2019-01-28 | 메모리 컨트롤러 |
KR1020227018954A KR20220083848A (ko) | 2018-01-29 | 2019-01-28 | 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227018968A KR20220083849A (ko) | 2018-01-29 | 2019-01-28 | 메모리 컨트롤러 |
Country Status (2)
Country | Link |
---|---|
KR (2) | KR20220083849A (ko) |
WO (2) | WO2019148129A1 (ko) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7360031B2 (en) * | 2005-06-29 | 2008-04-15 | Intel Corporation | Method and apparatus to enable I/O agents to perform atomic operations in shared, coherent memory spaces |
CN110097492A (zh) * | 2013-09-26 | 2019-08-06 | 想象技术有限公司 | 原子存储器更新单元和方法 |
US9652385B1 (en) * | 2015-11-27 | 2017-05-16 | Arm Limited | Apparatus and method for handling atomic update operations |
-
2019
- 2019-01-28 KR KR1020227018968A patent/KR20220083849A/ko active IP Right Grant
- 2019-01-28 KR KR1020227018954A patent/KR20220083848A/ko active IP Right Grant
- 2019-01-28 WO PCT/US2019/015463 patent/WO2019148129A1/en active Search and Examination
- 2019-01-28 WO PCT/US2019/015467 patent/WO2019148131A1/en active Search and Examination
Also Published As
Publication number | Publication date |
---|---|
KR20220083849A (ko) | 2022-06-20 |
WO2019148129A1 (en) | 2019-08-01 |
WO2019148131A1 (en) | 2019-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102407106B1 (ko) | 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 | |
US11334262B2 (en) | On-chip atomic transaction engine | |
KR101753913B1 (ko) | 기계 비전 알고리즘을 위한 멀티프로세서 시스템온칩 | |
CN103793342B (zh) | 一种多通道直接内存存取dma控制器 | |
EP3352090A1 (en) | Multi-channel dma system with command queue structure supporting three dma modes | |
EP3335124B1 (en) | Register files for i/o packet compression | |
US11023410B2 (en) | Instructions for performing multi-line memory accesses | |
US20130054896A1 (en) | System memory controller having a cache | |
US10817446B1 (en) | Optimized multiport NVMe controller for multipath input/output applications | |
WO2022086791A1 (en) | Detecting infinite loops in a programmable atomic transaction | |
US12019920B2 (en) | Memory controller with programmable atomic operations | |
WO2020247240A1 (en) | Extended memory interface | |
US10802828B1 (en) | Instruction memory | |
KR20220083848A (ko) | 프로그래밍 가능한 원자적 동작을 하는 메모리 컨트롤러 | |
US10185684B2 (en) | System interconnect and operating method of system interconnect | |
EP3844623A1 (en) | Method, apparatus, and system for prefetching exclusive cache coherence state for store instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |